DOMPurify-0.7.3/000077500000000000000000000000001262533660300133455ustar00rootroot00000000000000DOMPurify-0.7.3/.gitignore000066400000000000000000000000651262533660300153360ustar00rootroot00000000000000.project node_modules bower_components npm-debug.log DOMPurify-0.7.3/.jshintrc000066400000000000000000000002501262533660300151670ustar00rootroot00000000000000{ "browser": false, "curly": true, "eqeqeq": true, "expr": true, "laxbreak": true, "smarttabs": true, "strict": true, "undef": true, "unused": true } DOMPurify-0.7.3/.travis.yml000066400000000000000000000010051262533660300154520ustar00rootroot00000000000000sudo: false language: node_js node_js: - '4.2' before_install: - npm install -g bower - bower install notifications: email: false env: global: - secure: GQ/MxXGdlpjXdnASyAeuTUvErhx61l+IS2rCo7vIrxKFxIqpa7AQnGp/eoBDitscvDgYIiVhXOPnTdjYYT6UgMwX169Fm9lg3jbFDqAHCsWQmtEIDKHyNwT2gi97rLqBDyXpwTmQebF2s7P914OayyoaY1NnTU/JGRdDi79lm80= - secure: ZWko24CzEV7geTReAQhMBElwB7WBj+V+tZztjpOrogMS7BLT43qwTNF9FPuvdk9JjBV/sEdz3NWZhutXDkcNyLdCtLNIgxRkqCbXXn+S4cW4lYxPHWXyvtNu7mzuow1chq74L45CBpOFzpnkUsP13X4F8rU7o8XDvDsoPHZZYtc= DOMPurify-0.7.3/LICENSE000066400000000000000000000410031262533660300143500ustar00rootroot00000000000000DOMPurify Copyright 2015 Mario Heiderich DOMPurify is free software; you can redistribute it and/or modify it under the terms of either: a) the Apache License Version 2.0, or b) the Mozilla Public License Version 2.0 ----------------------------------------------------------------------------- Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ----------------------------------------------------------------------------- Mozilla Public License, version 2.0 1. Definitions 1.1. “Contributor” means each individual or legal entity that creates, contributes to the creation of, or owns Covered Software. 1.2. “Contributor Version” means the combination of the Contributions of others (if any) used by a Contributor and that particular Contributor’s Contribution. 1.3. “Contribution” means Covered Software of a particular Contributor. 1.4. “Covered Software” means Source Code Form to which the initial Contributor has attached the notice in Exhibit A, the Executable Form of such Source Code Form, and Modifications of such Source Code Form, in each case including portions thereof. 1.5. “Incompatible With Secondary Licenses” means a. that the initial Contributor has attached the notice described in Exhibit B to the Covered Software; or b. that the Covered Software was made available under the terms of version 1.1 or earlier of the License, but not also under the terms of a Secondary License. 1.6. “Executable Form” means any form of the work other than Source Code Form. 1.7. “Larger Work” means a work that combines Covered Software with other material, in a separate file or files, that is not Covered Software. 1.8. “License” means this document. 1.9. “Licensable” means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently, any and all of the rights conveyed by this License. 1.10. “Modifications” means any of the following: a. any file in Source Code Form that results from an addition to, deletion from, or modification of the contents of Covered Software; or b. any new file in Source Code Form that contains any Covered Software. 1.11. “Patent Claims” of a Contributor means any patent claim(s), including without limitation, method, process, and apparatus claims, in any patent Licensable by such Contributor that would be infringed, but for the grant of the License, by the making, using, selling, offering for sale, having made, import, or transfer of either its Contributions or its Contributor Version. 1.12. “Secondary License” means either the GNU General Public License, Version 2.0, the GNU Lesser General Public License, Version 2.1, the GNU Affero General Public License, Version 3.0, or any later versions of those licenses. 1.13. “Source Code Form” means the form of the work preferred for making modifications. 1.14. “You” (or “Your”) means an individual or a legal entity exercising rights under this License. For legal entities, “You” includes any entity that controls, is controlled by, or is under common control with You. For purposes of this definition, “control” means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. 2. License Grants and Conditions 2.1. Grants Each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license: a. under intellectual property rights (other than patent or trademark) Licensable by such Contributor to use, reproduce, make available, modify, display, perform, distribute, and otherwise exploit its Contributions, either on an unmodified basis, with Modifications, or as part of a Larger Work; and b. under Patent Claims of such Contributor to make, use, sell, offer for sale, have made, import, and otherwise transfer either its Contributions or its Contributor Version. 2.2. Effective Date The licenses granted in Section 2.1 with respect to any Contribution become effective for each Contribution on the date the Contributor first distributes such Contribution. 2.3. Limitations on Grant Scope The licenses granted in this Section 2 are the only rights granted under this License. No additional rights or licenses will be implied from the distribution or licensing of Covered Software under this License. Notwithstanding Section 2.1(b) above, no patent license is granted by a Contributor: a. for any code that a Contributor has removed from Covered Software; or b. for infringements caused by: (i) Your and any other third party’s modifications of Covered Software, or (ii) the combination of its Contributions with other software (except as part of its Contributor Version); or c. under Patent Claims infringed by Covered Software in the absence of its Contributions. This License does not grant any rights in the trademarks, service marks, or logos of any Contributor (except as may be necessary to comply with the notice requirements in Section 3.4). 2.4. Subsequent Licenses No Contributor makes additional grants as a result of Your choice to distribute the Covered Software under a subsequent version of this License (see Section 10.2) or under the terms of a Secondary License (if permitted under the terms of Section 3.3). 2.5. Representation Each Contributor represents that the Contributor believes its Contributions are its original creation(s) or it has sufficient rights to grant the rights to its Contributions conveyed by this License. 2.6. Fair Use This License is not intended to limit any rights You have under applicable copyright doctrines of fair use, fair dealing, or other equivalents. 2.7. Conditions Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in Section 2.1. 3. Responsibilities 3.1. Distribution of Source Form All distribution of Covered Software in Source Code Form, including any Modifications that You create or to which You contribute, must be under the terms of this License. You must inform recipients that the Source Code Form of the Covered Software is governed by the terms of this License, and how they can obtain a copy of this License. You may not attempt to alter or restrict the recipients’ rights in the Source Code Form. 3.2. Distribution of Executable Form If You distribute Covered Software in Executable Form then: a. such Covered Software must also be made available in Source Code Form, as described in Section 3.1, and You must inform recipients of the Executable Form how they can obtain a copy of such Source Code Form by reasonable means in a timely manner, at a charge no more than the cost of distribution to the recipient; and b. You may distribute such Executable Form under the terms of this License, or sublicense it under different terms, provided that the license for the Executable Form does not attempt to limit or alter the recipients’ rights in the Source Code Form under this License. 3.3. Distribution of a Larger Work You may create and distribute a Larger Work under terms of Your choice, provided that You also comply with the requirements of this License for the Covered Software. If the Larger Work is a combination of Covered Software with a work governed by one or more Secondary Licenses, and the Covered Software is not Incompatible With Secondary Licenses, this License permits You to additionally distribute such Covered Software under the terms of such Secondary License(s), so that the recipient of the Larger Work may, at their option, further distribute the Covered Software under the terms of either this License or such Secondary License(s). 3.4. Notices You may not remove or alter the substance of any license notices (including copyright notices, patent notices, disclaimers of warranty, or limitations of liability) contained within the Source Code Form of the Covered Software, except that You may alter any license notices to the extent required to remedy known factual inaccuracies. 3.5. Application of Additional Terms You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, You may do so only on Your own behalf, and not on behalf of any Contributor. You must make it absolutely clear that any such warranty, support, indemnity, or liability obligation is offered by You alone, and You hereby agree to indemnify every Contributor for any liability incurred by such Contributor as a result of warranty, support, indemnity or liability terms You offer. You may include additional disclaimers of warranty and limitations of liability specific to any jurisdiction. 4. Inability to Comply Due to Statute or Regulation If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Software due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be placed in a text file included with all distributions of the Covered Software under this License. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it. 5. Termination 5.1. The rights granted under this License will terminate automatically if You fail to comply with any of its terms. However, if You become compliant, then the rights granted under this License from a particular Contributor are reinstated (a) provisionally, unless and until such Contributor explicitly and finally terminates Your grants, and (b) on an ongoing basis, if such Contributor fails to notify You of the non-compliance by some reasonable means prior to 60 days after You have come back into compliance. Moreover, Your grants from a particular Contributor are reinstated on an ongoing basis if such Contributor notifies You of the non-compliance by some reasonable means, this is the first time You have received notice of non-compliance with this License from such Contributor, and You become compliant prior to 30 days after Your receipt of the notice. 5.2. If You initiate litigation against any entity by asserting a patent infringement claim (excluding declaratory judgment actions, counter-claims, and cross-claims) alleging that a Contributor Version directly or indirectly infringes any patent, then the rights granted to You by any and all Contributors for the Covered Software under Section 2.1 of this License shall terminate. 5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or Your distributors under this License prior to termination shall survive termination. 6. Disclaimer of Warranty Covered Software is provided under this License on an “as is” basis, without warranty of any kind, either expressed, implied, or statutory, including, without limitation, warranties that the Covered Software is free of defects, merchantable, fit for a particular purpose or non-infringing. The entire risk as to the quality and performance of the Covered Software is with You. Should any Covered Software prove defective in any respect, You (not any Contributor) assume the cost of any necessary servicing, repair, or correction. This disclaimer of warranty constitutes an essential part of this License. No use of any Covered Software is authorized under this License except under this disclaimer. 7. Limitation of Liability Under no circumstances and under no legal theory, whether tort (including negligence), contract, or otherwise, shall any Contributor, or anyone who distributes Covered Software as permitted above, be liable to You for any direct, indirect, special, incidental, or consequential damages of any character including, without limitation, damages for lost profits, loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses, even if such party shall have been informed of the possibility of such damages. This limitation of liability shall not apply to liability for death or personal injury resulting from such party’s negligence to the extent applicable law prohibits such limitation. Some jurisdictions do not allow the exclusion or limitation of incidental or consequential damages, so this exclusion and limitation may not apply to You. 8. Litigation Any litigation relating to this License may be brought only in the courts of a jurisdiction where the defendant maintains its principal place of business and such litigation shall be governed by laws of that jurisdiction, without reference to its conflict-of-law provisions. Nothing in this Section shall prevent a party’s ability to bring cross-claims or counter-claims. 9. Miscellaneous This License represents the complete agreement concerning the subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not be used to construe this License against a Contributor. 10. Versions of the License 10.1. New Versions Mozilla Foundation is the license steward. Except as provided in Section 10.3, no one other than the license steward has the right to modify or publish new versions of this License. Each version will be given a distinguishing version number. 10.2. Effect of New Versions You may distribute the Covered Software under the terms of the version of the License under which You originally received the Covered Software, or under the terms of any subsequent version published by the license steward. 10.3. Modified Versions If you create software not governed by this License, and you want to create a new license for such software, you may create and use a modified version of this License if you rename the license and remove any references to the name of the license steward (except to note that such modified license differs from this License). 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses If You choose to distribute Source Code Form that is Incompatible With Secondary Licenses under the terms of this version of the License, the notice described in Exhibit B of this License must be attached. Exhibit A - Source Code Form License Notice This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice. You may add additional accurate notices of copyright ownership. Exhibit B - “Incompatible With Secondary Licenses” Notice This Source Code Form is “Incompatible With Secondary Licenses”, as defined by the Mozilla Public License, v. 2.0. DOMPurify-0.7.3/README.md000066400000000000000000000253121262533660300146270ustar00rootroot00000000000000# DOMPurify [![Bower version](https://badge.fury.io/bo/dompurify.svg)](http://badge.fury.io/bo/dompurify) · [![npm version](https://badge.fury.io/js/dompurify.svg)](http://badge.fury.io/js/dompurify) · [![Build Status](https://travis-ci.org/cure53/DOMPurify.svg?branch=master)](https://travis-ci.org/cure53/DOMPurify) [![NPM](https://nodei.co/npm/dompurify.png)](https://nodei.co/npm/dompurify/) DOMPurify is a DOM-only, super-fast, uber-tolerant XSS sanitizer for HTML, MathML and SVG. It's also very simple to use and get started with. DOMPurify is written in JavaScript and works in all modern browsers (Safari, Opera (15+), Internet Explorer (10+), Edge, Firefox and Chrome - as well as almost anything else using Blink or WebKit). It doesn't break on IE6 or other legacy browsers. It simply does nothing there. Our automated tests cover [9 different browsers](https://github.com/cure53/DOMPurify/blob/master/test/karma.conf.js#L125) right now. DOMPurify is written by security people who have vast background in web attacks and XSS. Fear not. For more details please also read about our [Security Goals & Threat Model](https://github.com/cure53/DOMPurify/wiki/Security-Goals-&-Threat-Model) ## What does it do? DOMPurify sanitizes HTML and prevents XSS attacks. You can feed DOMPurify with string full of dirty HTML and it will return a string with clean HTML. DOMPurify will strip out everything that contains dangerous HTML and thereby prevent XSS attacks and other nastiness. It's also damn bloody fast. We use the technologies the browser provides and turn them into an XSS filter. The faster your browser, the faster DOMPurify will be. ## How do I use it? It's easy. Just include DOMPurify on your website. ### Using the unminified development version ```html ``` ### Using the minified and tested production version (source-map available) ```html ``` Afterwards you can sanitize strings by executing the following code: ```javascript var clean = DOMPurify.sanitize(dirty); ``` The resulting HTML can be written into a DOM element using `innerHTML` or the DOM using `document.write()`. That is fully up to you. But keep in mind, if you use the sanitized HTML with jQuery's very insecure `elm.html()` method, then the `SAFE_FOR_JQUERY` flag has to be set to make sure it's safe! Other than that, all is fine. If you're using an [AMD](https://github.com/amdjs/amdjs-api/wiki/AMD) module loader like [Require.js](http://requirejs.org/), you can load this script asynchronously as well: ```javascript require(['dompurify'], function(DOMPurify) { var clean = DOMPurify.sanitize(dirty); }); ``` You can also grab the files straight from npm (requires either [io.js](https://iojs.org) or [Browserify](http://browserify.org/), **Node.js 0.x is not supported**): ```bash npm install dompurify ``` ```javascript var DOMPurify = require('dompurify'); var clean = DOMPurify.sanitize(dirty); ``` ## Is there a demo? Of course there is a demo! [Play with DOMPurify](https://cure53.de/purify) ## What if I find a bypass? If that happens, you probably qualify for a juicy bug bounty! The fine folks over at [FastMail](https://www.fastmail.com/) use DOMPurify for their services and added our library to their bug bounty scope. So, if you find a way to bypass or weaken DOMPurify, please have a look at their website and the [bug bounty info](https://www.fastmail.com/about/bugbounty.html). ## Some purification samples please? How does purified markup look like? Well, [the demo](https://cure53.de/purify) shows it for a big bunch of nasty elements. But let's also show some smaller examples! ```javascript DOMPurify.sanitize(''); // becomes DOMPurify.sanitize(''); // becomes DOMPurify.sanitize('

abc
goodbye

not me!

'; // Specify a configuration directive var config = { ALLOWED_TAGS: ['p', '#text'], // only

and text nodes KEEP_CONTENT: false, // remove content from non-white-listed nodes too ADD_ATTR: ['kitty-litter'], // permit kitty-litter attributes ADD_TAGS: ['ying', 'yang'], // permit additional custom tags RETURN_DOM: true // return a document object instead of a string }; // Clean HTML string and write into our DIV var clean = DOMPurify.sanitize(dirty, config); // grab outerHTML from returned document document.getElementById('sanitized').innerHTML = clean; DOMPurify-0.7.3/demos/basic-demo.html000066400000000000000000000012771262533660300173540ustar00rootroot00000000000000

DOMPurify-0.7.3/demos/config-demo.html000066400000000000000000000020231262533660300175260ustar00rootroot00000000000000
DOMPurify-0.7.3/demos/hooks-demo.html000066400000000000000000000020461262533660300174110ustar00rootroot00000000000000
DOMPurify-0.7.3/demos/hooks-link-proxy-demo.html000066400000000000000000000042341262533660300215240ustar00rootroot00000000000000
DOMPurify-0.7.3/demos/hooks-mentaljs-demo.html000066400000000000000000000066531262533660300212340ustar00rootroot00000000000000
DOMPurify-0.7.3/demos/hooks-proxy-demo.html000066400000000000000000000612041262533660300205710ustar00rootroot00000000000000
DOMPurify-0.7.3/demos/hooks-removal-demo.html000066400000000000000000000105301262533660300210510ustar00rootroot00000000000000
DOMPurify-0.7.3/demos/hooks-sanitize-css-demo.html000066400000000000000000000152771262533660300220350ustar00rootroot00000000000000
DOMPurify-0.7.3/demos/hooks-scheme-whitelist.html000066400000000000000000000076371262533660300217560ustar00rootroot00000000000000
DOMPurify-0.7.3/demos/hooks-svg-demo.html000066400000000000000000000212351262533660300202070ustar00rootroot00000000000000
DOMPurify-0.7.3/demos/hooks-target-blank-demo.html000066400000000000000000000040451262533660300217630ustar00rootroot00000000000000
DOMPurify-0.7.3/demos/lib/000077500000000000000000000000001262533660300152225ustar00rootroot00000000000000DOMPurify-0.7.3/demos/lib/Mental.js000066400000000000000000013002601262533660300170020ustar00rootroot00000000000000(function(exports) { var rulesLookup = { 0 : 'ArrayComma', 1 : 'ArrayOpen', 2 : 'ArrayClose', 3 : 'AccessorOpen', 4 : 'AccessorClose', 5 : 'Addition', 6 : 'AdditionAssignment', 7 : 'AssignmentDivide', 8 : 'AndAssignment', 9 : 'BlockStatementCurlyOpen', 10 : 'BlockStatementCurlyClose', 11 : 'BitwiseNot', 12 : 'BitwiseOr', 13 : 'BitwiseAnd', 14 : 'Break', 15 : 'Case', 16 : 'Default', 17 : 'Delete', 18 : 'Do', 19 : 'DoStatementCurlyOpen', 20 : 'DoStatementCurlyClose', 21 : 'DivideOperator', 22 : 'CatchStatement', 23 : 'CatchStatementParenOpen', 24 : 'CatchStatementParenClose', 25 : 'CatchStatementIdentifier', 26 : 'CatchStatementCurlyOpen', 27 : 'CatchStatementCurlyClose', 28 : 'Comma', 29 : 'Continue', 30 : 'EqualAssignment', 31 : 'Equal', 32 : 'Else', 33 : 'ElseCurlyOpen', 34 : 'ElseCurlyClose', 35 : 'EndStatement', 36 : 'False', 37 : 'FinallyStatement', 38 : 'FinallyStatementCurlyOpen', 39 : 'FinallyStatementCurlyClose', 40 : 'ForStatement', 41 : 'ForStatementParenOpen', 42 : 'ForStatementParenClose', 43 : 'ForStatementCurlyOpen', 44 : 'ForStatementCurlyClose', 45 : 'ForSemi', 46 : 'FunctionCallOpen', 47 : 'FunctionCallClose', 48 : 'FunctionArgumentIdentifier', 49 : 'FunctionArgumentComma', 50 : 'FunctionIdentifier', 51 : 'FunctionParenOpen', 52 : 'FunctionExpression', 53 : 'FunctionExpressionIdentifier', 54 : 'FunctionExpressionParenOpen', 55 : 'FunctionExpressionArgumentIdentifier', 56 : 'FunctionExpressionArgumentComma', 57 : 'FunctionParenClose', 58 : 'FunctionExpressionParenClose', 59 : 'FunctionExpressionCurlyOpen', 60 : 'FunctionStatement', 61 : 'FunctionStatementCurlyOpen', 62 : 'FunctionStatementCurlyClose', 63 : 'FunctionExpressionCurlyClose', 64 : 'GreaterThan', 65 : 'GreaterThanEqual', 66 : 'IdentifierDot', 67 : 'Identifier', 68 : 'IfStatement', 69 : 'IfStatementParenOpen', 70 : 'IfStatementParenClose', 71 : 'IfStatementCurlyOpen', 72 : 'IfStatementCurlyClose', 73 : 'In', 74 : 'Infinity', 75 : 'InstanceOf', 76 : 'LabelColon', 77 : 'LessThan', 78 : 'LessThanEqual', 79 : 'LeftShift', 80 : 'LeftShiftAssignment', 81 : 'LogicalOr', 82 : 'LogicalAnd', 83 : 'NaN', 84 : 'New', 85 : 'Number', 86 : 'Null', 87 : 'NotEqual', 88 : 'Not', 89 : 'Nothing', 90 : 'Minus', 91 : 'MinusAssignment', 92 : 'Modulus', 93 : 'ModulusAssignment', 94 : 'Multiply', 95 : 'MultiplyAssignment', 96 : 'ObjectLiteralCurlyOpen', 97 : 'ObjectLiteralCurlyClose', 98 : 'ObjectLiteralIdentifier', 99 : 'ObjectLiteralColon', 100 : 'ObjectLiteralComma', 101 : 'ObjectLiteralIdentifierNumber', 102 : 'ObjectLiteralIdentifierString', 103 : 'OrAssignment', 104 : 'ParenExpressionOpen', 105 : 'ParenExpressionComma', 106 : 'ParenExpressionClose', 107 : 'PostfixIncrement', 108 : 'PostfixDeincrement', 109 : 'PrefixDeincrement', 110 : 'PrefixIncrement', 111 : 'Return', 112 : 'RegExp', 113 : 'RightShift', 114 : 'RightShiftAssignment', 115 : 'String', 116 : 'StrictEqual', 117 : 'StrictNotEqual', 118 : 'SwitchStatement', 119 : 'SwitchStatementParenOpen', 120 : 'SwitchStatementParenClose', 121 : 'SwitchStatementCurlyOpen', 122 : 'SwitchStatementCurlyClose', 123 : 'SwitchColon', 124 : 'This', 125 : 'TernaryQuestionMark', 126 : 'TernaryColon', 127 : 'TryStatement', 128 : 'TryStatementCurlyOpen', 129 : 'TryStatementCurlyClose', 130 : 'True', 131 : 'Throw', 132 : 'TypeOf', 133 : 'UnaryPlus', 134 : 'UnaryMinus', 135 : 'Undefined', 136 : 'Var', 137 : 'VarIdentifier', 138 : 'VarComma', 139 : 'Void', 140 : 'WithStatement', 141 : 'WithStatementParenOpen', 142 : 'WithStatementParenClose', 143 : 'WithStatementCurlyOpen', 144 : 'WithStatementCurlyClose', 145 : 'WhileStatement', 146 : 'WhileStatementParenOpen', 147 : 'WhileStatementParenClose', 148 : 'WhileStatementCurlyOpen', 149 : 'WhileStatementCurlyClose', 150 : 'Xor', 151 : 'XorAssignment', 152 : 'ZeroRightShift', 153 : 'ZeroRightShiftAssignment' }, rules = { 0 : {//ArrayComma 0 : 1, //ArrayComma 1 : 1, //ArrayOpen 2 : 1, //ArrayClose 3 : 1, //AccessorOpen 4 : 1, //AccessorClose 14 : 1, //Break 15 : 1, //Case 17 : 1, //Delete 28 : 1, //Comma 29 : 1, //Continue 36 : 1, //False 41 : 1, //ForStatementParenOpen 45 : 1, //ForSemi 46 : 1, //FunctionCallOpen 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 69 : 1, //IfStatementParenOpen 74 : 1, //Infinity 83 : 1, //NaN 84 : 1, //New 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 99 : 1, //ObjectLiteralColon 104 : 1, //ParenExpressionOpen 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 111 : 1, //Return 112 : 1, //RegExp 115 : 1, //String 119 : 1, //SwitchStatementParenOpen 124 : 1, //This 125 : 1, //TernaryQuestionMark 126 : 1, //TernaryColon 130 : 1, //True 131 : 1, //Throw 132 : 1, //TypeOf 135 : 1, //Undefined 137 : 1, //VarIdentifier 138 : 1, //VarComma 139 : 1, //Void 141 : 1, //WithStatementParenOpen 146 : 1 //WhileStatementParenOpen }, 1 : {//ArrayOpen 0 : 1, //ArrayComma 1 : 1, //ArrayOpen 3 : 1, //AccessorOpen 5 : 1, //Addition 6 : 1, //AdditionAssignment 7 : 1, //AssignmentDivide 8 : 1, //AndAssignment 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 11 : 1, //BitwiseNot 12 : 1, //BitwiseOr 13 : 1, //BitwiseAnd 14 : 1, //Break 15 : 1, //Case 17 : 1, //Delete 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 21 : 1, //DivideOperator 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 28 : 1, //Comma 29 : 1, //Continue 30 : 1, //EqualAssignment 31 : 1, //Equal 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 41 : 1, //ForStatementParenOpen 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 45 : 1, //ForSemi 46 : 1, //FunctionCallOpen 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 64 : 1, //GreaterThan 65 : 1, //GreaterThanEqual 69 : 1, //IfStatementParenOpen 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 73 : 1, //In 75 : 1, //InstanceOf 76 : 1, //LabelColon 77 : 1, //LessThan 78 : 1, //LessThanEqual 79 : 1, //LeftShift 80 : 1, //LeftShiftAssignment 81 : 1, //LogicalOr 82 : 1, //LogicalAnd 84 : 1, //New 87 : 1, //NotEqual 88 : 1, //Not 89 : 1, //Nothing 90 : 1, //Minus 91 : 1, //MinusAssignment 92 : 1, //Modulus 93 : 1, //ModulusAssignment 94 : 1, //Multiply 95 : 1, //MultiplyAssignment 99 : 1, //ObjectLiteralColon 103 : 1, //OrAssignment 104 : 1, //ParenExpressionOpen 109 : 1, //PrefixDeincrement 110 : 1, //PrefixIncrement 111 : 1, //Return 113 : 1, //RightShift 114 : 1, //RightShiftAssignment 116 : 1, //StrictEqual 117 : 1, //StrictNotEqual 119 : 1, //SwitchStatementParenOpen 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 125 : 1, //TernaryQuestionMark 126 : 1, //TernaryColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 131 : 1, //Throw 132 : 1, //TypeOf 133 : 1, //UnaryPlus 134 : 1, //UnaryMinus 138 : 1, //VarComma 139 : 1, //Void 141 : 1, //WithStatementParenOpen 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 146 : 1, //WhileStatementParenOpen 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1, //WhileStatementCurlyClose 150 : 1, //Xor 151 : 1, //XorAssignment 152 : 1, //ZeroRightShift 153 : 1 //ZeroRightShiftAssignment }, 2 : {//ArrayClose 0 : 1, //ArrayComma 1 : 1, //ArrayOpen 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 3 : {//AccessorOpen 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 4 : {//AccessorClose 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 5 : {//Addition 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 6 : {//AdditionAssignment 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 7 : {//AssignmentDivide 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 8 : {//AndAssignment 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 9 : {//BlockStatementCurlyOpen 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 76 : 1, //LabelColon 89 : 1, //Nothing 111 : 1, //Return 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1 //WhileStatementCurlyClose }, 10 : {//BlockStatementCurlyClose 2 : 1, //ArrayClose 4 : 1, //AccessorClose 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 14 : 1, //Break 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 29 : 1, //Continue 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 36 : 1, //False 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 47 : 1, //FunctionCallClose 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 74 : 1, //Infinity 76 : 1, //LabelColon 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 89 : 1, //Nothing 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 111 : 1, //Return 112 : 1, //RegExp 115 : 1, //String 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 124 : 1, //This 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 130 : 1, //True 135 : 1, //Undefined 137 : 1, //VarIdentifier 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1 //WhileStatementCurlyClose }, 11 : {//BitwiseNot 0 : 1, //ArrayComma 1 : 1, //ArrayOpen 3 : 1, //AccessorOpen 5 : 1, //Addition 6 : 1, //AdditionAssignment 7 : 1, //AssignmentDivide 8 : 1, //AndAssignment 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 11 : 1, //BitwiseNot 12 : 1, //BitwiseOr 13 : 1, //BitwiseAnd 14 : 1, //Break 15 : 1, //Case 17 : 1, //Delete 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 21 : 1, //DivideOperator 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 28 : 1, //Comma 29 : 1, //Continue 30 : 1, //EqualAssignment 31 : 1, //Equal 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 41 : 1, //ForStatementParenOpen 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 45 : 1, //ForSemi 46 : 1, //FunctionCallOpen 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 64 : 1, //GreaterThan 65 : 1, //GreaterThanEqual 69 : 1, //IfStatementParenOpen 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 73 : 1, //In 75 : 1, //InstanceOf 76 : 1, //LabelColon 77 : 1, //LessThan 78 : 1, //LessThanEqual 79 : 1, //LeftShift 80 : 1, //LeftShiftAssignment 81 : 1, //LogicalOr 82 : 1, //LogicalAnd 84 : 1, //New 87 : 1, //NotEqual 88 : 1, //Not 89 : 1, //Nothing 90 : 1, //Minus 91 : 1, //MinusAssignment 92 : 1, //Modulus 93 : 1, //ModulusAssignment 94 : 1, //Multiply 95 : 1, //MultiplyAssignment 99 : 1, //ObjectLiteralColon 103 : 1, //OrAssignment 104 : 1, //ParenExpressionOpen 109 : 1, //PrefixDeincrement 110 : 1, //PrefixIncrement 111 : 1, //Return 113 : 1, //RightShift 114 : 1, //RightShiftAssignment 116 : 1, //StrictEqual 117 : 1, //StrictNotEqual 119 : 1, //SwitchStatementParenOpen 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 125 : 1, //TernaryQuestionMark 126 : 1, //TernaryColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 131 : 1, //Throw 132 : 1, //TypeOf 133 : 1, //UnaryPlus 134 : 1, //UnaryMinus 138 : 1, //VarComma 139 : 1, //Void 141 : 1, //WithStatementParenOpen 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 146 : 1, //WhileStatementParenOpen 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1, //WhileStatementCurlyClose 150 : 1, //Xor 151 : 1, //XorAssignment 152 : 1, //ZeroRightShift 153 : 1 //ZeroRightShiftAssignment }, 12 : {//BitwiseOr 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 13 : {//BitwiseAnd 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 14 : {//Break 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 76 : 1, //LabelColon 89 : 1, //Nothing 111 : 1, //Return 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1 //WhileStatementCurlyClose }, 15 : {//Case 35 : 1, //EndStatement 121 : 1, //SwitchStatementCurlyOpen 123 : 1 //SwitchColon }, 16 : {//Default 35 : 1, //EndStatement 121 : 1, //SwitchStatementCurlyOpen 123 : 1 //SwitchColon }, 17 : {//Delete 0 : 1, //ArrayComma 1 : 1, //ArrayOpen 3 : 1, //AccessorOpen 5 : 1, //Addition 6 : 1, //AdditionAssignment 7 : 1, //AssignmentDivide 8 : 1, //AndAssignment 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 12 : 1, //BitwiseOr 13 : 1, //BitwiseAnd 14 : 1, //Break 15 : 1, //Case 17 : 1, //Delete 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 21 : 1, //DivideOperator 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 28 : 1, //Comma 29 : 1, //Continue 30 : 1, //EqualAssignment 31 : 1, //Equal 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 41 : 1, //ForStatementParenOpen 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 45 : 1, //ForSemi 46 : 1, //FunctionCallOpen 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 64 : 1, //GreaterThan 65 : 1, //GreaterThanEqual 69 : 1, //IfStatementParenOpen 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 73 : 1, //In 75 : 1, //InstanceOf 76 : 1, //LabelColon 77 : 1, //LessThan 78 : 1, //LessThanEqual 79 : 1, //LeftShift 80 : 1, //LeftShiftAssignment 81 : 1, //LogicalOr 82 : 1, //LogicalAnd 84 : 1, //New 87 : 1, //NotEqual 89 : 1, //Nothing 90 : 1, //Minus 91 : 1, //MinusAssignment 92 : 1, //Modulus 93 : 1, //ModulusAssignment 94 : 1, //Multiply 95 : 1, //MultiplyAssignment 99 : 1, //ObjectLiteralColon 103 : 1, //OrAssignment 104 : 1, //ParenExpressionOpen 111 : 1, //Return 113 : 1, //RightShift 114 : 1, //RightShiftAssignment 116 : 1, //StrictEqual 117 : 1, //StrictNotEqual 119 : 1, //SwitchStatementParenOpen 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 125 : 1, //TernaryQuestionMark 126 : 1, //TernaryColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 131 : 1, //Throw 132 : 1, //TypeOf 138 : 1, //VarComma 139 : 1, //Void 141 : 1, //WithStatementParenOpen 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 146 : 1, //WhileStatementParenOpen 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1, //WhileStatementCurlyClose 150 : 1, //Xor 151 : 1, //XorAssignment 152 : 1, //ZeroRightShift 153 : 1 //ZeroRightShiftAssignment }, 18 : {//Do 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 76 : 1, //LabelColon 89 : 1, //Nothing 111 : 1, //Return 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1 //WhileStatementCurlyClose }, 19 : {//DoStatementCurlyOpen 18 : 1 //Do }, 20 : {//DoStatementCurlyClose 2 : 1, //ArrayClose 4 : 1, //AccessorClose 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 14 : 1, //Break 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 29 : 1, //Continue 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 36 : 1, //False 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 47 : 1, //FunctionCallClose 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 74 : 1, //Infinity 76 : 1, //LabelColon 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 89 : 1, //Nothing 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 111 : 1, //Return 112 : 1, //RegExp 115 : 1, //String 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 124 : 1, //This 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 130 : 1, //True 135 : 1, //Undefined 137 : 1, //VarIdentifier 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1 //WhileStatementCurlyClose }, 21 : {//DivideOperator 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 22 : {//CatchStatement 129 : 1 //TryStatementCurlyClose }, 23 : {//CatchStatementParenOpen 22 : 1 //CatchStatement }, 24 : {//CatchStatementParenClose 25 : 1 //CatchStatementIdentifier }, 25 : {//CatchStatementIdentifier 23 : 1 //CatchStatementParenOpen }, 26 : {//CatchStatementCurlyOpen 24 : 1 //CatchStatementParenClose }, 27 : {//CatchStatementCurlyClose 2 : 1, //ArrayClose 4 : 1, //AccessorClose 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 14 : 1, //Break 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 29 : 1, //Continue 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 36 : 1, //False 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 47 : 1, //FunctionCallClose 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 74 : 1, //Infinity 76 : 1, //LabelColon 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 89 : 1, //Nothing 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 111 : 1, //Return 112 : 1, //RegExp 115 : 1, //String 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 124 : 1, //This 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 130 : 1, //True 135 : 1, //Undefined 137 : 1, //VarIdentifier 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1 //WhileStatementCurlyClose }, 28 : {//Comma 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 29 : {//Continue 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 76 : 1, //LabelColon 89 : 1, //Nothing 111 : 1, //Return 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1 //WhileStatementCurlyClose }, 30 : {//EqualAssignment 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 31 : {//Equal 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 32 : {//Else 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 76 : 1, //LabelColon 89 : 1, //Nothing 111 : 1, //Return 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1 //WhileStatementCurlyClose }, 33 : {//ElseCurlyOpen 32 : 1 //Else }, 34 : {//ElseCurlyClose 2 : 1, //ArrayClose 4 : 1, //AccessorClose 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 14 : 1, //Break 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 29 : 1, //Continue 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 36 : 1, //False 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 47 : 1, //FunctionCallClose 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 74 : 1, //Infinity 76 : 1, //LabelColon 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 89 : 1, //Nothing 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 111 : 1, //Return 112 : 1, //RegExp 115 : 1, //String 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 124 : 1, //This 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 130 : 1, //True 135 : 1, //Undefined 137 : 1, //VarIdentifier 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1 //WhileStatementCurlyClose }, 35 : {//EndStatement 2 : 1, //ArrayClose 4 : 1, //AccessorClose 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 14 : 1, //Break 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 29 : 1, //Continue 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 36 : 1, //False 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 47 : 1, //FunctionCallClose 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 74 : 1, //Infinity 76 : 1, //LabelColon 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 89 : 1, //Nothing 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 111 : 1, //Return 112 : 1, //RegExp 115 : 1, //String 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 124 : 1, //This 128 : 1, //TryStatementCurlyOpen 130 : 1, //True 135 : 1, //Undefined 137 : 1, //VarIdentifier 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1 //WhileStatementCurlyClose }, 36 : {//False 0 : 1, //ArrayComma 1 : 1, //ArrayOpen 3 : 1, //AccessorOpen 5 : 1, //Addition 6 : 1, //AdditionAssignment 7 : 1, //AssignmentDivide 8 : 1, //AndAssignment 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 11 : 1, //BitwiseNot 12 : 1, //BitwiseOr 13 : 1, //BitwiseAnd 14 : 1, //Break 15 : 1, //Case 17 : 1, //Delete 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 21 : 1, //DivideOperator 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 28 : 1, //Comma 29 : 1, //Continue 30 : 1, //EqualAssignment 31 : 1, //Equal 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 41 : 1, //ForStatementParenOpen 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 45 : 1, //ForSemi 46 : 1, //FunctionCallOpen 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 64 : 1, //GreaterThan 65 : 1, //GreaterThanEqual 69 : 1, //IfStatementParenOpen 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 73 : 1, //In 75 : 1, //InstanceOf 76 : 1, //LabelColon 77 : 1, //LessThan 78 : 1, //LessThanEqual 79 : 1, //LeftShift 80 : 1, //LeftShiftAssignment 81 : 1, //LogicalOr 82 : 1, //LogicalAnd 84 : 1, //New 87 : 1, //NotEqual 88 : 1, //Not 89 : 1, //Nothing 90 : 1, //Minus 91 : 1, //MinusAssignment 92 : 1, //Modulus 93 : 1, //ModulusAssignment 94 : 1, //Multiply 95 : 1, //MultiplyAssignment 99 : 1, //ObjectLiteralColon 103 : 1, //OrAssignment 104 : 1, //ParenExpressionOpen 109 : 1, //PrefixDeincrement 110 : 1, //PrefixIncrement 111 : 1, //Return 113 : 1, //RightShift 114 : 1, //RightShiftAssignment 116 : 1, //StrictEqual 117 : 1, //StrictNotEqual 119 : 1, //SwitchStatementParenOpen 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 125 : 1, //TernaryQuestionMark 126 : 1, //TernaryColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 131 : 1, //Throw 132 : 1, //TypeOf 133 : 1, //UnaryPlus 134 : 1, //UnaryMinus 138 : 1, //VarComma 139 : 1, //Void 141 : 1, //WithStatementParenOpen 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 146 : 1, //WhileStatementParenOpen 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1, //WhileStatementCurlyClose 150 : 1, //Xor 151 : 1, //XorAssignment 152 : 1, //ZeroRightShift 153 : 1 //ZeroRightShiftAssignment }, 37 : {//FinallyStatement 27 : 1, //CatchStatementCurlyClose 129 : 1 //TryStatementCurlyClose }, 38 : {//FinallyStatementCurlyOpen 37 : 1 //FinallyStatement }, 39 : {//FinallyStatementCurlyClose 2 : 1, //ArrayClose 4 : 1, //AccessorClose 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 14 : 1, //Break 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 29 : 1, //Continue 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 36 : 1, //False 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 47 : 1, //FunctionCallClose 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 74 : 1, //Infinity 76 : 1, //LabelColon 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 89 : 1, //Nothing 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 111 : 1, //Return 112 : 1, //RegExp 115 : 1, //String 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 124 : 1, //This 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 130 : 1, //True 135 : 1, //Undefined 137 : 1, //VarIdentifier 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1 //WhileStatementCurlyClose }, 40 : {//ForStatement 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 76 : 1, //LabelColon 89 : 1, //Nothing 111 : 1, //Return 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1 //WhileStatementCurlyClose }, 41 : {//ForStatementParenOpen 40 : 1 //ForStatement }, 42 : {//ForStatementParenClose 2 : 1, //ArrayClose 4 : 1, //AccessorClose 14 : 1, //Break 29 : 1, //Continue 36 : 1, //False 45 : 1, //ForSemi 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 43 : {//ForStatementCurlyOpen 42 : 1 //ForStatementParenClose }, 44 : {//ForStatementCurlyClose 2 : 1, //ArrayClose 4 : 1, //AccessorClose 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 14 : 1, //Break 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 29 : 1, //Continue 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 36 : 1, //False 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 47 : 1, //FunctionCallClose 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 74 : 1, //Infinity 76 : 1, //LabelColon 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 89 : 1, //Nothing 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 111 : 1, //Return 112 : 1, //RegExp 115 : 1, //String 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 124 : 1, //This 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 130 : 1, //True 135 : 1, //Undefined 137 : 1, //VarIdentifier 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1 //WhileStatementCurlyClose }, 45 : {//ForSemi 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 41 : 1, //ForStatementParenOpen 45 : 1, //ForSemi 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 46 : {//FunctionCallOpen 4 : 1, //AccessorClose 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 106 : 1, //ParenExpressionClose 124 : 1 //This }, 47 : {//FunctionCallClose 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 46 : 1, //FunctionCallOpen 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 48 : {//FunctionArgumentIdentifier 49 : 1, //FunctionArgumentComma 51 : 1 //FunctionParenOpen }, 49 : {//FunctionArgumentComma 48 : 1 //FunctionArgumentIdentifier }, 50 : {//FunctionIdentifier 60 : 1 //FunctionStatement }, 51 : {//FunctionParenOpen 50 : 1 //FunctionIdentifier }, 52 : {//FunctionExpression 0 : 1, //ArrayComma 1 : 1, //ArrayOpen 3 : 1, //AccessorOpen 5 : 1, //Addition 6 : 1, //AdditionAssignment 7 : 1, //AssignmentDivide 8 : 1, //AndAssignment 11 : 1, //BitwiseNot 12 : 1, //BitwiseOr 13 : 1, //BitwiseAnd 14 : 1, //Break 15 : 1, //Case 17 : 1, //Delete 21 : 1, //DivideOperator 28 : 1, //Comma 29 : 1, //Continue 30 : 1, //EqualAssignment 31 : 1, //Equal 41 : 1, //ForStatementParenOpen 45 : 1, //ForSemi 46 : 1, //FunctionCallOpen 64 : 1, //GreaterThan 65 : 1, //GreaterThanEqual 69 : 1, //IfStatementParenOpen 73 : 1, //In 75 : 1, //InstanceOf 77 : 1, //LessThan 78 : 1, //LessThanEqual 79 : 1, //LeftShift 80 : 1, //LeftShiftAssignment 81 : 1, //LogicalOr 82 : 1, //LogicalAnd 84 : 1, //New 87 : 1, //NotEqual 88 : 1, //Not 90 : 1, //Minus 91 : 1, //MinusAssignment 92 : 1, //Modulus 93 : 1, //ModulusAssignment 94 : 1, //Multiply 95 : 1, //MultiplyAssignment 99 : 1, //ObjectLiteralColon 103 : 1, //OrAssignment 104 : 1, //ParenExpressionOpen 109 : 1, //PrefixDeincrement 110 : 1, //PrefixIncrement 111 : 1, //Return 113 : 1, //RightShift 114 : 1, //RightShiftAssignment 116 : 1, //StrictEqual 117 : 1, //StrictNotEqual 119 : 1, //SwitchStatementParenOpen 125 : 1, //TernaryQuestionMark 126 : 1, //TernaryColon 131 : 1, //Throw 132 : 1, //TypeOf 133 : 1, //UnaryPlus 134 : 1, //UnaryMinus 138 : 1, //VarComma 139 : 1, //Void 141 : 1, //WithStatementParenOpen 146 : 1, //WhileStatementParenOpen 150 : 1, //Xor 151 : 1, //XorAssignment 152 : 1, //ZeroRightShift 153 : 1 //ZeroRightShiftAssignment }, 53 : {//FunctionExpressionIdentifier 52 : 1 //FunctionExpression }, 54 : {//FunctionExpressionParenOpen 52 : 1, //FunctionExpression 53 : 1 //FunctionExpressionIdentifier }, 55 : {//FunctionExpressionArgumentIdentifier 54 : 1, //FunctionExpressionParenOpen 56 : 1 //FunctionExpressionArgumentComma }, 56 : {//FunctionExpressionArgumentComma 55 : 1 //FunctionExpressionArgumentIdentifier }, 57 : {//FunctionParenClose 48 : 1, //FunctionArgumentIdentifier 51 : 1 //FunctionParenOpen }, 58 : {//FunctionExpressionParenClose 54 : 1, //FunctionExpressionParenOpen 55 : 1 //FunctionExpressionArgumentIdentifier }, 59 : {//FunctionExpressionCurlyOpen 58 : 1 //FunctionExpressionParenClose }, 60 : {//FunctionStatement 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 76 : 1, //LabelColon 89 : 1, //Nothing 111 : 1, //Return 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1 //WhileStatementCurlyClose }, 61 : {//FunctionStatementCurlyOpen 57 : 1 //FunctionParenClose }, 62 : {//FunctionStatementCurlyClose 2 : 1, //ArrayClose 4 : 1, //AccessorClose 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 14 : 1, //Break 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 29 : 1, //Continue 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 36 : 1, //False 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 47 : 1, //FunctionCallClose 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 74 : 1, //Infinity 76 : 1, //LabelColon 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 89 : 1, //Nothing 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 111 : 1, //Return 112 : 1, //RegExp 115 : 1, //String 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 124 : 1, //This 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 130 : 1, //True 135 : 1, //Undefined 137 : 1, //VarIdentifier 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1 //WhileStatementCurlyClose }, 63 : {//FunctionExpressionCurlyClose 2 : 1, //ArrayClose 4 : 1, //AccessorClose 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 14 : 1, //Break 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 29 : 1, //Continue 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 36 : 1, //False 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 47 : 1, //FunctionCallClose 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 74 : 1, //Infinity 76 : 1, //LabelColon 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 89 : 1, //Nothing 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 111 : 1, //Return 112 : 1, //RegExp 115 : 1, //String 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 124 : 1, //This 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 130 : 1, //True 135 : 1, //Undefined 137 : 1, //VarIdentifier 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1 //WhileStatementCurlyClose }, 64 : {//GreaterThan 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 65 : {//GreaterThanEqual 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 66 : {//IdentifierDot 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 67 : {//Identifier 0 : 1, //ArrayComma 1 : 1, //ArrayOpen 3 : 1, //AccessorOpen 5 : 1, //Addition 6 : 1, //AdditionAssignment 7 : 1, //AssignmentDivide 8 : 1, //AndAssignment 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 11 : 1, //BitwiseNot 12 : 1, //BitwiseOr 13 : 1, //BitwiseAnd 14 : 1, //Break 15 : 1, //Case 17 : 1, //Delete 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 21 : 1, //DivideOperator 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 28 : 1, //Comma 29 : 1, //Continue 30 : 1, //EqualAssignment 31 : 1, //Equal 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 41 : 1, //ForStatementParenOpen 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 45 : 1, //ForSemi 46 : 1, //FunctionCallOpen 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 64 : 1, //GreaterThan 65 : 1, //GreaterThanEqual 66 : 1, //IdentifierDot 69 : 1, //IfStatementParenOpen 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 73 : 1, //In 75 : 1, //InstanceOf 76 : 1, //LabelColon 77 : 1, //LessThan 78 : 1, //LessThanEqual 79 : 1, //LeftShift 80 : 1, //LeftShiftAssignment 81 : 1, //LogicalOr 82 : 1, //LogicalAnd 84 : 1, //New 87 : 1, //NotEqual 88 : 1, //Not 89 : 1, //Nothing 90 : 1, //Minus 91 : 1, //MinusAssignment 92 : 1, //Modulus 93 : 1, //ModulusAssignment 94 : 1, //Multiply 95 : 1, //MultiplyAssignment 99 : 1, //ObjectLiteralColon 103 : 1, //OrAssignment 104 : 1, //ParenExpressionOpen 109 : 1, //PrefixDeincrement 110 : 1, //PrefixIncrement 111 : 1, //Return 113 : 1, //RightShift 114 : 1, //RightShiftAssignment 116 : 1, //StrictEqual 117 : 1, //StrictNotEqual 119 : 1, //SwitchStatementParenOpen 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 125 : 1, //TernaryQuestionMark 126 : 1, //TernaryColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 131 : 1, //Throw 132 : 1, //TypeOf 133 : 1, //UnaryPlus 134 : 1, //UnaryMinus 138 : 1, //VarComma 139 : 1, //Void 141 : 1, //WithStatementParenOpen 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 146 : 1, //WhileStatementParenOpen 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1, //WhileStatementCurlyClose 150 : 1, //Xor 151 : 1, //XorAssignment 152 : 1, //ZeroRightShift 153 : 1 //ZeroRightShiftAssignment }, 68 : {//IfStatement 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 76 : 1, //LabelColon 89 : 1, //Nothing 111 : 1, //Return 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1 //WhileStatementCurlyClose }, 69 : {//IfStatementParenOpen 68 : 1 //IfStatement }, 70 : {//IfStatementParenClose 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 71 : {//IfStatementCurlyOpen 70 : 1 //IfStatementParenClose }, 72 : {//IfStatementCurlyClose 2 : 1, //ArrayClose 4 : 1, //AccessorClose 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 14 : 1, //Break 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 29 : 1, //Continue 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 36 : 1, //False 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 47 : 1, //FunctionCallClose 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 74 : 1, //Infinity 76 : 1, //LabelColon 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 89 : 1, //Nothing 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 111 : 1, //Return 112 : 1, //RegExp 115 : 1, //String 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 124 : 1, //This 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 130 : 1, //True 135 : 1, //Undefined 137 : 1, //VarIdentifier 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1 //WhileStatementCurlyClose }, 73 : {//In 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 74 : {//Infinity 0 : 1, //ArrayComma 1 : 1, //ArrayOpen 3 : 1, //AccessorOpen 5 : 1, //Addition 6 : 1, //AdditionAssignment 7 : 1, //AssignmentDivide 8 : 1, //AndAssignment 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 11 : 1, //BitwiseNot 12 : 1, //BitwiseOr 13 : 1, //BitwiseAnd 14 : 1, //Break 15 : 1, //Case 17 : 1, //Delete 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 21 : 1, //DivideOperator 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 28 : 1, //Comma 29 : 1, //Continue 30 : 1, //EqualAssignment 31 : 1, //Equal 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 41 : 1, //ForStatementParenOpen 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 45 : 1, //ForSemi 46 : 1, //FunctionCallOpen 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 64 : 1, //GreaterThan 65 : 1, //GreaterThanEqual 69 : 1, //IfStatementParenOpen 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 73 : 1, //In 75 : 1, //InstanceOf 76 : 1, //LabelColon 77 : 1, //LessThan 78 : 1, //LessThanEqual 79 : 1, //LeftShift 80 : 1, //LeftShiftAssignment 81 : 1, //LogicalOr 82 : 1, //LogicalAnd 84 : 1, //New 87 : 1, //NotEqual 88 : 1, //Not 89 : 1, //Nothing 90 : 1, //Minus 91 : 1, //MinusAssignment 92 : 1, //Modulus 93 : 1, //ModulusAssignment 94 : 1, //Multiply 95 : 1, //MultiplyAssignment 99 : 1, //ObjectLiteralColon 103 : 1, //OrAssignment 104 : 1, //ParenExpressionOpen 109 : 1, //PrefixDeincrement 110 : 1, //PrefixIncrement 111 : 1, //Return 113 : 1, //RightShift 114 : 1, //RightShiftAssignment 116 : 1, //StrictEqual 117 : 1, //StrictNotEqual 119 : 1, //SwitchStatementParenOpen 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 125 : 1, //TernaryQuestionMark 126 : 1, //TernaryColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 131 : 1, //Throw 132 : 1, //TypeOf 133 : 1, //UnaryPlus 134 : 1, //UnaryMinus 138 : 1, //VarComma 139 : 1, //Void 141 : 1, //WithStatementParenOpen 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 146 : 1, //WhileStatementParenOpen 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1, //WhileStatementCurlyClose 150 : 1, //Xor 151 : 1, //XorAssignment 152 : 1, //ZeroRightShift 153 : 1 //ZeroRightShiftAssignment }, 75 : {//InstanceOf 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 76 : {//LabelColon 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 77 : {//LessThan 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 78 : {//LessThanEqual 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 79 : {//LeftShift 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 80 : {//LeftShiftAssignment 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 81 : {//LogicalOr 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 82 : {//LogicalAnd 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 83 : {//NaN 0 : 1, //ArrayComma 1 : 1, //ArrayOpen 3 : 1, //AccessorOpen 5 : 1, //Addition 6 : 1, //AdditionAssignment 7 : 1, //AssignmentDivide 8 : 1, //AndAssignment 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 11 : 1, //BitwiseNot 12 : 1, //BitwiseOr 13 : 1, //BitwiseAnd 14 : 1, //Break 15 : 1, //Case 17 : 1, //Delete 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 21 : 1, //DivideOperator 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 28 : 1, //Comma 29 : 1, //Continue 30 : 1, //EqualAssignment 31 : 1, //Equal 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 41 : 1, //ForStatementParenOpen 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 45 : 1, //ForSemi 46 : 1, //FunctionCallOpen 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 64 : 1, //GreaterThan 65 : 1, //GreaterThanEqual 69 : 1, //IfStatementParenOpen 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 73 : 1, //In 75 : 1, //InstanceOf 76 : 1, //LabelColon 77 : 1, //LessThan 78 : 1, //LessThanEqual 79 : 1, //LeftShift 80 : 1, //LeftShiftAssignment 81 : 1, //LogicalOr 82 : 1, //LogicalAnd 84 : 1, //New 87 : 1, //NotEqual 88 : 1, //Not 89 : 1, //Nothing 90 : 1, //Minus 91 : 1, //MinusAssignment 92 : 1, //Modulus 93 : 1, //ModulusAssignment 94 : 1, //Multiply 95 : 1, //MultiplyAssignment 99 : 1, //ObjectLiteralColon 103 : 1, //OrAssignment 104 : 1, //ParenExpressionOpen 109 : 1, //PrefixDeincrement 110 : 1, //PrefixIncrement 111 : 1, //Return 113 : 1, //RightShift 114 : 1, //RightShiftAssignment 116 : 1, //StrictEqual 117 : 1, //StrictNotEqual 119 : 1, //SwitchStatementParenOpen 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 125 : 1, //TernaryQuestionMark 126 : 1, //TernaryColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 131 : 1, //Throw 132 : 1, //TypeOf 133 : 1, //UnaryPlus 134 : 1, //UnaryMinus 138 : 1, //VarComma 139 : 1, //Void 141 : 1, //WithStatementParenOpen 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 146 : 1, //WhileStatementParenOpen 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1, //WhileStatementCurlyClose 150 : 1, //Xor 151 : 1, //XorAssignment 152 : 1, //ZeroRightShift 153 : 1 //ZeroRightShiftAssignment }, 84 : {//New 0 : 1, //ArrayComma 1 : 1, //ArrayOpen 3 : 1, //AccessorOpen 5 : 1, //Addition 6 : 1, //AdditionAssignment 7 : 1, //AssignmentDivide 8 : 1, //AndAssignment 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 11 : 1, //BitwiseNot 12 : 1, //BitwiseOr 13 : 1, //BitwiseAnd 14 : 1, //Break 15 : 1, //Case 17 : 1, //Delete 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 21 : 1, //DivideOperator 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 28 : 1, //Comma 29 : 1, //Continue 30 : 1, //EqualAssignment 31 : 1, //Equal 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 41 : 1, //ForStatementParenOpen 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 45 : 1, //ForSemi 46 : 1, //FunctionCallOpen 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 64 : 1, //GreaterThan 65 : 1, //GreaterThanEqual 69 : 1, //IfStatementParenOpen 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 73 : 1, //In 75 : 1, //InstanceOf 76 : 1, //LabelColon 77 : 1, //LessThan 78 : 1, //LessThanEqual 79 : 1, //LeftShift 80 : 1, //LeftShiftAssignment 81 : 1, //LogicalOr 82 : 1, //LogicalAnd 84 : 1, //New 87 : 1, //NotEqual 88 : 1, //Not 89 : 1, //Nothing 90 : 1, //Minus 91 : 1, //MinusAssignment 92 : 1, //Modulus 93 : 1, //ModulusAssignment 94 : 1, //Multiply 95 : 1, //MultiplyAssignment 99 : 1, //ObjectLiteralColon 103 : 1, //OrAssignment 104 : 1, //ParenExpressionOpen 109 : 1, //PrefixDeincrement 110 : 1, //PrefixIncrement 111 : 1, //Return 113 : 1, //RightShift 114 : 1, //RightShiftAssignment 116 : 1, //StrictEqual 117 : 1, //StrictNotEqual 119 : 1, //SwitchStatementParenOpen 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 125 : 1, //TernaryQuestionMark 126 : 1, //TernaryColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 131 : 1, //Throw 132 : 1, //TypeOf 133 : 1, //UnaryPlus 134 : 1, //UnaryMinus 138 : 1, //VarComma 139 : 1, //Void 141 : 1, //WithStatementParenOpen 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 146 : 1, //WhileStatementParenOpen 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1, //WhileStatementCurlyClose 150 : 1, //Xor 151 : 1, //XorAssignment 152 : 1, //ZeroRightShift 153 : 1 //ZeroRightShiftAssignment }, 85 : {//Number 0 : 1, //ArrayComma 1 : 1, //ArrayOpen 3 : 1, //AccessorOpen 5 : 1, //Addition 6 : 1, //AdditionAssignment 7 : 1, //AssignmentDivide 8 : 1, //AndAssignment 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 11 : 1, //BitwiseNot 12 : 1, //BitwiseOr 13 : 1, //BitwiseAnd 14 : 1, //Break 15 : 1, //Case 17 : 1, //Delete 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 21 : 1, //DivideOperator 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 28 : 1, //Comma 29 : 1, //Continue 30 : 1, //EqualAssignment 31 : 1, //Equal 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 41 : 1, //ForStatementParenOpen 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 45 : 1, //ForSemi 46 : 1, //FunctionCallOpen 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 64 : 1, //GreaterThan 65 : 1, //GreaterThanEqual 69 : 1, //IfStatementParenOpen 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 73 : 1, //In 75 : 1, //InstanceOf 76 : 1, //LabelColon 77 : 1, //LessThan 78 : 1, //LessThanEqual 79 : 1, //LeftShift 80 : 1, //LeftShiftAssignment 81 : 1, //LogicalOr 82 : 1, //LogicalAnd 84 : 1, //New 87 : 1, //NotEqual 88 : 1, //Not 89 : 1, //Nothing 90 : 1, //Minus 91 : 1, //MinusAssignment 92 : 1, //Modulus 93 : 1, //ModulusAssignment 94 : 1, //Multiply 95 : 1, //MultiplyAssignment 99 : 1, //ObjectLiteralColon 103 : 1, //OrAssignment 104 : 1, //ParenExpressionOpen 109 : 1, //PrefixDeincrement 110 : 1, //PrefixIncrement 111 : 1, //Return 113 : 1, //RightShift 114 : 1, //RightShiftAssignment 116 : 1, //StrictEqual 117 : 1, //StrictNotEqual 119 : 1, //SwitchStatementParenOpen 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 125 : 1, //TernaryQuestionMark 126 : 1, //TernaryColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 131 : 1, //Throw 132 : 1, //TypeOf 133 : 1, //UnaryPlus 134 : 1, //UnaryMinus 138 : 1, //VarComma 139 : 1, //Void 141 : 1, //WithStatementParenOpen 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 146 : 1, //WhileStatementParenOpen 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1, //WhileStatementCurlyClose 150 : 1, //Xor 151 : 1, //XorAssignment 152 : 1, //ZeroRightShift 153 : 1 //ZeroRightShiftAssignment }, 86 : {//Null 0 : 1, //ArrayComma 1 : 1, //ArrayOpen 3 : 1, //AccessorOpen 5 : 1, //Addition 6 : 1, //AdditionAssignment 7 : 1, //AssignmentDivide 8 : 1, //AndAssignment 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 11 : 1, //BitwiseNot 12 : 1, //BitwiseOr 13 : 1, //BitwiseAnd 14 : 1, //Break 15 : 1, //Case 17 : 1, //Delete 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 21 : 1, //DivideOperator 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 28 : 1, //Comma 29 : 1, //Continue 30 : 1, //EqualAssignment 31 : 1, //Equal 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 41 : 1, //ForStatementParenOpen 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 45 : 1, //ForSemi 46 : 1, //FunctionCallOpen 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 64 : 1, //GreaterThan 65 : 1, //GreaterThanEqual 69 : 1, //IfStatementParenOpen 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 73 : 1, //In 75 : 1, //InstanceOf 76 : 1, //LabelColon 77 : 1, //LessThan 78 : 1, //LessThanEqual 79 : 1, //LeftShift 80 : 1, //LeftShiftAssignment 81 : 1, //LogicalOr 82 : 1, //LogicalAnd 84 : 1, //New 87 : 1, //NotEqual 88 : 1, //Not 89 : 1, //Nothing 90 : 1, //Minus 91 : 1, //MinusAssignment 92 : 1, //Modulus 93 : 1, //ModulusAssignment 94 : 1, //Multiply 95 : 1, //MultiplyAssignment 99 : 1, //ObjectLiteralColon 103 : 1, //OrAssignment 104 : 1, //ParenExpressionOpen 109 : 1, //PrefixDeincrement 110 : 1, //PrefixIncrement 111 : 1, //Return 113 : 1, //RightShift 114 : 1, //RightShiftAssignment 116 : 1, //StrictEqual 117 : 1, //StrictNotEqual 119 : 1, //SwitchStatementParenOpen 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 125 : 1, //TernaryQuestionMark 126 : 1, //TernaryColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 131 : 1, //Throw 132 : 1, //TypeOf 133 : 1, //UnaryPlus 134 : 1, //UnaryMinus 138 : 1, //VarComma 139 : 1, //Void 141 : 1, //WithStatementParenOpen 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 146 : 1, //WhileStatementParenOpen 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1, //WhileStatementCurlyClose 150 : 1, //Xor 151 : 1, //XorAssignment 152 : 1, //ZeroRightShift 153 : 1 //ZeroRightShiftAssignment }, 87 : {//NotEqual 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 88 : {//Not 0 : 1, //ArrayComma 1 : 1, //ArrayOpen 3 : 1, //AccessorOpen 5 : 1, //Addition 6 : 1, //AdditionAssignment 7 : 1, //AssignmentDivide 8 : 1, //AndAssignment 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 11 : 1, //BitwiseNot 12 : 1, //BitwiseOr 13 : 1, //BitwiseAnd 14 : 1, //Break 15 : 1, //Case 17 : 1, //Delete 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 21 : 1, //DivideOperator 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 28 : 1, //Comma 29 : 1, //Continue 30 : 1, //EqualAssignment 31 : 1, //Equal 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 41 : 1, //ForStatementParenOpen 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 45 : 1, //ForSemi 46 : 1, //FunctionCallOpen 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 64 : 1, //GreaterThan 65 : 1, //GreaterThanEqual 69 : 1, //IfStatementParenOpen 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 73 : 1, //In 75 : 1, //InstanceOf 76 : 1, //LabelColon 77 : 1, //LessThan 78 : 1, //LessThanEqual 79 : 1, //LeftShift 80 : 1, //LeftShiftAssignment 81 : 1, //LogicalOr 82 : 1, //LogicalAnd 84 : 1, //New 87 : 1, //NotEqual 88 : 1, //Not 89 : 1, //Nothing 90 : 1, //Minus 91 : 1, //MinusAssignment 92 : 1, //Modulus 93 : 1, //ModulusAssignment 94 : 1, //Multiply 95 : 1, //MultiplyAssignment 99 : 1, //ObjectLiteralColon 103 : 1, //OrAssignment 104 : 1, //ParenExpressionOpen 109 : 1, //PrefixDeincrement 110 : 1, //PrefixIncrement 111 : 1, //Return 113 : 1, //RightShift 114 : 1, //RightShiftAssignment 116 : 1, //StrictEqual 117 : 1, //StrictNotEqual 119 : 1, //SwitchStatementParenOpen 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 125 : 1, //TernaryQuestionMark 126 : 1, //TernaryColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 131 : 1, //Throw 132 : 1, //TypeOf 133 : 1, //UnaryPlus 134 : 1, //UnaryMinus 138 : 1, //VarComma 139 : 1, //Void 141 : 1, //WithStatementParenOpen 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 146 : 1, //WhileStatementParenOpen 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1, //WhileStatementCurlyClose 150 : 1, //Xor 151 : 1, //XorAssignment 152 : 1, //ZeroRightShift 153 : 1 //ZeroRightShiftAssignment }, 89 : {//Nothing }, 90 : {//Minus 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 91 : {//MinusAssignment 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 92 : {//Modulus 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 93 : {//ModulusAssignment 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 94 : {//Multiply 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 95 : {//MultiplyAssignment 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 96 : {//ObjectLiteralCurlyOpen 0 : 1, //ArrayComma 1 : 1, //ArrayOpen 3 : 1, //AccessorOpen 5 : 1, //Addition 6 : 1, //AdditionAssignment 7 : 1, //AssignmentDivide 8 : 1, //AndAssignment 11 : 1, //BitwiseNot 12 : 1, //BitwiseOr 13 : 1, //BitwiseAnd 14 : 1, //Break 15 : 1, //Case 17 : 1, //Delete 21 : 1, //DivideOperator 28 : 1, //Comma 29 : 1, //Continue 30 : 1, //EqualAssignment 31 : 1, //Equal 41 : 1, //ForStatementParenOpen 45 : 1, //ForSemi 46 : 1, //FunctionCallOpen 64 : 1, //GreaterThan 65 : 1, //GreaterThanEqual 69 : 1, //IfStatementParenOpen 73 : 1, //In 75 : 1, //InstanceOf 77 : 1, //LessThan 78 : 1, //LessThanEqual 79 : 1, //LeftShift 80 : 1, //LeftShiftAssignment 81 : 1, //LogicalOr 82 : 1, //LogicalAnd 84 : 1, //New 87 : 1, //NotEqual 88 : 1, //Not 90 : 1, //Minus 91 : 1, //MinusAssignment 92 : 1, //Modulus 93 : 1, //ModulusAssignment 94 : 1, //Multiply 95 : 1, //MultiplyAssignment 99 : 1, //ObjectLiteralColon 103 : 1, //OrAssignment 104 : 1, //ParenExpressionOpen 109 : 1, //PrefixDeincrement 110 : 1, //PrefixIncrement 111 : 1, //Return 113 : 1, //RightShift 114 : 1, //RightShiftAssignment 116 : 1, //StrictEqual 117 : 1, //StrictNotEqual 119 : 1, //SwitchStatementParenOpen 125 : 1, //TernaryQuestionMark 126 : 1, //TernaryColon 131 : 1, //Throw 132 : 1, //TypeOf 133 : 1, //UnaryPlus 134 : 1, //UnaryMinus 138 : 1, //VarComma 139 : 1, //Void 141 : 1, //WithStatementParenOpen 146 : 1, //WhileStatementParenOpen 150 : 1, //Xor 151 : 1, //XorAssignment 152 : 1, //ZeroRightShift 153 : 1 //ZeroRightShiftAssignment }, 97 : {//ObjectLiteralCurlyClose 2 : 1, //ArrayClose 4 : 1, //AccessorClose 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 36 : 1, //False 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 47 : 1, //FunctionCallClose 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 74 : 1, //Infinity 76 : 1, //LabelColon 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 89 : 1, //Nothing 96 : 1, //ObjectLiteralCurlyOpen 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 111 : 1, //Return 112 : 1, //RegExp 115 : 1, //String 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 124 : 1, //This 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 130 : 1, //True 135 : 1, //Undefined 137 : 1, //VarIdentifier 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1 //WhileStatementCurlyClose }, 98 : {//ObjectLiteralIdentifier 96 : 1, //ObjectLiteralCurlyOpen 100 : 1 //ObjectLiteralComma }, 99 : {//ObjectLiteralColon 98 : 1, //ObjectLiteralIdentifier 101 : 1, //ObjectLiteralIdentifierNumber 102 : 1 //ObjectLiteralIdentifierString }, 100 : {//ObjectLiteralComma 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 101 : {//ObjectLiteralIdentifierNumber 96 : 1, //ObjectLiteralCurlyOpen 100 : 1 //ObjectLiteralComma }, 102 : {//ObjectLiteralIdentifierString 96 : 1, //ObjectLiteralCurlyOpen 100 : 1 //ObjectLiteralComma }, 103 : {//OrAssignment 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 104 : {//ParenExpressionOpen 0 : 1, //ArrayComma 1 : 1, //ArrayOpen 3 : 1, //AccessorOpen 5 : 1, //Addition 6 : 1, //AdditionAssignment 7 : 1, //AssignmentDivide 8 : 1, //AndAssignment 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 11 : 1, //BitwiseNot 12 : 1, //BitwiseOr 13 : 1, //BitwiseAnd 14 : 1, //Break 15 : 1, //Case 17 : 1, //Delete 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 21 : 1, //DivideOperator 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 28 : 1, //Comma 29 : 1, //Continue 30 : 1, //EqualAssignment 31 : 1, //Equal 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 41 : 1, //ForStatementParenOpen 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 45 : 1, //ForSemi 46 : 1, //FunctionCallOpen 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 64 : 1, //GreaterThan 65 : 1, //GreaterThanEqual 69 : 1, //IfStatementParenOpen 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 73 : 1, //In 75 : 1, //InstanceOf 76 : 1, //LabelColon 77 : 1, //LessThan 78 : 1, //LessThanEqual 79 : 1, //LeftShift 80 : 1, //LeftShiftAssignment 81 : 1, //LogicalOr 82 : 1, //LogicalAnd 84 : 1, //New 87 : 1, //NotEqual 88 : 1, //Not 89 : 1, //Nothing 90 : 1, //Minus 91 : 1, //MinusAssignment 92 : 1, //Modulus 93 : 1, //ModulusAssignment 94 : 1, //Multiply 95 : 1, //MultiplyAssignment 99 : 1, //ObjectLiteralColon 103 : 1, //OrAssignment 104 : 1, //ParenExpressionOpen 109 : 1, //PrefixDeincrement 110 : 1, //PrefixIncrement 111 : 1, //Return 113 : 1, //RightShift 114 : 1, //RightShiftAssignment 116 : 1, //StrictEqual 117 : 1, //StrictNotEqual 119 : 1, //SwitchStatementParenOpen 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 125 : 1, //TernaryQuestionMark 126 : 1, //TernaryColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 131 : 1, //Throw 132 : 1, //TypeOf 133 : 1, //UnaryPlus 134 : 1, //UnaryMinus 138 : 1, //VarComma 139 : 1, //Void 141 : 1, //WithStatementParenOpen 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 146 : 1, //WhileStatementParenOpen 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1, //WhileStatementCurlyClose 150 : 1, //Xor 151 : 1, //XorAssignment 152 : 1, //ZeroRightShift 153 : 1 //ZeroRightShiftAssignment }, 105 : {//ParenExpressionComma 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 106 : {//ParenExpressionClose 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 107 : {//PostfixIncrement 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 108 : {//PostfixDeincrement 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 109 : {//PrefixDeincrement 0 : 1, //ArrayComma 1 : 1, //ArrayOpen 3 : 1, //AccessorOpen 5 : 1, //Addition 6 : 1, //AdditionAssignment 7 : 1, //AssignmentDivide 8 : 1, //AndAssignment 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 11 : 1, //BitwiseNot 12 : 1, //BitwiseOr 13 : 1, //BitwiseAnd 14 : 1, //Break 15 : 1, //Case 17 : 1, //Delete 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 21 : 1, //DivideOperator 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 28 : 1, //Comma 29 : 1, //Continue 30 : 1, //EqualAssignment 31 : 1, //Equal 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 41 : 1, //ForStatementParenOpen 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 45 : 1, //ForSemi 46 : 1, //FunctionCallOpen 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 64 : 1, //GreaterThan 65 : 1, //GreaterThanEqual 69 : 1, //IfStatementParenOpen 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 73 : 1, //In 75 : 1, //InstanceOf 76 : 1, //LabelColon 77 : 1, //LessThan 78 : 1, //LessThanEqual 79 : 1, //LeftShift 80 : 1, //LeftShiftAssignment 81 : 1, //LogicalOr 82 : 1, //LogicalAnd 84 : 1, //New 87 : 1, //NotEqual 88 : 1, //Not 89 : 1, //Nothing 90 : 1, //Minus 91 : 1, //MinusAssignment 92 : 1, //Modulus 93 : 1, //ModulusAssignment 94 : 1, //Multiply 95 : 1, //MultiplyAssignment 99 : 1, //ObjectLiteralColon 103 : 1, //OrAssignment 104 : 1, //ParenExpressionOpen 109 : 1, //PrefixDeincrement 110 : 1, //PrefixIncrement 111 : 1, //Return 113 : 1, //RightShift 114 : 1, //RightShiftAssignment 116 : 1, //StrictEqual 117 : 1, //StrictNotEqual 119 : 1, //SwitchStatementParenOpen 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 125 : 1, //TernaryQuestionMark 126 : 1, //TernaryColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 131 : 1, //Throw 132 : 1, //TypeOf 133 : 1, //UnaryPlus 134 : 1, //UnaryMinus 138 : 1, //VarComma 139 : 1, //Void 141 : 1, //WithStatementParenOpen 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 146 : 1, //WhileStatementParenOpen 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1, //WhileStatementCurlyClose 150 : 1, //Xor 151 : 1, //XorAssignment 152 : 1, //ZeroRightShift 153 : 1 //ZeroRightShiftAssignment }, 110 : {//PrefixIncrement 0 : 1, //ArrayComma 1 : 1, //ArrayOpen 3 : 1, //AccessorOpen 5 : 1, //Addition 6 : 1, //AdditionAssignment 7 : 1, //AssignmentDivide 8 : 1, //AndAssignment 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 11 : 1, //BitwiseNot 12 : 1, //BitwiseOr 13 : 1, //BitwiseAnd 14 : 1, //Break 15 : 1, //Case 17 : 1, //Delete 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 21 : 1, //DivideOperator 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 28 : 1, //Comma 29 : 1, //Continue 30 : 1, //EqualAssignment 31 : 1, //Equal 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 41 : 1, //ForStatementParenOpen 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 45 : 1, //ForSemi 46 : 1, //FunctionCallOpen 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 64 : 1, //GreaterThan 65 : 1, //GreaterThanEqual 69 : 1, //IfStatementParenOpen 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 73 : 1, //In 75 : 1, //InstanceOf 76 : 1, //LabelColon 77 : 1, //LessThan 78 : 1, //LessThanEqual 79 : 1, //LeftShift 80 : 1, //LeftShiftAssignment 81 : 1, //LogicalOr 82 : 1, //LogicalAnd 84 : 1, //New 87 : 1, //NotEqual 88 : 1, //Not 89 : 1, //Nothing 90 : 1, //Minus 91 : 1, //MinusAssignment 92 : 1, //Modulus 93 : 1, //ModulusAssignment 94 : 1, //Multiply 95 : 1, //MultiplyAssignment 99 : 1, //ObjectLiteralColon 103 : 1, //OrAssignment 104 : 1, //ParenExpressionOpen 109 : 1, //PrefixDeincrement 110 : 1, //PrefixIncrement 111 : 1, //Return 113 : 1, //RightShift 114 : 1, //RightShiftAssignment 116 : 1, //StrictEqual 117 : 1, //StrictNotEqual 119 : 1, //SwitchStatementParenOpen 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 125 : 1, //TernaryQuestionMark 126 : 1, //TernaryColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 131 : 1, //Throw 132 : 1, //TypeOf 133 : 1, //UnaryPlus 134 : 1, //UnaryMinus 138 : 1, //VarComma 139 : 1, //Void 141 : 1, //WithStatementParenOpen 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 146 : 1, //WhileStatementParenOpen 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1, //WhileStatementCurlyClose 150 : 1, //Xor 151 : 1, //XorAssignment 152 : 1, //ZeroRightShift 153 : 1 //ZeroRightShiftAssignment }, 111 : {//Return 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 76 : 1, //LabelColon 89 : 1, //Nothing 111 : 1, //Return 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1 //WhileStatementCurlyClose }, 112 : {//RegExp 0 : 1, //ArrayComma 1 : 1, //ArrayOpen 3 : 1, //AccessorOpen 5 : 1, //Addition 6 : 1, //AdditionAssignment 7 : 1, //AssignmentDivide 8 : 1, //AndAssignment 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 11 : 1, //BitwiseNot 12 : 1, //BitwiseOr 13 : 1, //BitwiseAnd 14 : 1, //Break 15 : 1, //Case 17 : 1, //Delete 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 21 : 1, //DivideOperator 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 28 : 1, //Comma 29 : 1, //Continue 30 : 1, //EqualAssignment 31 : 1, //Equal 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 41 : 1, //ForStatementParenOpen 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 45 : 1, //ForSemi 46 : 1, //FunctionCallOpen 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 64 : 1, //GreaterThan 65 : 1, //GreaterThanEqual 69 : 1, //IfStatementParenOpen 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 73 : 1, //In 75 : 1, //InstanceOf 76 : 1, //LabelColon 77 : 1, //LessThan 78 : 1, //LessThanEqual 79 : 1, //LeftShift 80 : 1, //LeftShiftAssignment 81 : 1, //LogicalOr 82 : 1, //LogicalAnd 84 : 1, //New 87 : 1, //NotEqual 88 : 1, //Not 89 : 1, //Nothing 90 : 1, //Minus 91 : 1, //MinusAssignment 92 : 1, //Modulus 93 : 1, //ModulusAssignment 94 : 1, //Multiply 95 : 1, //MultiplyAssignment 99 : 1, //ObjectLiteralColon 103 : 1, //OrAssignment 104 : 1, //ParenExpressionOpen 109 : 1, //PrefixDeincrement 110 : 1, //PrefixIncrement 111 : 1, //Return 113 : 1, //RightShift 114 : 1, //RightShiftAssignment 116 : 1, //StrictEqual 117 : 1, //StrictNotEqual 119 : 1, //SwitchStatementParenOpen 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 125 : 1, //TernaryQuestionMark 126 : 1, //TernaryColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 131 : 1, //Throw 132 : 1, //TypeOf 133 : 1, //UnaryPlus 134 : 1, //UnaryMinus 138 : 1, //VarComma 139 : 1, //Void 141 : 1, //WithStatementParenOpen 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 146 : 1, //WhileStatementParenOpen 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1, //WhileStatementCurlyClose 150 : 1, //Xor 151 : 1, //XorAssignment 152 : 1, //ZeroRightShift 153 : 1 //ZeroRightShiftAssignment }, 113 : {//RightShift 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 114 : {//RightShiftAssignment 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 115 : {//String 0 : 1, //ArrayComma 1 : 1, //ArrayOpen 3 : 1, //AccessorOpen 5 : 1, //Addition 6 : 1, //AdditionAssignment 7 : 1, //AssignmentDivide 8 : 1, //AndAssignment 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 11 : 1, //BitwiseNot 12 : 1, //BitwiseOr 13 : 1, //BitwiseAnd 14 : 1, //Break 15 : 1, //Case 17 : 1, //Delete 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 21 : 1, //DivideOperator 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 28 : 1, //Comma 29 : 1, //Continue 30 : 1, //EqualAssignment 31 : 1, //Equal 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 41 : 1, //ForStatementParenOpen 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 45 : 1, //ForSemi 46 : 1, //FunctionCallOpen 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 64 : 1, //GreaterThan 65 : 1, //GreaterThanEqual 69 : 1, //IfStatementParenOpen 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 73 : 1, //In 75 : 1, //InstanceOf 76 : 1, //LabelColon 77 : 1, //LessThan 78 : 1, //LessThanEqual 79 : 1, //LeftShift 80 : 1, //LeftShiftAssignment 81 : 1, //LogicalOr 82 : 1, //LogicalAnd 84 : 1, //New 87 : 1, //NotEqual 88 : 1, //Not 89 : 1, //Nothing 90 : 1, //Minus 91 : 1, //MinusAssignment 92 : 1, //Modulus 93 : 1, //ModulusAssignment 94 : 1, //Multiply 95 : 1, //MultiplyAssignment 99 : 1, //ObjectLiteralColon 103 : 1, //OrAssignment 104 : 1, //ParenExpressionOpen 109 : 1, //PrefixDeincrement 110 : 1, //PrefixIncrement 111 : 1, //Return 113 : 1, //RightShift 114 : 1, //RightShiftAssignment 116 : 1, //StrictEqual 117 : 1, //StrictNotEqual 119 : 1, //SwitchStatementParenOpen 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 125 : 1, //TernaryQuestionMark 126 : 1, //TernaryColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 131 : 1, //Throw 132 : 1, //TypeOf 133 : 1, //UnaryPlus 134 : 1, //UnaryMinus 138 : 1, //VarComma 139 : 1, //Void 141 : 1, //WithStatementParenOpen 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 146 : 1, //WhileStatementParenOpen 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1, //WhileStatementCurlyClose 150 : 1, //Xor 151 : 1, //XorAssignment 152 : 1, //ZeroRightShift 153 : 1 //ZeroRightShiftAssignment }, 116 : {//StrictEqual 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 117 : {//StrictNotEqual 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 118 : {//SwitchStatement 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 76 : 1, //LabelColon 89 : 1, //Nothing 111 : 1, //Return 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1 //WhileStatementCurlyClose }, 119 : {//SwitchStatementParenOpen 118 : 1 //SwitchStatement }, 120 : {//SwitchStatementParenClose 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 121 : {//SwitchStatementCurlyOpen 120 : 1 //SwitchStatementParenClose }, 122 : {//SwitchStatementCurlyClose 2 : 1, //ArrayClose 4 : 1, //AccessorClose 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 14 : 1, //Break 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 29 : 1, //Continue 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 36 : 1, //False 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 47 : 1, //FunctionCallClose 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 74 : 1, //Infinity 76 : 1, //LabelColon 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 89 : 1, //Nothing 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 111 : 1, //Return 112 : 1, //RegExp 115 : 1, //String 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 124 : 1, //This 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 130 : 1, //True 135 : 1, //Undefined 137 : 1, //VarIdentifier 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1 //WhileStatementCurlyClose }, 123 : {//SwitchColon 2 : 1, //ArrayClose 4 : 1, //AccessorClose 16 : 1, //Default 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 124 : {//This 0 : 1, //ArrayComma 1 : 1, //ArrayOpen 3 : 1, //AccessorOpen 5 : 1, //Addition 6 : 1, //AdditionAssignment 7 : 1, //AssignmentDivide 8 : 1, //AndAssignment 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 11 : 1, //BitwiseNot 12 : 1, //BitwiseOr 13 : 1, //BitwiseAnd 14 : 1, //Break 15 : 1, //Case 17 : 1, //Delete 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 21 : 1, //DivideOperator 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 28 : 1, //Comma 29 : 1, //Continue 30 : 1, //EqualAssignment 31 : 1, //Equal 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 41 : 1, //ForStatementParenOpen 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 45 : 1, //ForSemi 46 : 1, //FunctionCallOpen 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 64 : 1, //GreaterThan 65 : 1, //GreaterThanEqual 69 : 1, //IfStatementParenOpen 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 73 : 1, //In 75 : 1, //InstanceOf 76 : 1, //LabelColon 77 : 1, //LessThan 78 : 1, //LessThanEqual 79 : 1, //LeftShift 80 : 1, //LeftShiftAssignment 81 : 1, //LogicalOr 82 : 1, //LogicalAnd 84 : 1, //New 87 : 1, //NotEqual 88 : 1, //Not 89 : 1, //Nothing 90 : 1, //Minus 91 : 1, //MinusAssignment 92 : 1, //Modulus 93 : 1, //ModulusAssignment 94 : 1, //Multiply 95 : 1, //MultiplyAssignment 99 : 1, //ObjectLiteralColon 103 : 1, //OrAssignment 104 : 1, //ParenExpressionOpen 109 : 1, //PrefixDeincrement 110 : 1, //PrefixIncrement 111 : 1, //Return 113 : 1, //RightShift 114 : 1, //RightShiftAssignment 116 : 1, //StrictEqual 117 : 1, //StrictNotEqual 119 : 1, //SwitchStatementParenOpen 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 125 : 1, //TernaryQuestionMark 126 : 1, //TernaryColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 131 : 1, //Throw 132 : 1, //TypeOf 133 : 1, //UnaryPlus 134 : 1, //UnaryMinus 138 : 1, //VarComma 139 : 1, //Void 141 : 1, //WithStatementParenOpen 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 146 : 1, //WhileStatementParenOpen 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1, //WhileStatementCurlyClose 150 : 1, //Xor 151 : 1, //XorAssignment 152 : 1, //ZeroRightShift 153 : 1 //ZeroRightShiftAssignment }, 125 : {//TernaryQuestionMark 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 126 : {//TernaryColon 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 127 : {//TryStatement 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 76 : 1, //LabelColon 89 : 1, //Nothing 111 : 1, //Return 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1 //WhileStatementCurlyClose }, 128 : {//TryStatementCurlyOpen 127 : 1 //TryStatement }, 129 : {//TryStatementCurlyClose 2 : 1, //ArrayClose 4 : 1, //AccessorClose 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 14 : 1, //Break 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 29 : 1, //Continue 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 36 : 1, //False 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 47 : 1, //FunctionCallClose 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 74 : 1, //Infinity 76 : 1, //LabelColon 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 89 : 1, //Nothing 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 111 : 1, //Return 112 : 1, //RegExp 115 : 1, //String 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 124 : 1, //This 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 130 : 1, //True 135 : 1, //Undefined 137 : 1, //VarIdentifier 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1 //WhileStatementCurlyClose }, 130 : {//True 0 : 1, //ArrayComma 1 : 1, //ArrayOpen 3 : 1, //AccessorOpen 5 : 1, //Addition 6 : 1, //AdditionAssignment 7 : 1, //AssignmentDivide 8 : 1, //AndAssignment 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 11 : 1, //BitwiseNot 12 : 1, //BitwiseOr 13 : 1, //BitwiseAnd 14 : 1, //Break 15 : 1, //Case 17 : 1, //Delete 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 21 : 1, //DivideOperator 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 28 : 1, //Comma 29 : 1, //Continue 30 : 1, //EqualAssignment 31 : 1, //Equal 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 41 : 1, //ForStatementParenOpen 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 45 : 1, //ForSemi 46 : 1, //FunctionCallOpen 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 64 : 1, //GreaterThan 65 : 1, //GreaterThanEqual 69 : 1, //IfStatementParenOpen 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 73 : 1, //In 75 : 1, //InstanceOf 76 : 1, //LabelColon 77 : 1, //LessThan 78 : 1, //LessThanEqual 79 : 1, //LeftShift 80 : 1, //LeftShiftAssignment 81 : 1, //LogicalOr 82 : 1, //LogicalAnd 84 : 1, //New 87 : 1, //NotEqual 88 : 1, //Not 89 : 1, //Nothing 90 : 1, //Minus 91 : 1, //MinusAssignment 92 : 1, //Modulus 93 : 1, //ModulusAssignment 94 : 1, //Multiply 95 : 1, //MultiplyAssignment 99 : 1, //ObjectLiteralColon 103 : 1, //OrAssignment 104 : 1, //ParenExpressionOpen 109 : 1, //PrefixDeincrement 110 : 1, //PrefixIncrement 111 : 1, //Return 113 : 1, //RightShift 114 : 1, //RightShiftAssignment 116 : 1, //StrictEqual 117 : 1, //StrictNotEqual 119 : 1, //SwitchStatementParenOpen 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 125 : 1, //TernaryQuestionMark 126 : 1, //TernaryColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 131 : 1, //Throw 132 : 1, //TypeOf 133 : 1, //UnaryPlus 134 : 1, //UnaryMinus 138 : 1, //VarComma 139 : 1, //Void 141 : 1, //WithStatementParenOpen 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 146 : 1, //WhileStatementParenOpen 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1, //WhileStatementCurlyClose 150 : 1, //Xor 151 : 1, //XorAssignment 152 : 1, //ZeroRightShift 153 : 1 //ZeroRightShiftAssignment }, 131 : {//Throw 0 : 1, //ArrayComma 1 : 1, //ArrayOpen 3 : 1, //AccessorOpen 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 14 : 1, //Break 15 : 1, //Case 17 : 1, //Delete 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 28 : 1, //Comma 29 : 1, //Continue 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 41 : 1, //ForStatementParenOpen 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 45 : 1, //ForSemi 46 : 1, //FunctionCallOpen 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 69 : 1, //IfStatementParenOpen 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 76 : 1, //LabelColon 84 : 1, //New 89 : 1, //Nothing 99 : 1, //ObjectLiteralColon 104 : 1, //ParenExpressionOpen 111 : 1, //Return 119 : 1, //SwitchStatementParenOpen 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 125 : 1, //TernaryQuestionMark 126 : 1, //TernaryColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 131 : 1, //Throw 132 : 1, //TypeOf 138 : 1, //VarComma 139 : 1, //Void 141 : 1, //WithStatementParenOpen 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 146 : 1, //WhileStatementParenOpen 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1 //WhileStatementCurlyClose }, 132 : {//TypeOf 0 : 1, //ArrayComma 1 : 1, //ArrayOpen 3 : 1, //AccessorOpen 5 : 1, //Addition 6 : 1, //AdditionAssignment 7 : 1, //AssignmentDivide 8 : 1, //AndAssignment 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 12 : 1, //BitwiseOr 13 : 1, //BitwiseAnd 14 : 1, //Break 15 : 1, //Case 17 : 1, //Delete 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 21 : 1, //DivideOperator 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 28 : 1, //Comma 29 : 1, //Continue 30 : 1, //EqualAssignment 31 : 1, //Equal 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 41 : 1, //ForStatementParenOpen 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 45 : 1, //ForSemi 46 : 1, //FunctionCallOpen 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 64 : 1, //GreaterThan 65 : 1, //GreaterThanEqual 69 : 1, //IfStatementParenOpen 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 73 : 1, //In 75 : 1, //InstanceOf 76 : 1, //LabelColon 77 : 1, //LessThan 78 : 1, //LessThanEqual 79 : 1, //LeftShift 80 : 1, //LeftShiftAssignment 81 : 1, //LogicalOr 82 : 1, //LogicalAnd 84 : 1, //New 87 : 1, //NotEqual 89 : 1, //Nothing 90 : 1, //Minus 91 : 1, //MinusAssignment 92 : 1, //Modulus 93 : 1, //ModulusAssignment 94 : 1, //Multiply 95 : 1, //MultiplyAssignment 99 : 1, //ObjectLiteralColon 103 : 1, //OrAssignment 104 : 1, //ParenExpressionOpen 111 : 1, //Return 113 : 1, //RightShift 114 : 1, //RightShiftAssignment 116 : 1, //StrictEqual 117 : 1, //StrictNotEqual 119 : 1, //SwitchStatementParenOpen 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 125 : 1, //TernaryQuestionMark 126 : 1, //TernaryColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 131 : 1, //Throw 132 : 1, //TypeOf 138 : 1, //VarComma 139 : 1, //Void 141 : 1, //WithStatementParenOpen 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 146 : 1, //WhileStatementParenOpen 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1, //WhileStatementCurlyClose 150 : 1, //Xor 151 : 1, //XorAssignment 152 : 1, //ZeroRightShift 153 : 1 //ZeroRightShiftAssignment }, 133 : {//UnaryPlus 0 : 1, //ArrayComma 1 : 1, //ArrayOpen 3 : 1, //AccessorOpen 5 : 1, //Addition 6 : 1, //AdditionAssignment 7 : 1, //AssignmentDivide 8 : 1, //AndAssignment 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 11 : 1, //BitwiseNot 12 : 1, //BitwiseOr 13 : 1, //BitwiseAnd 14 : 1, //Break 15 : 1, //Case 17 : 1, //Delete 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 21 : 1, //DivideOperator 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 28 : 1, //Comma 29 : 1, //Continue 30 : 1, //EqualAssignment 31 : 1, //Equal 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 41 : 1, //ForStatementParenOpen 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 45 : 1, //ForSemi 46 : 1, //FunctionCallOpen 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 64 : 1, //GreaterThan 65 : 1, //GreaterThanEqual 69 : 1, //IfStatementParenOpen 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 73 : 1, //In 75 : 1, //InstanceOf 76 : 1, //LabelColon 77 : 1, //LessThan 78 : 1, //LessThanEqual 79 : 1, //LeftShift 80 : 1, //LeftShiftAssignment 81 : 1, //LogicalOr 82 : 1, //LogicalAnd 84 : 1, //New 87 : 1, //NotEqual 88 : 1, //Not 89 : 1, //Nothing 90 : 1, //Minus 91 : 1, //MinusAssignment 92 : 1, //Modulus 93 : 1, //ModulusAssignment 94 : 1, //Multiply 95 : 1, //MultiplyAssignment 99 : 1, //ObjectLiteralColon 103 : 1, //OrAssignment 104 : 1, //ParenExpressionOpen 109 : 1, //PrefixDeincrement 110 : 1, //PrefixIncrement 111 : 1, //Return 113 : 1, //RightShift 114 : 1, //RightShiftAssignment 116 : 1, //StrictEqual 117 : 1, //StrictNotEqual 119 : 1, //SwitchStatementParenOpen 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 125 : 1, //TernaryQuestionMark 126 : 1, //TernaryColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 131 : 1, //Throw 132 : 1, //TypeOf 133 : 1, //UnaryPlus 134 : 1, //UnaryMinus 138 : 1, //VarComma 139 : 1, //Void 141 : 1, //WithStatementParenOpen 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 146 : 1, //WhileStatementParenOpen 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1, //WhileStatementCurlyClose 150 : 1, //Xor 151 : 1, //XorAssignment 152 : 1, //ZeroRightShift 153 : 1 //ZeroRightShiftAssignment }, 134 : {//UnaryMinus 0 : 1, //ArrayComma 1 : 1, //ArrayOpen 3 : 1, //AccessorOpen 5 : 1, //Addition 6 : 1, //AdditionAssignment 7 : 1, //AssignmentDivide 8 : 1, //AndAssignment 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 11 : 1, //BitwiseNot 12 : 1, //BitwiseOr 13 : 1, //BitwiseAnd 14 : 1, //Break 15 : 1, //Case 17 : 1, //Delete 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 21 : 1, //DivideOperator 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 28 : 1, //Comma 29 : 1, //Continue 30 : 1, //EqualAssignment 31 : 1, //Equal 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 41 : 1, //ForStatementParenOpen 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 45 : 1, //ForSemi 46 : 1, //FunctionCallOpen 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 64 : 1, //GreaterThan 65 : 1, //GreaterThanEqual 69 : 1, //IfStatementParenOpen 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 73 : 1, //In 75 : 1, //InstanceOf 76 : 1, //LabelColon 77 : 1, //LessThan 78 : 1, //LessThanEqual 79 : 1, //LeftShift 80 : 1, //LeftShiftAssignment 81 : 1, //LogicalOr 82 : 1, //LogicalAnd 84 : 1, //New 87 : 1, //NotEqual 88 : 1, //Not 89 : 1, //Nothing 90 : 1, //Minus 91 : 1, //MinusAssignment 92 : 1, //Modulus 93 : 1, //ModulusAssignment 94 : 1, //Multiply 95 : 1, //MultiplyAssignment 99 : 1, //ObjectLiteralColon 103 : 1, //OrAssignment 104 : 1, //ParenExpressionOpen 109 : 1, //PrefixDeincrement 110 : 1, //PrefixIncrement 111 : 1, //Return 113 : 1, //RightShift 114 : 1, //RightShiftAssignment 116 : 1, //StrictEqual 117 : 1, //StrictNotEqual 119 : 1, //SwitchStatementParenOpen 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 125 : 1, //TernaryQuestionMark 126 : 1, //TernaryColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 131 : 1, //Throw 132 : 1, //TypeOf 133 : 1, //UnaryPlus 134 : 1, //UnaryMinus 138 : 1, //VarComma 139 : 1, //Void 141 : 1, //WithStatementParenOpen 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 146 : 1, //WhileStatementParenOpen 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1, //WhileStatementCurlyClose 150 : 1, //Xor 151 : 1, //XorAssignment 152 : 1, //ZeroRightShift 153 : 1 //ZeroRightShiftAssignment }, 135 : {//Undefined 0 : 1, //ArrayComma 1 : 1, //ArrayOpen 3 : 1, //AccessorOpen 5 : 1, //Addition 6 : 1, //AdditionAssignment 7 : 1, //AssignmentDivide 8 : 1, //AndAssignment 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 11 : 1, //BitwiseNot 12 : 1, //BitwiseOr 13 : 1, //BitwiseAnd 14 : 1, //Break 15 : 1, //Case 17 : 1, //Delete 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 21 : 1, //DivideOperator 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 28 : 1, //Comma 29 : 1, //Continue 30 : 1, //EqualAssignment 31 : 1, //Equal 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 41 : 1, //ForStatementParenOpen 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 45 : 1, //ForSemi 46 : 1, //FunctionCallOpen 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 64 : 1, //GreaterThan 65 : 1, //GreaterThanEqual 69 : 1, //IfStatementParenOpen 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 73 : 1, //In 75 : 1, //InstanceOf 76 : 1, //LabelColon 77 : 1, //LessThan 78 : 1, //LessThanEqual 79 : 1, //LeftShift 80 : 1, //LeftShiftAssignment 81 : 1, //LogicalOr 82 : 1, //LogicalAnd 84 : 1, //New 87 : 1, //NotEqual 88 : 1, //Not 89 : 1, //Nothing 90 : 1, //Minus 91 : 1, //MinusAssignment 92 : 1, //Modulus 93 : 1, //ModulusAssignment 94 : 1, //Multiply 95 : 1, //MultiplyAssignment 99 : 1, //ObjectLiteralColon 103 : 1, //OrAssignment 104 : 1, //ParenExpressionOpen 109 : 1, //PrefixDeincrement 110 : 1, //PrefixIncrement 111 : 1, //Return 113 : 1, //RightShift 114 : 1, //RightShiftAssignment 116 : 1, //StrictEqual 117 : 1, //StrictNotEqual 119 : 1, //SwitchStatementParenOpen 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 125 : 1, //TernaryQuestionMark 126 : 1, //TernaryColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 131 : 1, //Throw 132 : 1, //TypeOf 133 : 1, //UnaryPlus 134 : 1, //UnaryMinus 138 : 1, //VarComma 139 : 1, //Void 141 : 1, //WithStatementParenOpen 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 146 : 1, //WhileStatementParenOpen 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1, //WhileStatementCurlyClose 150 : 1, //Xor 151 : 1, //XorAssignment 152 : 1, //ZeroRightShift 153 : 1 //ZeroRightShiftAssignment }, 136 : {//Var 0 : 1, //ArrayComma 1 : 1, //ArrayOpen 3 : 1, //AccessorOpen 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 14 : 1, //Break 15 : 1, //Case 17 : 1, //Delete 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 28 : 1, //Comma 29 : 1, //Continue 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 41 : 1, //ForStatementParenOpen 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 45 : 1, //ForSemi 46 : 1, //FunctionCallOpen 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 69 : 1, //IfStatementParenOpen 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 76 : 1, //LabelColon 84 : 1, //New 89 : 1, //Nothing 99 : 1, //ObjectLiteralColon 104 : 1, //ParenExpressionOpen 111 : 1, //Return 119 : 1, //SwitchStatementParenOpen 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 125 : 1, //TernaryQuestionMark 126 : 1, //TernaryColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 131 : 1, //Throw 132 : 1, //TypeOf 138 : 1, //VarComma 139 : 1, //Void 141 : 1, //WithStatementParenOpen 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 146 : 1, //WhileStatementParenOpen 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1 //WhileStatementCurlyClose }, 137 : {//VarIdentifier 136 : 1, //Var 138 : 1 //VarComma }, 138 : {//VarComma 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 139 : {//Void 0 : 1, //ArrayComma 1 : 1, //ArrayOpen 3 : 1, //AccessorOpen 5 : 1, //Addition 6 : 1, //AdditionAssignment 7 : 1, //AssignmentDivide 8 : 1, //AndAssignment 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 12 : 1, //BitwiseOr 13 : 1, //BitwiseAnd 14 : 1, //Break 15 : 1, //Case 17 : 1, //Delete 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 21 : 1, //DivideOperator 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 28 : 1, //Comma 29 : 1, //Continue 30 : 1, //EqualAssignment 31 : 1, //Equal 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 41 : 1, //ForStatementParenOpen 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 45 : 1, //ForSemi 46 : 1, //FunctionCallOpen 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 64 : 1, //GreaterThan 65 : 1, //GreaterThanEqual 69 : 1, //IfStatementParenOpen 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 73 : 1, //In 75 : 1, //InstanceOf 76 : 1, //LabelColon 77 : 1, //LessThan 78 : 1, //LessThanEqual 79 : 1, //LeftShift 80 : 1, //LeftShiftAssignment 81 : 1, //LogicalOr 82 : 1, //LogicalAnd 84 : 1, //New 87 : 1, //NotEqual 89 : 1, //Nothing 90 : 1, //Minus 91 : 1, //MinusAssignment 92 : 1, //Modulus 93 : 1, //ModulusAssignment 94 : 1, //Multiply 95 : 1, //MultiplyAssignment 99 : 1, //ObjectLiteralColon 103 : 1, //OrAssignment 104 : 1, //ParenExpressionOpen 111 : 1, //Return 113 : 1, //RightShift 114 : 1, //RightShiftAssignment 116 : 1, //StrictEqual 117 : 1, //StrictNotEqual 119 : 1, //SwitchStatementParenOpen 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 125 : 1, //TernaryQuestionMark 126 : 1, //TernaryColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 131 : 1, //Throw 132 : 1, //TypeOf 138 : 1, //VarComma 139 : 1, //Void 141 : 1, //WithStatementParenOpen 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 146 : 1, //WhileStatementParenOpen 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1, //WhileStatementCurlyClose 150 : 1, //Xor 151 : 1, //XorAssignment 152 : 1, //ZeroRightShift 153 : 1 //ZeroRightShiftAssignment }, 140 : {//WithStatement 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 76 : 1, //LabelColon 89 : 1, //Nothing 111 : 1, //Return 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1 //WhileStatementCurlyClose }, 141 : {//WithStatementParenOpen 140 : 1 //WithStatement }, 142 : {//WithStatementParenClose 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 143 : {//WithStatementCurlyOpen 142 : 1 //WithStatementParenClose }, 144 : {//WithStatementCurlyClose 2 : 1, //ArrayClose 4 : 1, //AccessorClose 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 14 : 1, //Break 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 29 : 1, //Continue 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 36 : 1, //False 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 47 : 1, //FunctionCallClose 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 74 : 1, //Infinity 76 : 1, //LabelColon 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 89 : 1, //Nothing 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 111 : 1, //Return 112 : 1, //RegExp 115 : 1, //String 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 124 : 1, //This 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 130 : 1, //True 135 : 1, //Undefined 137 : 1, //VarIdentifier 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1 //WhileStatementCurlyClose }, 145 : {//WhileStatement 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 76 : 1, //LabelColon 89 : 1, //Nothing 111 : 1, //Return 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1 //WhileStatementCurlyClose }, 146 : {//WhileStatementParenOpen 145 : 1 //WhileStatement }, 147 : {//WhileStatementParenClose 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 148 : {//WhileStatementCurlyOpen 147 : 1 //WhileStatementParenClose }, 149 : {//WhileStatementCurlyClose 2 : 1, //ArrayClose 4 : 1, //AccessorClose 9 : 1, //BlockStatementCurlyOpen 10 : 1, //BlockStatementCurlyClose 14 : 1, //Break 18 : 1, //Do 19 : 1, //DoStatementCurlyOpen 20 : 1, //DoStatementCurlyClose 26 : 1, //CatchStatementCurlyOpen 27 : 1, //CatchStatementCurlyClose 29 : 1, //Continue 32 : 1, //Else 33 : 1, //ElseCurlyOpen 34 : 1, //ElseCurlyClose 35 : 1, //EndStatement 36 : 1, //False 38 : 1, //FinallyStatementCurlyOpen 39 : 1, //FinallyStatementCurlyClose 42 : 1, //ForStatementParenClose 43 : 1, //ForStatementCurlyOpen 44 : 1, //ForStatementCurlyClose 47 : 1, //FunctionCallClose 59 : 1, //FunctionExpressionCurlyOpen 61 : 1, //FunctionStatementCurlyOpen 62 : 1, //FunctionStatementCurlyClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 70 : 1, //IfStatementParenClose 71 : 1, //IfStatementCurlyOpen 72 : 1, //IfStatementCurlyClose 74 : 1, //Infinity 76 : 1, //LabelColon 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 89 : 1, //Nothing 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 111 : 1, //Return 112 : 1, //RegExp 115 : 1, //String 120 : 1, //SwitchStatementParenClose 121 : 1, //SwitchStatementCurlyOpen 122 : 1, //SwitchStatementCurlyClose 123 : 1, //SwitchColon 124 : 1, //This 128 : 1, //TryStatementCurlyOpen 129 : 1, //TryStatementCurlyClose 130 : 1, //True 135 : 1, //Undefined 137 : 1, //VarIdentifier 142 : 1, //WithStatementParenClose 143 : 1, //WithStatementCurlyOpen 144 : 1, //WithStatementCurlyClose 147 : 1, //WhileStatementParenClose 148 : 1, //WhileStatementCurlyOpen 149 : 1 //WhileStatementCurlyClose }, 150 : {//Xor 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 151 : {//XorAssignment 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 152 : {//ZeroRightShift 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 107 : 1, //PostfixIncrement 108 : 1, //PostfixDeincrement 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier }, 153 : {//ZeroRightShiftAssignment 2 : 1, //ArrayClose 4 : 1, //AccessorClose 36 : 1, //False 47 : 1, //FunctionCallClose 63 : 1, //FunctionExpressionCurlyClose 67 : 1, //Identifier 74 : 1, //Infinity 83 : 1, //NaN 85 : 1, //Number 86 : 1, //Null 97 : 1, //ObjectLiteralCurlyClose 106 : 1, //ParenExpressionClose 112 : 1, //RegExp 115 : 1, //String 124 : 1, //This 130 : 1, //True 135 : 1, //Undefined 137 : 1 //VarIdentifier } }; exports.version = "0.3.10"; exports.parse = function() { var js = MentalJS(); }; MentalJS = function() { function Mental() { var that = this,scoping = '$', replaceScoping = new RegExp('[' + scoping + ']'), attributeWhitelist = /^(?:style|accesskey|align|alink|alt|bgcolor|border|cellpadding|cellspacing|class|color|cols|colspan|coords|dir|face|height|hspace|id|ismap|lang|marginheight|marginwidth|multiple|name|nohref|noresize|noshade|nowrap|ref|rel|rev|rows|rowspan|scrolling|size|shape|span|summary|tabindex|target|title|type|usemap|valign|value|vlink|vspace|width)$/i, attributeWhitelistList = 'accesskey|align|alink|alt|bgcolor|border|cellpadding|cellspacing|class|color|cols|colspan|coords|dir|face|height|hspace|id|ismap|lang|marginheight|marginwidth|multiple|name|nohref|noresize|noshade|nowrap|ref|rel|rev|rows|rowspan|scrolling|size|shape|span|summary|tabindex|target|title|type|usemap|valign|value|vlink|vspace|width'.split('|'), urlBasedAttributes = /^(?:href|src|action)$/i, urlBasedAttributesList = ['href', 'src', 'action'], allowedEvents = /^(?:onabort|onactivate|onafterprint|onafterupdate|onbeforeactivate|onbeforecopy|onbeforecut|onbeforedeactivate|onbeforeeditfocus|onbeforepaste|onbeforeprint|onbeforeunload|onbegin|onblur|onbounce|oncellchange|onchange|onclick|oncontextmenu|oncontrolselect|oncopy|oncut|ondataavailable|ondatasetchanged|ondatasetcomplete|ondblclick|ondeactivate|ondrag|ondragend|ondragleave|ondragenter|ondragover|ondragdrop|ondrop|onend|onerror|onerrorupdate|onexit|onfilterchange|onfinish|onfocus|onfocusin|onfocusout|onhelp|onkeydown|onkeypress|onkeyup|onlayoutcomplete|onload|onlosecapture|onmediacomplete|onmediaerror|onmousedown|onmouseenter|onmouseleave|onmousemove|onmouseout|onmouseover|onmouseup|onmousewheel|onmove|onmoveend|onmovestart|onoutofsync|onpaste|onpause|onprogress|onpropertychange|onreadystatechange|onrepeat|onreset|onresize|onresizeend|onresizestart|onresume|onreverse|onrowenter|onrowexit|onrowdelete|onrowinserted|onscroll|onseek|onselect|onselectionchange|onselectstart|onstart|onstop|onsynchrestored|onsubmit|ontimeerror|ontrackchange|onunload|onurlflip|seeksegmenttime|oncanplay|oncanplaythrough|ondragstart|ondurationchange|onemptied|onended|onloadeddata|onloadedmetadata|onloadstart|onmessage|onoffline|ononline|onplay|onplaying|onratechange|onsearch|onseeked|onseeking|onstalled|onstorage|onsuspend|ontimeupdate|onvolumechange|onwaiting|onwebkitanimationend|onwebkitanimationiteration|onwebkitanimationstart|onwebkittransitionend)$/i, allowedEventsList = 'onabort|onactivate|onafterprint|onafterupdate|onbeforeactivate|onbeforecopy|onbeforecut|onbeforedeactivate|onbeforeeditfocus|onbeforepaste|onbeforeprint|onbeforeunload|onbegin|onblur|onbounce|oncellchange|onchange|onclick|oncontextmenu|oncontrolselect|oncopy|oncut|ondataavailable|ondatasetchanged|ondatasetcomplete|ondblclick|ondeactivate|ondrag|ondragend|ondragleave|ondragenter|ondragover|ondragdrop|ondrop|onend|onerror|onerrorupdate|onexit|onfilterchange|onfinish|onfocus|onfocusin|onfocusout|onhelp|onkeydown|onkeypress|onkeyup|onlayoutcomplete|onload|onlosecapture|onmediacomplete|onmediaerror|onmousedown|onmouseenter|onmouseleave|onmousemove|onmouseout|onmouseover|onmouseup|onmousewheel|onmove|onmoveend|onmovestart|onoutofsync|onpaste|onpause|onprogress|onpropertychange|onreadystatechange|onrepeat|onreset|onresize|onresizeend|onresizestart|onresume|onreverse|onrowenter|onrowexit|onrowdelete|onrowinserted|onscroll|onseek|onselect|onselectionchange|onselectstart|onstart|onstop|onsynchrestored|onsubmit|ontimeerror|ontrackchange|onunload|onurlflip|seeksegmenttime|oncanplay|oncanplaythrough|ondragstart|ondurationchange|onemptied|onended|onloadeddata|onloadedmetadata|onloadstart|onmessage|onoffline|ononline|onplay|onplaying|onratechange|onsearch|onseeked|onseeking|onstalled|onstorage|onsuspend|ontimeupdate|onvolumechange|onwaiting|onwebkitanimationend|onwebkitanimationiteration|onwebkitanimationstart|onwebkittransitionend'.split('|'), allowedTagsRegEx = /^(?:a|b|h[1-6]|script|head|title|style|link|body|form|font|select|optgroup|option|input|textarea|button|label|fieldset|legend|ul|ol|dl|directory|menu|nav|li|div|p|heading|quote|pre|br|hr|img|image|map|area|table|code|caption|th|section|tr|td|tbody|iframe)$/i, allowedCSSProperties = ["azimuth", "background", "backgroundAttachment", "backgroundColor", "backgroundImage", "backgroundPosition", "backgroundRepeat", "border", "borderCollapse", "borderColor", "borderSpacing", "borderStyle", "borderTop", "borderRight", "borderBottom", "borderLeft", "borderTopColor", "borderRightColor", "borderBottomColor", "borderLeftColor", "borderTopStyle", "borderRightStyle", "borderBottomStyle", "borderLeftStyle", "borderTopWidth", "borderRightWidth", "borderBottomWidth", "borderLeftWidth", "borderWidth", "bottom", "captionSide", "clear", "clip", "color", "content", "counterIncrement", "counterReset", "cue", "cueAfter", "cueBefore", "cursor", "direction", "display", "elevation", "emptyCells", "float", "font", "fontFamily", "fontSize", "fontSizeAdjust", "fontStretch", "fontStyle", "fontVariant", "fontWeight", "height", "left", "letterSpacing", "lineHeight", "listStyle", "listStyleImage", "listStylePosition", "listStyleType", "margin", "marginTop", "marginRight", "marginBottom", "marginLeft", "markerOffset", "marks", "maxHeight", "maxWidth", "minHeight", "minWidth", "orphans", "outline", "outlineColor", "outlineStyle", "outlineWidth", "overflow", "padding", "paddingTop", "paddingRight", "paddingBottom", "paddingLeft", "page", "pageBreakAfter", "pageBreakBefore", "pageBreakInside", "pause", "pauseAfter", "pauseBefore", "pitch", "pitchRange", "playDuring", "position", "quotes", "richness", "right", "size", "speak", "speakHeader", "speakNumeral", "speakPunctuation", "speechRate", "stress", "tableLayout", "textAlign", "textDecoration", "textIndent", "textShadow", "textTransform", "top", "unicodeBidi", "verticalAlign", "visibility", "voiceFamily", "volume", "whiteSpace", "widows", "width", "wordSpacing", "zIndex"], setTimeoutIDS = {}, setIntervalIDS = {}; this.init = init; function init(config) { M = { O : function(obj) { var keys = Object.keys(obj), key; for (key in obj) { if (!/.+[$]$/.test(key)) { continue; } if (/^(?:toString|valueOf|constructor|hasOwnProperty)[$]$/.test(key)) { Object.defineProperty(obj, key.replace(new RegExp(replaceScoping.source + '$', 'i'), ''), { configurable : true, enumerable : false, writable : true }); Object.defineProperty(obj, key, { value : obj[key], enumerable : false, writable : true, configurable : true }); } else { if (key === 'length$') { Object.defineProperty(obj, key.replace(new RegExp(replaceScoping.source + '$', 'i'), ''), { configurable : true, enumerable : true, writable : true }); Object.defineProperty(obj, key, { set : function(len) { this.length = len; }, get : function() { return this.length; }, enumerable : false, configurable : true }); continue; } Object.defineProperty(obj, key.replace(new RegExp(replaceScoping.source + '$', 'i'), ''), { configurable : true, enumerable : true, writable : true }); Object.defineProperty(obj, key, { value : obj[key], enumerable : false, writable : true, configurable : true }); } } return obj; }, P : function() { var exp = arguments[arguments.length - 1]; if ( typeof exp === 'undefined') { return null; } if ((/[^\d]/.test(exp) || exp === '')) { return exp + scoping; } else { return +exp; } }, A : function(args) { args = [].slice.call(args, 0); args.callee$ = arguments.callee.caller; return args; } }; function defineStyle(obj, property) { Object.defineProperty(obj, property + '$', { configurable : true, get : function() { return this[property]; }, set : function(value) { this[property] = value; } }); } function createSandboxedNode(node) { for (var i = 0; i < allowedEventsList.length; i++) { Object.defineProperty(node, allowedEventsList[i] + scoping, { configurable : true, get : function(attr) { return function() { return this[attr]; } }(allowedEventsList[i]), set : function(attr) { return function(val) { if ( typeof val === 'function') { return this[attr] = val; } } }(allowedEventsList[i]) }); } for (var i = 0; i < attributeWhitelistList.length; i++) { Object.defineProperty(node, attributeWhitelistList[i] + scoping, { configurable : true, get : function(attr) { return function() { return this[attr]; } }(attributeWhitelistList[i]), set : function(attr) { return function(val) { return this[attr] = val; } }(attributeWhitelistList[i]) }); } for (var i = 0; i < urlBasedAttributesList.length; i++) { Object.defineProperty(node, urlBasedAttributesList[i] + scoping, { configurable : true, get : function(attr) { return function() { return this[attr]; } }(urlBasedAttributesList[i]), set : function(attr) { var anchor = document.createElement('a'); return function(val) { anchor.href = val + ''; if ((anchor.protocol === 'http:' || anchor.protocol === 'https:') && anchor.host.replace(/:\d+$/, '') === location.host.replace(/:\d+$/, '')) { return this[attr] = val; } } }(urlBasedAttributesList[i]) }); } Object.defineProperties(node, { 'innerText$' : { configurable : true, get : function() { return this.innerText; }, set : function(innerText) { this.innerText = innerText; } }, 'innerHTML$' : { configurable : true, get : function() { return this.innerHTML; }, set : function(innerHTML) { if (config.parseInnerHTML) { this.innerHTML = config.parseInnerHTML(innerHTML); return innerHTML; } var node = document.implementation.createHTMLDocument(''); node.body.innerHTML = innerHTML; var ni = document.createNodeIterator(node.body, NodeFilter.SHOW_ELEMENT, null, false), elementNode, anchor = document.createElement('a'), scripts = [], i, script, code, elementsToRemove = []; while ( elementNode = ni.nextNode()) { if (!allowedTagsRegEx.test(elementNode.nodeName)) { elementsToRemove.push(elementNode); } if (elementNode.nodeName.toLowerCase() === 'script') { if (elementNode.text.length) { scripts.push({ type : 'inline', code : elementNode.text }); } else { anchor.href = elementNode.getAttribute('src'); if ((anchor.protocol === 'http:' || anchor.protocol === 'https:') && anchor.host.replace(/:\d+$/, '') === location.host.replace(/:\d+$/, '')) { scripts.push({ type : 'external', src : elementNode.getAttribute('src') }); } } elementsToRemove.push(elementNode); continue; } if (elementNode.attributes instanceof HTMLElement || typeof elementNode.setAttribute !== 'function' || typeof elementNode.getAttribute !== 'function' || typeof elementNode.removeAttribute !== 'function') { elementsToRemove.push(elementNode); continue; } for ( i = elementNode.attributes.length - 1; i > -1; i--) { if (urlBasedAttributes.test(elementNode.attributes[i].name)) { anchor.href = elementNode.attributes[i].value; if ((anchor.protocol === 'http:' || anchor.protocol === 'https:') && anchor.host.replace(/:\d+$/, '') === location.host.replace(/:\d+$/, '')) { elementNode.setAttribute(elementNode.attributes[i].name, elementNode.attributes[i].value + ''); } else { elementNode.setAttribute(elementNode.attributes[i].name, '#'); } continue; } if (allowedEvents.test(elementNode.attributes[i].name)) { var js = MentalJS(); try { elementNode.setAttribute(elementNode.attributes[i].name, js.parse({ options : { eval : false }, code : elementNode.attributes[i].value })); } catch(e) { elementNode.setAttribute(elementNode.attributes[i].name, ''); } continue; } if (!attributeWhitelist.test(elementNode.attributes[i].name)) { elementNode.removeAttribute(elementNode.attributes[i].name); } } } for ( i = 0; i < elementsToRemove.length; i++) { try { elementsToRemove[i].parentNode.removeChild(elementsToRemove[i]); } catch(e) { }; try { node.body.removeChild(elementsToRemove[i]); } catch(e) { }; } anchor = null; this.innerHTML = node.body.innerHTML; for ( i = 0; i < scripts.length; i++) { script = document.createElement('script'); if (scripts[i].type === 'inline') { var js = MentalJS(); try { code = document.createTextNode(js.parse({ options : { eval : false }, code : scripts[i].code })); script.appendChild(code); } catch(e) { } } else { script.src = scripts[i].src; } document.getElementsByTagName('head')[0].appendChild(script); } } }, 'textContent$' : { configurable : true, get : function() { return this.textContent; }, set : function(textContent) { this.textContent = textContent; } }, 'style$' : { configurable : true, get : function() { var style = this.style, i; for ( i = 0; i < allowedCSSProperties.length; i++) { defineStyle(style, allowedCSSProperties[i]); } //todo CSS parsing Object.defineProperty(this.style, 'cssText$', { configurable : true, get : function() { return this.cssText; }, set : function(val) { this.cssText = val; } }); return style; } }, 'appendChild$' : { configurable : true, writable : false, value : function(node) { var js, script; if (this.tagName && this.tagName.toUpperCase() == 'SCRIPT') { while (this.firstChild) { this.removeChild(this.firstChild); } js = MentalJS(); code = document.createTextNode(js.parse({ options : { eval : false }, code : node.textContent })); script = document.createElement('script'); script.appendChild(code); return this.appendChild(script); } return this.appendChild(node); } }, 'value$' : { configurable : true, set : function(val) { this.value = val; }, get : function() { return this.value; } }, 'ownerDocument$' : { configurable : true, get : function() { return this.ownerDocument; } }, 'nodeName$' : { enumerable : false, configurable : true, writable : false, value : document.nodeName }, 'tagName$' : { configurable : true, get : function() { return this.tagName; } }, 'nodeType$' : { configurable : true, get : function() { return this.nodeType; } }, 'childNodes$' : { configurable : true, get : function() { return this.childNodes; } }, 'firstChild$' : { configurable : true, get : function() { return this.firstChild; } }, 'lastChild$' : { configurable : true, get : function() { return this.lastChild; } }, 'nextSibling$' : { configurable : true, get : function() { return this.nextSibling; } }, 'parentNode$' : { configurable : true, get : function() { return this.parentNode; } }, 'insertBefore$' : { configurable : true, writable : false, value : function(newElement, referenceElement) { var js, script; if (this.tagName && this.tagName.toUpperCase() == 'SCRIPT') { while (this.firstChild) { this.removeChild(this.firstChild); } js = MentalJS(); code = document.createTextNode(js.parse({ options : { eval : false }, code : newElement.textContent })); return this.insertBefore(code, referenceElement); } return this.insertBefore.apply(this, arguments); } }, 'cloneNode$' : { configurable : true, writable : false, value : function() { return this.cloneNode.apply(this, arguments); } }, 'removeChild$' : { configurable : true, writable : false, value : function() { return this.removeChild.apply(this, arguments); } }, 'removeAttribute$' : { configurable : true, writable : false, value : function(name) { this.removeAttribute(name); } }, 'getAttribute$' : { configurable : true, writable : false, value : function(name) { if (attributeWhitelist.test(name)) { return this.getAttribute(name); } } }, 'setAttribute$' : { configurable : true, writable : false, value : function(name, value) { var anchor; if (attributeWhitelist.test(name)) { if (urlBasedAttributes.test(name)) { anchor = document.createElement('a'); anchor.href = value; if ((anchor.protocol === 'http:' || anchor.protocol === 'https:') && anchor.host.replace(/:\d+$/, '') === location.host.replace(/:\d+$/, '')) { value = anchor.href + ''; } else { value = '#'; } anchor = null; } return this.setAttribute(name, value + ''); } } }, 'getElementsByTagName$' : { configurable : true, writable : false, value : function() { return this.getElementsByTagName.apply(this, arguments); } } }); return node; } function objWhitelist(obj, list, noprototype) { list = list.split(','); for (var i = 0; i < list.length; i++) { var prop = list[i]; if (noprototype) { Object.defineProperty(obj, prop + scoping, { value : obj[prop], configurable : true, enumerable : false, writable : false }); } else { Object.defineProperty(obj.prototype, prop + scoping, { writable : false, configurable : true, enumerable : false, value : obj.prototype[prop] }); } } return obj; } function constWhitelist(obj, list, transObj) { list = list.split(','); for (var i = 0; i < list.length; i++) { var prop = list[i]; if (transObj) { Object.defineProperty(transObj, prop + scoping, { value : obj[prop], configurable : true, enumerable : false, writable : false }); } else { Object.defineProperty(obj, prop + scoping, { value : obj[prop], configurable : true, enumerable : false, writable : false }); } } } function FUNCTION() { var args = arguments, converted, js = MentalJS(), i, funct, functArgs = []; if (args.length > 1) { funct = '(function anonymous('; for ( i = 0; i < args.length - 1; i++) { args[i] = args[i] + ''; args[i] = args[i].replace(/[^\w]/ig, function(c) { if (c.charCodeAt(0) < 0x80) { return ''; } }); functArgs.push(args[i]); } funct += functArgs.join(','); funct += '){' + args[args.length - 1] + '})'; converted = js.parse(funct); } else { funct = '(function anonymous(){' + args[0] + '})'; converted = js.parse(funct); } if (config.functionCode) { config.functionCode(converted); } return converted; } FUNCTION.constructor$ = FUNCTION; Function$ = FUNCTION; Boolean.constructor$ = Function$; Boolean.prototype.constructor$ = Boolean; Boolean$ = Boolean; Function.prototype.constructor$ = Function$; objWhitelist(Function, 'call,apply'); objWhitelist(String, 'charAt,charCodeAt,concat,indexOf,lastIndexOf,localeCompare,match,replace,search,slice,split,substr,substring,toLocaleLowerCase,toLocaleString,toLocaleUpperCase,toLowerCase,toUpperCase'); String = objWhitelist(String, 'fromCharCode', true); String.prototype.constructor$ = String; String.constructor$ = Function$; String$ = String; objWhitelist(Array, 'sort,join,pop,push,reverse,shift,slice,splice,unshift,concat'); Array.prototype.constructor$ = Array; Array.constructor$ = Function$; Array$ = Array; objWhitelist(RegExp, 'compile,exec,test'); RegExp.prototype.constructor$ = RegExp; Object.defineProperty(RegExp.prototype, 'source$', { configurable : true, get : function() { return this.source } }); RegExp.lastMatch$ = RegExp.lastMatch; RegExp.lastParen$ = RegExp.lastParen; RegExp.leftContext$ = RegExp.leftContext; RegExp.constructor$ = Function$; RegExp$ = RegExp; objWhitelist(Number, 'toExponential,toFixed,toPrecision'); constWhitelist(Number, 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY'); Number.constructor$ = Function$; Number.prototype.constructor$ = Number; Number$ = Number; objWhitelist(Date, 'getDate,getDay,getFullYear,getHours,getMilliseconds,getMinutes,getMonth,getSeconds,getTime,getTimezoneOffset,getUTCDate,getUTCDay,getUTCFullYear,getUTCHours,getUTCMilliseconds,getUTCMinutes,getUTCMonth,getUTCSeconds,getYear,setDate,setFullYear,setHours,setMilliseconds,setMinutes,setMonth,setSeconds,setTime,setUTCDate,setUTCFullYear,setUTCHours,setUTCMilliseconds,setUTCMinutes,setUTCMonth,setUTCSeconds,setYear,toDateString,toGMTString,toLocaleDateString,toLocaleString,toLocaleTimeString,toTimeString,toUTCString'); Date.prototype.constructor$ = Date; Date.constructor$ = Function$; Date$ = Date; objWhitelist(Math, 'abs,acos,asin,atan,atan2,ceil,cos,exp,floor,log,max,min,pow,random,round,sin,sqrt,tan', true); constWhitelist(Math, 'E,LN10,LN2,LOG10E,LOG2E,PI,SQRT1_2,SQRT2'); Math.constructor$ = Object; Math$ = Math; constWhitelist(window, 'decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,escape,isFinite,isNaN,parseFloat,parseInt,unescape', window); function CLEAR_INTERVAL(id) { id = +id; if ( typeof setIntervalIDS[id] === 'undefined') { return null; } return clearInterval(id); } clearInterval$ = CLEAR_INTERVAL; var CLEAR_TIMEOUT = function(id) { id = +id; if ( typeof setTimeoutIDS[id] === 'undefined') { return null; } return clearTimeout(id); }; clearTimeout$ = CLEAR_TIMEOUT; var SET_TIMEOUT = function(func, time) { time = +time; if ( typeof func !== 'function') { func = FUNCTION(func); } var id = +setTimeout(func, time); setTimeoutIDS[id] = true; return id; }; setTimeout$ = SET_TIMEOUT; var SET_INTERVAL = function(func, time) { time = +time; if ( typeof func !== 'function') { func = FUNCTION(func); } var id = +setInterval(func, time); setIntervalIDS[id] = true; return id; }; setInterval$ = SET_INTERVAL; var ALERT = function(str) { alert(str); }; alert$ = ALERT; var EVAL = function(str) { var js = MentalJS(), converted; if ( typeof str !== 'function') { return eval(js.parse({ options : { eval : false }, code : str, converted : function(converted) { if (config.evalCode) { config.evalCode(converted); } } })); } else { if (config.evalCode) { config.evalCode(str); } return eval(str); } }; eval$ = EVAL; Object.constructor$ = Function$; Object.defineProperty(Object.prototype, 'constructor$', { configurable : true, get : function() { return this.constructor; } }); Object.prototype.hasOwnProperty$ = Object.prototype.hasOwnProperty; objWhitelist(Object, 'valueOf'); objWhitelist(Object, 'toString'); Object$ = Object; Object.defineProperty(Object.prototype, 'prototype$', { configurable : true, get : function() { return this.prototype; }, set : function(obj) { this.prototype = obj; } }); Object.defineProperty(Object.prototype, 'length$', { configurable : true, get : function() { return this.length; }, set : function(len) { this.length = len; } }); Object.preventExtensions(Object.prototype); Object.preventExtensions(Array.prototype); Object.defineProperties(window, { 'undefined$' : { configurable : true, writable : false, value : void 1 }, 'document$' : { configurable : true, writable : false, value : document }, 'Object$' : { configurable : true, writable : false, value : Object }, 'eval$' : { configurable : true, writable : false, value : EVAL }, 'alert$' : { configurable : true, writable : false, value : ALERT }, 'setInterval$' : { configurable : true, writable : false, value : SET_INTERVAL }, 'setTimeout$' : { configurable : true, writable : false, value : SET_TIMEOUT }, 'clearInterval$' : { configurable : true, writable : false, value : CLEAR_INTERVAL }, 'clearTimeout$' : { configurable : true, writable : false, value : CLEAR_TIMEOUT }, 'Math$' : { configurable : true, writable : false, value : Math }, 'Date$' : { configurable : true, writable : false, value : Date }, 'Number$' : { configurable : true, writable : false, value : Number }, 'RegExp$' : { configurable : true, writable : false, value : RegExp }, 'Array$' : { configurable : true, writable : false, value : Array }, 'String$' : { configurable : true, writable : false, value : String }, 'Boolean$' : { configurable : true, writable : false, value : Boolean }, 'Function$' : { configurable : true, writable : false, value : FUNCTION }, 'decodeURI$' : { configurable : true, writable : false, value : decodeURI }, 'decodeURIComponent$' : { configurable : true, writable : false, value : decodeURIComponent }, 'encodeURI$' : { configurable : true, writable : false, value : encodeURI }, 'encodeURIComponent$' : { configurable : true, writable : false, value : encodeURIComponent }, 'escape$' : { configurable : true, writable : false, value : escape }, 'isFinite$' : { configurable : true, writable : false, value : isFinite }, 'isNaN$' : { configurable : true, writable : false, value : isNaN }, 'parseFloat$' : { configurable : true, writable : false, value : parseFloat }, 'parseInt$' : { configurable : true, writable : false, value : parseInt }, 'unescape$' : { configurable : true, writable : false, value : unescape }, 'location$' : { configurable : true, writable : false, value : {} }, 'navigator$' : { configurable : true, writable : false, value : {} }, 'removeEventListener$' : { configurable : true, writable : false, value : function() { return window.removeEventListener.apply(document, arguments); } }, 'addEventListener$' : { configurable : true, writable : false, value : function() { if ( typeof arguments[1] !== 'function') { error("Expected function in event listener"); } return window.addEventListener.apply(window, arguments); } } }); if (config.dom) { Object.defineProperties(window.location$, { 'toString' : { configurable : true, value : function() { return 'http://sandboxed'; } }, 'valueOf' : { configurable : true, value : function() { return 'http://sandboxed'; } }, 'href$' : { configurable : true, get : function() { return 'http://sandboxed'; } }, 'replace$' : { configurable : true, get : function() { return function() { }; } }, 'reload$' : { configurable : true, get : function() { return function() { } } }, 'assign$' : { configurable : true, get : function() { return function() { } } }, 'hash$' : { configurable : true, set : function(hash) { location.hash = hash; }, get : function() { return location.hash } }, 'host$' : { configurable : true, get : function() { return 'sandboxed' } }, 'hostname$' : { configurable : true, get : function() { return 'sandboxed' } }, 'pathname$' : { configurable : true, get : function() { return '/' } }, 'port$' : { configurable : true, get : function() { return '' } }, 'protocol$' : { configurable : true, get : function() { return 'http:' } }, 'search$' : { configurable : true, get : function() { return '' } } }); Object.defineProperties(window.navigator$, { 'appCodeName$' : { configurable : true, get : function() { return navigator.appCodeName } }, 'appName$' : { configurable : true, get : function() { return navigator.appName } }, 'appVersion$' : { configurable : true, get : function() { return navigator.appVersion } }, 'language$' : { configurable : true, get : function() { return navigator.language } }, 'onLine$' : { configurable : true, get : function() { return navigator.onLine } }, 'oscpu$' : { configurable : true, get : function() { return navigator.oscpu } }, 'platform$' : { configurable : true, get : function() { return navigator.platform } }, 'product$' : { configurable : true, get : function() { return navigator.product } }, 'productSub$' : { configurable : true, get : function() { return navigator.productSub } }, 'userAgent$' : { configurable : true, get : function() { return navigator.userAgent } }, 'vendor$' : { configurable : true, get : function() { return navigator.vendor } }, 'vendorSub$' : { configurable : true, get : function() { return navigator.vendorSub } } }); Object.defineProperties(document.documentElement, { 'nodeName$' : { enumerable : false, configurable : true, writable : false, value : document.documentElement.nodeName }, 'contains$' : { enumerable : false, configurable : true, writable : false, value : function() { return document.documentElement.contains.apply(document.documentElement, arguments) } }, 'compareDocumentPosition$' : { enumerable : false, configurable : true, writable : false, value : function() { return document.documentElement.compareDocumentPosition.apply(document.documentElement, arguments) } } }); createSandboxedNode(Element.prototype); createSandboxedNode(DocumentFragment.prototype); Object.defineProperties(HTMLScriptElement.prototype, { 'innerText$' : { configurable : true, get : function() { return this.innerText; }, set : function() { } }, 'textContent$' : { configurable : true, get : function() { return this.textContent; }, set : function() { } }, 'text$' : { configurable : true, get : function() { return this.text; }, set : function() { } }, 'innerHTML$' : { configurable : true, get : function() { return this.innerHTML; }, set : function() { } } }); Object.defineProperties(HTMLStyleElement.prototype, { 'innerText$' : { configurable : true, get : function() { return this.innerText; }, set : function(innerText) { this.innerText = innerText; } }, 'textContent$' : { configurable : true, get : function() { return this.textContent; }, set : function(textContent) { this.textContent = textContent; } }, 'text$' : { configurable : true, get : function() { return this.text; }, set : function(text) { this.text = text; } }, 'innerHTML$' : { configurable : true, get : function() { return this.innerHTML; }, set : function() { } } }); Object.defineProperties(document, { 'ownerDocument$' : { configurable : true, get : function() { return document.ownerDocument; } }, 'nodeName$' : { enumerable : false, configurable : true, writable : false, value : document.nodeName }, 'nodeType$' : { enumerable : false, configurable : true, writable : false, value : document.nodeType }, 'compatMode$' : { enumerable : false, configurable : true, writable : false, value : document.compatMode }, 'head$' : { enumerable : false, configurable : true, writable : false, value : document.head }, 'defaultView$' : { enumerable : false, configurable : true, writable : false, value : window }, 'documentElement$' : { enumerable : false, configurable : true, writable : false, value : document.documentElement }, 'readyState$' : { enumerable : false, configurable : true, writable : false, value : document.readyState }, 'body$' : { enumerable : false, configurable : true, writable : false, value : document.body }, 'createTextNode$' : { enumerable : false, configurable : true, writable : false, value : function() { return document.createTextNode.apply(document, arguments) } }, 'createDocumentFragment$' : { enumerable : false, configurable : true, writable : false, value : document.createDocumentFragment }, 'getElementById$' : { enumerable : false, configurable : true, writable : false, value : function() { return document.getElementById.apply(document, arguments) } }, 'getElementsByTagName$' : { enumerable : false, configurable : true, writable : false, value : function() { return document.getElementsByTagName.apply(document, arguments) } }, 'querySelector$' : { enumerable : false, configurable : true, writable : false, value : function() { return document.querySelector.apply(document, arguments) } }, 'querySelectorAll$' : { enumerable : false, configurable : true, writable : false, value : function() { return document.querySelectorAll.apply(document, arguments) } }, 'createElement$' : { enumerable : false, configurable : true, writable : false, value : function(tag) { if (!allowedTagsRegEx.test(tag)) { return false; } return document.createElement.call(document, tag); } }, 'removeEventListener$' : { enumerable : false, configurable : true, writable : false, value : function() { return document.removeEventListener.apply(document, arguments); } }, 'addEventListener$' : { enumerable : false, configurable : true, writable : false, value : function() { if ( typeof arguments[1] != 'function') { error("Expected function in event listener") } return document.addEventListener.apply(document, arguments); } } }); Object.freeze(Element.prototype); Object.freeze(DocumentFragment.prototype); Object.freeze(HTMLScriptElement.prototype); Object.freeze(HTMLStyleElement.prototype); } }; this.parse = function(obj) { if (!Object.defineProperty) { error("MentalJS requires ES5. Please upgrade your browser."); } var parseTreeOutput = '', converted, pos = 0, chr, index, result; function error(str) { var e = new Error(); throw { msg : str + (e.stack ? ' - ' + e.stack : ''), pos : pos, chr : typeof chr === 'undefined' ? '(end)' : chr, state : parseTreeOutput, text : code.slice(pos - 10, pos + 10), code : this.code }; } function execute(code) { var result; window['window' + scoping] = this; result = eval(code); if (that.result) { that.result(result); } return result; } function rewrite(code) { this.code = code; var parentState, parentStates = {}, msg, state = 89, left = 0, output = '', outputLine = '', next, next2, next3, cached = -1, len = code.length, parseTree = that.parseTree, lookupSquare = 1, lookupCurly = 1, lookupParen = 1, ternaryCount = 0, isTernary = {}, caseCount = 0, isCase = {}, isVar = {}, isFor = {}, isForIn = {}, isIf = {}, isObjectLiteral = {}, lastState = 89, newLineFlag = 0, parseTreeFlag = !!that.parseTree, completeFlag = !!that.complete, convertedFlag = !!that.converted, foundKeyword = 0, commentSkip = 0; function asi(useOutput) { var parenIndex = lookupParen - 1, index1 = parseFloat('' + lookupSquare + lookupCurly + parenIndex), index2 = parseFloat('' + lookupSquare + lookupCurly + lookupParen); if (isFor[index1] && !isForIn[index1]) { lastState = 45; if (useOutput) { output += ';'; } else { outputLine += ';'; } if (isFor[index1] > 2) { error("Syntax error unexpected for semi ;"); } isFor[index1]++; isVar[index2] = 0; } else { if (useOutput) { output += ';'; } else { outputLine = ';' + outputLine; } lastState = 35; left = 0; isVar[index2] = 0; } }; function isValidVariable(c) { return c === 170 || c === 181 || c === 186 || c > 191 && c < 215 || c > 215 && c < 247 || c > 247 && c < 706 || c > 709 && c < 722 || c > 735 && c < 741 || c === 748 || c === 750 || c > 879 && c < 885 || c > 885 && c < 888 || c > 889 && c < 894 || c === 902 || c > 903 && c < 907 || c === 908 || c > 909 && c < 930 || c > 930 && c < 1014 || c > 1014 && c < 1154 || c > 1161 && c < 1320 || c > 1328 && c < 1367 || c === 1369 || c > 1376 && c < 1416 || c > 1487 && c < 1515 || c > 1519 && c < 1523 || c > 1567 && c < 1611 || c > 1645 && c < 1648 || c > 1648 && c < 1748 || c === 1749 || c > 1764 && c < 1767 || c > 1773 && c < 1776 || c > 1785 && c < 1789 || c === 1791 || c === 1808 || c > 1809 && c < 1840 || c > 1868 && c < 1958 || c === 1969 || c > 1993 && c < 2027 || c > 2035 && c < 2038 || c === 2042 || c > 2047 && c < 2070 || c === 2074 || c === 2084 || c === 2088 || c > 2111 && c < 2137 || c === 2208 || c > 2209 && c < 2221 || c > 2307 && c < 2362 || c === 2365 || c === 2384 || c > 2391 && c < 2402 || c > 2416 && c < 2424 || c > 2424 && c < 2432 || c > 2436 && c < 2445 || c > 2446 && c < 2449 || c > 2450 && c < 2473 || c > 2473 && c < 2481 || c === 2482 || c > 2485 && c < 2490 || c === 2493 || c === 2510 || c > 2523 && c < 2526 || c > 2526 && c < 2530 || c > 2543 && c < 2546 || c > 2564 && c < 2571 || c > 2574 && c < 2577 || c > 2578 && c < 2601 || c > 2601 && c < 2609 || c > 2609 && c < 2612 || c > 2612 && c < 2615 || c > 2615 && c < 2618 || c > 2648 && c < 2653 || c === 2654 || c > 2673 && c < 2677 || c > 2692 && c < 2702 || c > 2702 && c < 2706 || c > 2706 && c < 2729 || c > 2729 && c < 2737 || c > 2737 && c < 2740 || c > 2740 && c < 2746 || c === 2749 || c === 2768 || c > 2783 && c < 2786 || c > 2820 && c < 2829 || c > 2830 && c < 2833 || c > 2834 && c < 2857 || c > 2857 && c < 2865 || c > 2865 && c < 2868 || c > 2868 && c < 2874 || c === 2877 || c > 2907 && c < 2910 || c > 2910 && c < 2914 || c === 2929 || c === 2947 || c > 2948 && c < 2955 || c > 2957 && c < 2961 || c > 2961 && c < 2966 || c > 2968 && c < 2971 || c === 2972 || c > 2973 && c < 2976 || c > 2978 && c < 2981 || c > 2983 && c < 2987 || c > 2989 && c < 3002 || c === 3024 || c > 3076 && c < 3085 || c > 3085 && c < 3089 || c > 3089 && c < 3113 || c > 3113 && c < 3124 || c > 3124 && c < 3130 || c === 3133 || c > 3159 && c < 3162 || c > 3167 && c < 3170 || c > 3204 && c < 3213 || c > 3213 && c < 3217 || c > 3217 && c < 3241 || c > 3241 && c < 3252 || c > 3252 && c < 3258 || c === 3261 || c === 3294 || c > 3295 && c < 3298 || c > 3312 && c < 3315 || c > 3332 && c < 3341 || c > 3341 && c < 3345 || c > 3345 && c < 3387 || c === 3389 || c === 3406 || c > 3423 && c < 3426 || c > 3449 && c < 3456 || c > 3460 && c < 3479 || c > 3481 && c < 3506 || c > 3506 && c < 3516 || c === 3517 || c > 3519 && c < 3527 || c > 3584 && c < 3633 || c > 3633 && c < 3636 || c > 3647 && c < 3655 || c > 3712 && c < 3715 || c === 3716 || c > 3718 && c < 3721 || c === 3722 || c === 3725 || c > 3731 && c < 3736 || c > 3736 && c < 3744 || c > 3744 && c < 3748 || c === 3749 || c === 3751 || c > 3753 && c < 3756 || c > 3756 && c < 3761 || c > 3761 && c < 3764 || c === 3773 || c > 3775 && c < 3781 || c === 3782 || c > 3803 && c < 3808 || c === 3840 || c > 3903 && c < 3912 || c > 3912 && c < 3949 || c > 3975 && c < 3981 || c > 4095 && c < 4139 || c === 4159 || c > 4175 && c < 4182 || c > 4185 && c < 4190 || c === 4193 || c > 4196 && c < 4199 || c > 4205 && c < 4209 || c > 4212 && c < 4226 || c === 4238 || c > 4255 && c < 4294 || c === 4295 || c === 4301 || c > 4303 && c < 4347 || c > 4347 && c < 4681 || c > 4681 && c < 4686 || c > 4687 && c < 4695 || c === 4696 || c > 4697 && c < 4702 || c > 4703 && c < 4745 || c > 4745 && c < 4750 || c > 4751 && c < 4785 || c > 4785 && c < 4790 || c > 4791 && c < 4799 || c === 4800 || c > 4801 && c < 4806 || c > 4807 && c < 4823 || c > 4823 && c < 4881 || c > 4881 && c < 4886 || c > 4887 && c < 4955 || c > 4991 && c < 5008 || c > 5023 && c < 5109 || c > 5120 && c < 5741 || c > 5742 && c < 5760 || c > 5760 && c < 5787 || c > 5791 && c < 5867 || c > 5869 && c < 5873 || c > 5887 && c < 5901 || c > 5901 && c < 5906 || c > 5919 && c < 5938 || c > 5951 && c < 5970 || c > 5983 && c < 5997 || c > 5997 && c < 6001 || c > 6015 && c < 6068 || c === 6103 || c === 6108 || c > 6175 && c < 6264 || c > 6271 && c < 6313 || c === 6314 || c > 6319 && c < 6390 || c > 6399 && c < 6429 || c > 6479 && c < 6510 || c > 6511 && c < 6517 || c > 6527 && c < 6572 || c > 6592 && c < 6600 || c > 6655 && c < 6679 || c > 6687 && c < 6741 || c === 6823 || c > 6916 && c < 6964 || c > 6980 && c < 6988 || c > 7042 && c < 7073 || c > 7085 && c < 7088 || c > 7097 && c < 7142 || c > 7167 && c < 7204 || c > 7244 && c < 7248 || c > 7257 && c < 7294 || c > 7400 && c < 7405 || c > 7405 && c < 7410 || c > 7412 && c < 7415 || c > 7423 && c < 7616 || c > 7679 && c < 7958 || c > 7959 && c < 7966 || c > 7967 && c < 8006 || c > 8007 && c < 8014 || c > 8015 && c < 8024 || c === 8025 || c === 8027 || c === 8029 || c > 8030 && c < 8062 || c > 8063 && c < 8117 || c > 8117 && c < 8125 || c === 8126 || c > 8129 && c < 8133 || c > 8133 && c < 8141 || c > 8143 && c < 8148 || c > 8149 && c < 8156 || c > 8159 && c < 8173 || c > 8177 && c < 8181 || c > 8181 && c < 8189 || c === 8305 || c === 8319 || c > 8335 && c < 8349 || c === 8450 || c === 8455 || c > 8457 && c < 8468 || c === 8469 || c > 8472 && c < 8478 || c === 8484 || c === 8486 || c === 8488 || c > 8489 && c < 8494 || c > 8494 && c < 8506 || c > 8507 && c < 8512 || c > 8516 && c < 8522 || c === 8526 || c > 8543 && c < 8585 || c > 11263 && c < 11311 || c > 11311 && c < 11359 || c > 11359 && c < 11493 || c > 11498 && c < 11503 || c > 11505 && c < 11508 || c > 11519 && c < 11558 || c === 11559 || c === 11565 || c > 11567 && c < 11624 || c === 11631 || c > 11647 && c < 11671 || c > 11679 && c < 11687 || c > 11687 && c < 11695 || c > 11695 && c < 11703 || c > 11703 && c < 11711 || c > 11711 && c < 11719 || c > 11719 && c < 11727 || c > 11727 && c < 11735 || c > 11735 && c < 11743 || c === 11823 || c > 12292 && c < 12296 || c > 12320 && c < 12330 || c > 12336 && c < 12342 || c > 12343 && c < 12349 || c > 12352 && c < 12439 || c > 12444 && c < 12448 || c > 12448 && c < 12539 || c > 12539 && c < 12544 || c > 12548 && c < 12590 || c > 12592 && c < 12687 || c > 12703 && c < 12731 || c > 12783 && c < 12800 || c > 13311 && c < 19894 || c > 19967 && c < 40909 || c > 40959 && c < 42125 || c > 42191 && c < 42238 || c > 42239 && c < 42509 || c > 42511 && c < 42528 || c > 42537 && c < 42540 || c > 42559 && c < 42607 || c > 42622 && c < 42648 || c > 42655 && c < 42736 || c > 42774 && c < 42784 || c > 42785 && c < 42889 || c > 42890 && c < 42895 || c > 42895 && c < 42900 || c > 42911 && c < 42923 || c > 42999 && c < 43010 || c > 43010 && c < 43014 || c > 43014 && c < 43019 || c > 43019 && c < 43043 || c > 43071 && c < 43124 || c > 43137 && c < 43188 || c > 43249 && c < 43256 || c === 43259 || c > 43273 && c < 43302 || c > 43311 && c < 43335 || c > 43359 && c < 43389 || c > 43395 && c < 43443 || c === 43471 || c > 43519 && c < 43561 || c > 43583 && c < 43587 || c > 43587 && c < 43596 || c > 43615 && c < 43639 || c === 43642 || c > 43647 && c < 43696 || c === 43697 || c > 43700 && c < 43703 || c > 43704 && c < 43710 || c === 43712 || c === 43714 || c > 43738 && c < 43742 || c > 43743 && c < 43755 || c > 43761 && c < 43765 || c > 43776 && c < 43783 || c > 43784 && c < 43791 || c > 43792 && c < 43799 || c > 43807 && c < 43815 || c > 43815 && c < 43823 || c > 43967 && c < 44003 || c > 44031 && c < 55204 || c > 55215 && c < 55239 || c > 55242 && c < 55292 || c > 63743 && c < 64110 || c > 64111 && c < 64218 || c > 64255 && c < 64263 || c > 64274 && c < 64280 || c === 64285 || c > 64286 && c < 64297 || c > 64297 && c < 64311 || c > 64311 && c < 64317 || c === 64318 || c > 64319 && c < 64322 || c > 64322 && c < 64325 || c > 64325 && c < 64434 || c > 64466 && c < 64830 || c > 64847 && c < 64912 || c > 64913 && c < 64968 || c > 65007 && c < 65020 || c > 65135 && c < 65141 || c > 65141 && c < 65277 || c > 65312 && c < 65339 || c > 65344 && c < 65371 || c > 65381 && c < 65471 || c > 65473 && c < 65480 || c > 65481 && c < 65488 || c > 65489 && c < 65496 || c > 65497 && c < 65501; } function isValidVariablePart(c) { return c === 170 || c === 181 || c === 186 || c > 191 && c < 215 || c > 215 && c < 247 || c > 247 && c < 706 || c > 709 && c < 722 || c > 735 && c < 741 || c === 748 || c === 750 || c > 767 && c < 885 || c > 885 && c < 888 || c > 889 && c < 894 || c === 902 || c > 903 && c < 907 || c === 908 || c > 909 && c < 930 || c > 930 && c < 1014 || c > 1014 && c < 1154 || c > 1154 && c < 1160 || c > 1161 && c < 1320 || c > 1328 && c < 1367 || c === 1369 || c > 1376 && c < 1416 || c > 1424 && c < 1470 || c === 1471 || c > 1472 && c < 1475 || c > 1475 && c < 1478 || c === 1479 || c > 1487 && c < 1515 || c > 1519 && c < 1523 || c > 1551 && c < 1563 || c > 1567 && c < 1642 || c > 1645 && c < 1748 || c > 1748 && c < 1757 || c > 1758 && c < 1769 || c > 1769 && c < 1789 || c === 1791 || c > 1807 && c < 1867 || c > 1868 && c < 1970 || c > 1983 && c < 2038 || c === 2042 || c > 2047 && c < 2094 || c > 2111 && c < 2140 || c === 2208 || c > 2209 && c < 2221 || c > 2275 && c < 2303 || c > 2303 && c < 2404 || c > 2405 && c < 2416 || c > 2416 && c < 2424 || c > 2424 && c < 2432 || c > 2432 && c < 2436 || c > 2436 && c < 2445 || c > 2446 && c < 2449 || c > 2450 && c < 2473 || c > 2473 && c < 2481 || c === 2482 || c > 2485 && c < 2490 || c > 2491 && c < 2501 || c > 2502 && c < 2505 || c > 2506 && c < 2511 || c === 2519 || c > 2523 && c < 2526 || c > 2526 && c < 2532 || c > 2533 && c < 2546 || c > 2560 && c < 2564 || c > 2564 && c < 2571 || c > 2574 && c < 2577 || c > 2578 && c < 2601 || c > 2601 && c < 2609 || c > 2609 && c < 2612 || c > 2612 && c < 2615 || c > 2615 && c < 2618 || c === 2620 || c > 2621 && c < 2627 || c > 2630 && c < 2633 || c > 2634 && c < 2638 || c === 2641 || c > 2648 && c < 2653 || c === 2654 || c > 2661 && c < 2678 || c > 2688 && c < 2692 || c > 2692 && c < 2702 || c > 2702 && c < 2706 || c > 2706 && c < 2729 || c > 2729 && c < 2737 || c > 2737 && c < 2740 || c > 2740 && c < 2746 || c > 2747 && c < 2758 || c > 2758 && c < 2762 || c > 2762 && c < 2766 || c === 2768 || c > 2783 && c < 2788 || c > 2789 && c < 2800 || c > 2816 && c < 2820 || c > 2820 && c < 2829 || c > 2830 && c < 2833 || c > 2834 && c < 2857 || c > 2857 && c < 2865 || c > 2865 && c < 2868 || c > 2868 && c < 2874 || c > 2875 && c < 2885 || c > 2886 && c < 2889 || c > 2890 && c < 2894 || c > 2901 && c < 2904 || c > 2907 && c < 2910 || c > 2910 && c < 2916 || c > 2917 && c < 2928 || c === 2929 || c > 2945 && c < 2948 || c > 2948 && c < 2955 || c > 2957 && c < 2961 || c > 2961 && c < 2966 || c > 2968 && c < 2971 || c === 2972 || c > 2973 && c < 2976 || c > 2978 && c < 2981 || c > 2983 && c < 2987 || c > 2989 && c < 3002 || c > 3005 && c < 3011 || c > 3013 && c < 3017 || c > 3017 && c < 3022 || c === 3024 || c === 3031 || c > 3045 && c < 3056 || c > 3072 && c < 3076 || c > 3076 && c < 3085 || c > 3085 && c < 3089 || c > 3089 && c < 3113 || c > 3113 && c < 3124 || c > 3124 && c < 3130 || c > 3132 && c < 3141 || c > 3141 && c < 3145 || c > 3145 && c < 3150 || c > 3156 && c < 3159 || c > 3159 && c < 3162 || c > 3167 && c < 3172 || c > 3173 && c < 3184 || c > 3201 && c < 3204 || c > 3204 && c < 3213 || c > 3213 && c < 3217 || c > 3217 && c < 3241 || c > 3241 && c < 3252 || c > 3252 && c < 3258 || c > 3259 && c < 3269 || c > 3269 && c < 3273 || c > 3273 && c < 3278 || c > 3284 && c < 3287 || c === 3294 || c > 3295 && c < 3300 || c > 3301 && c < 3312 || c > 3312 && c < 3315 || c > 3329 && c < 3332 || c > 3332 && c < 3341 || c > 3341 && c < 3345 || c > 3345 && c < 3387 || c > 3388 && c < 3397 || c > 3397 && c < 3401 || c > 3401 && c < 3407 || c === 3415 || c > 3423 && c < 3428 || c > 3429 && c < 3440 || c > 3449 && c < 3456 || c > 3457 && c < 3460 || c > 3460 && c < 3479 || c > 3481 && c < 3506 || c > 3506 && c < 3516 || c === 3517 || c > 3519 && c < 3527 || c === 3530 || c > 3534 && c < 3541 || c === 3542 || c > 3543 && c < 3552 || c > 3569 && c < 3572 || c > 3584 && c < 3643 || c > 3647 && c < 3663 || c > 3663 && c < 3674 || c > 3712 && c < 3715 || c === 3716 || c > 3718 && c < 3721 || c === 3722 || c === 3725 || c > 3731 && c < 3736 || c > 3736 && c < 3744 || c > 3744 && c < 3748 || c === 3749 || c === 3751 || c > 3753 && c < 3756 || c > 3756 && c < 3770 || c > 3770 && c < 3774 || c > 3775 && c < 3781 || c === 3782 || c > 3783 && c < 3790 || c > 3791 && c < 3802 || c > 3803 && c < 3808 || c === 3840 || c > 3863 && c < 3866 || c > 3871 && c < 3882 || c === 3893 || c === 3895 || c === 3897 || c > 3901 && c < 3912 || c > 3912 && c < 3949 || c > 3952 && c < 3973 || c > 3973 && c < 3992 || c > 3992 && c < 4029 || c === 4038 || c > 4095 && c < 4170 || c > 4175 && c < 4254 || c > 4255 && c < 4294 || c === 4295 || c === 4301 || c > 4303 && c < 4347 || c > 4347 && c < 4681 || c > 4681 && c < 4686 || c > 4687 && c < 4695 || c === 4696 || c > 4697 && c < 4702 || c > 4703 && c < 4745 || c > 4745 && c < 4750 || c > 4751 && c < 4785 || c > 4785 && c < 4790 || c > 4791 && c < 4799 || c === 4800 || c > 4801 && c < 4806 || c > 4807 && c < 4823 || c > 4823 && c < 4881 || c > 4881 && c < 4886 || c > 4887 && c < 4955 || c > 4956 && c < 4960 || c > 4991 && c < 5008 || c > 5023 && c < 5109 || c > 5120 && c < 5741 || c > 5742 && c < 5760 || c > 5760 && c < 5787 || c > 5791 && c < 5867 || c > 5869 && c < 5873 || c > 5887 && c < 5901 || c > 5901 && c < 5909 || c > 5919 && c < 5941 || c > 5951 && c < 5972 || c > 5983 && c < 5997 || c > 5997 && c < 6001 || c > 6001 && c < 6004 || c > 6015 && c < 6100 || c === 6103 || c > 6107 && c < 6110 || c > 6111 && c < 6122 || c > 6154 && c < 6158 || c > 6159 && c < 6170 || c > 6175 && c < 6264 || c > 6271 && c < 6315 || c > 6319 && c < 6390 || c > 6399 && c < 6429 || c > 6431 && c < 6444 || c > 6447 && c < 6460 || c > 6469 && c < 6510 || c > 6511 && c < 6517 || c > 6527 && c < 6572 || c > 6575 && c < 6602 || c > 6607 && c < 6618 || c > 6655 && c < 6684 || c > 6687 && c < 6751 || c > 6751 && c < 6781 || c > 6782 && c < 6794 || c > 6799 && c < 6810 || c === 6823 || c > 6911 && c < 6988 || c > 6991 && c < 7002 || c > 7018 && c < 7028 || c > 7039 && c < 7156 || c > 7167 && c < 7224 || c > 7231 && c < 7242 || c > 7244 && c < 7294 || c > 7375 && c < 7379 || c > 7379 && c < 7415 || c > 7423 && c < 7655 || c > 7675 && c < 7958 || c > 7959 && c < 7966 || c > 7967 && c < 8006 || c > 8007 && c < 8014 || c > 8015 && c < 8024 || c === 8025 || c === 8027 || c === 8029 || c > 8030 && c < 8062 || c > 8063 && c < 8117 || c > 8117 && c < 8125 || c === 8126 || c > 8129 && c < 8133 || c > 8133 && c < 8141 || c > 8143 && c < 8148 || c > 8149 && c < 8156 || c > 8159 && c < 8173 || c > 8177 && c < 8181 || c > 8181 && c < 8189 || c > 8203 && c < 8206 || c > 8254 && c < 8257 || c === 8276 || c === 8305 || c === 8319 || c > 8335 && c < 8349 || c > 8399 && c < 8413 || c === 8417 || c > 8420 && c < 8433 || c === 8450 || c === 8455 || c > 8457 && c < 8468 || c === 8469 || c > 8472 && c < 8478 || c === 8484 || c === 8486 || c === 8488 || c > 8489 && c < 8494 || c > 8494 && c < 8506 || c > 8507 && c < 8512 || c > 8516 && c < 8522 || c === 8526 || c > 8543 && c < 8585 || c > 11263 && c < 11311 || c > 11311 && c < 11359 || c > 11359 && c < 11493 || c > 11498 && c < 11508 || c > 11519 && c < 11558 || c === 11559 || c === 11565 || c > 11567 && c < 11624 || c === 11631 || c > 11646 && c < 11671 || c > 11679 && c < 11687 || c > 11687 && c < 11695 || c > 11695 && c < 11703 || c > 11703 && c < 11711 || c > 11711 && c < 11719 || c > 11719 && c < 11727 || c > 11727 && c < 11735 || c > 11735 && c < 11743 || c > 11743 && c < 11776 || c === 11823 || c > 12292 && c < 12296 || c > 12320 && c < 12336 || c > 12336 && c < 12342 || c > 12343 && c < 12349 || c > 12352 && c < 12439 || c > 12440 && c < 12443 || c > 12444 && c < 12448 || c > 12448 && c < 12539 || c > 12539 && c < 12544 || c > 12548 && c < 12590 || c > 12592 && c < 12687 || c > 12703 && c < 12731 || c > 12783 && c < 12800 || c > 13311 && c < 19894 || c > 19967 && c < 40909 || c > 40959 && c < 42125 || c > 42191 && c < 42238 || c > 42239 && c < 42509 || c > 42511 && c < 42540 || c > 42559 && c < 42608 || c > 42611 && c < 42622 || c > 42622 && c < 42648 || c > 42654 && c < 42738 || c > 42774 && c < 42784 || c > 42785 && c < 42889 || c > 42890 && c < 42895 || c > 42895 && c < 42900 || c > 42911 && c < 42923 || c > 42999 && c < 43048 || c > 43071 && c < 43124 || c > 43135 && c < 43205 || c > 43215 && c < 43226 || c > 43231 && c < 43256 || c === 43259 || c > 43263 && c < 43310 || c > 43311 && c < 43348 || c > 43359 && c < 43389 || c > 43391 && c < 43457 || c > 43470 && c < 43482 || c > 43519 && c < 43575 || c > 43583 && c < 43598 || c > 43599 && c < 43610 || c > 43615 && c < 43639 || c > 43641 && c < 43644 || c > 43647 && c < 43715 || c > 43738 && c < 43742 || c > 43743 && c < 43760 || c > 43761 && c < 43767 || c > 43776 && c < 43783 || c > 43784 && c < 43791 || c > 43792 && c < 43799 || c > 43807 && c < 43815 || c > 43815 && c < 43823 || c > 43967 && c < 44011 || c > 44011 && c < 44014 || c > 44015 && c < 44026 || c > 44031 && c < 55204 || c > 55215 && c < 55239 || c > 55242 && c < 55292 || c > 63743 && c < 64110 || c > 64111 && c < 64218 || c > 64255 && c < 64263 || c > 64274 && c < 64280 || c > 64284 && c < 64297 || c > 64297 && c < 64311 || c > 64311 && c < 64317 || c === 64318 || c > 64319 && c < 64322 || c > 64322 && c < 64325 || c > 64325 && c < 64434 || c > 64466 && c < 64830 || c > 64847 && c < 64912 || c > 64913 && c < 64968 || c > 65007 && c < 65020 || c > 65023 && c < 65040 || c > 65055 && c < 65063 || c > 65074 && c < 65077 || c > 65100 && c < 65104 || c > 65135 && c < 65141 || c > 65141 && c < 65277 || c > 65295 && c < 65306 || c > 65312 && c < 65339 || c === 65343 || c > 65344 && c < 65371 || c > 65381 && c < 65471 || c > 65473 && c < 65480 || c > 65481 && c < 65488 || c > 65489 && c < 65496 || c > 65497 && c < 65501; } function unicodeEscape(first) { pos++; var chr1 = code.charCodeAt(pos), chr2 = code.charAt(pos + 1), chr3 = code.charAt(pos + 2), chr4 = code.charAt(pos + 3), chr5 = code.charAt(pos + 4), hex; if (chr1 !== 0x75) { error("Invalid unicode escape. Expected u."); } hex = +('0x' + chr2 + chr3 + chr4 + chr5); if ((hex === hex && hex !== hex) || /[^a-f0-9]/i.test(''+chr2+chr3+chr4+chr5)) { error("Invalid unicode escape. Expected valid hex sequence."); } if (first) { if (hex > 0x60 && hex < 0x7b) { } else if (hex > 0x40 && hex < 0x5b) { } else if (hex === 0x5f || hex === 0x24) { } else if (!isValidVariable(hex)) { error('illegal unicode escape'); } } else { if (hex > 0x60 && hex < 0x7b) { } else if (hex > 0x2f && hex < 0x3a) { } else if (hex > 0x40 && hex < 0x5b) { } else if (hex === 0x5f || hex === 0x24) { } else if (!isValidVariablePart(hex)) { error('illegal unicode escape'); } } pos += 5; if (first) { if (pos < len) { outputLine += '\\u' + chr2 + chr3 + chr4 + chr5; nonKeyword(); return false; } else { outputLine += '\\u' + chr2 + chr3 + chr4 + chr5 + '$'; identifierStates(); identifierAsi(); } } else { outputLine += '\\u' + chr2 + chr3 + chr4 + chr5; } } function keyword(iLen) { state = -1; index = parseFloat('' + lookupSquare + lookupCurly + lookupParen); left = 0; switch(iLen) { case 2: if (outputLine === 'do') { state = 18; outputLine += ' '; } else if (outputLine === 'in') { state = 73; outputLine = ' ' + outputLine + ' '; if (isFor[index]) { isForIn[index] = 1; } } else if (outputLine === 'if') { state = 68; if (lastState === 32) { outputLine = ' ' + outputLine; } isIf[index] = 1; } break; case 3: if (outputLine === 'var') { if (!rules[136][lastState]) { asi(); } state = 136; outputLine += ' '; isVar[index] = 1; } else if (outputLine === 'new') { state = 84; outputLine += ' '; } else if (outputLine === 'NaN') { state = 83; left = 1; } else if (outputLine === 'for') { state = 40; outputLine += ' '; isFor[index] = 1; } else if (outputLine === 'try') { state = 127; } break; case 4: if (outputLine === 'else') { if (!isIf[index]) { error("Syntax error unexpected else"); } state = 32; outputLine += ' '; } else if (outputLine === 'this') { state = 124; left = 1; } else if (outputLine === 'void') { state = 139; outputLine += ' '; } else if (outputLine === 'case') { state = 15; outputLine += ' '; isCase[index] = 1; caseCount++; } else if (outputLine === 'null') { state = 86; left = 1; } else if (outputLine === 'true') { state = 130; left = 1; } else if (outputLine === 'with') { state = 140; } break; case 5: if (outputLine === 'throw') { state = 131; outputLine += ' '; } else if (outputLine === 'break') { state = 14; outputLine += ' '; } else if (outputLine === 'false') { state = 36; left = 1; } else if (outputLine === 'catch') { state = 22; } else if (outputLine === 'while') { state = 145; } break; case 6: if (outputLine === 'delete') { state = 17; outputLine += ' '; } else if (outputLine === 'return') { state = 111; outputLine += ' '; } else if (outputLine === 'typeof') { state = 132; outputLine += ' '; } else if (outputLine === 'switch') { state = 118; } break; case 7: if (outputLine === 'default') { state = 16; } else if (outputLine === 'finally') { state = 37; } break; default: if (outputLine === 'function') { if (rules[52][lastState]) { state = 52; } else if (rules[60][lastState]) { state = 60; } else { if (!rules[67][lastState] && newLineFlag) { asi(); state = 60; } else { error('Unexpected function. Cannot follow ' + rulesLookup[lastState] + '.Output:' + output); } } } else if (outputLine === 'Infinity') { state = 74; left = 1; } else if (outputLine === 'continue') { state = 29; outputLine += ' '; } else if (outputLine === 'instanceof') { state = 75; left = 1; outputLine = ' ' + outputLine + ' '; } break; } if (state > -1) { return true; } else { return false; } } function identifierAsi() { if (!rules[state][lastState] && newLineFlag) { if (left) { asi(true); left = 1; } else { asi(true); } } } function identifier() { var iLen, notKeyword = false; while (pos < len) { chr = code.charCodeAt(pos); if (chr > 0x60 && chr < 0x7b) { } else if (chr > 0x40 && chr < 0x5b) { } else if (chr > 0x2f && chr < 0x3a) { nonKeyword(); return false; } else if (chr === 0x5f || chr === 0x24) { nonKeyword(); return false; } else if (chr === 0x5c) { unicodeEscape(); nonKeyword(); return false; } else { break; } outputLine += code.charAt(pos++); } iLen = outputLine.length; if (iLen === 1 || iLen > 10) { outputLine = outputLine + scoping; identifierStates(); return false; } else { if (!keyword(iLen)) { outputLine = outputLine + scoping; identifierStates(); return false; } } identifierAsi(); } function identifierStates() { if (rules[50][lastState]) { state = 50; outputLine = ' ' + outputLine; } else if (rules[25][lastState]) { state = 25; } else if (rules[98][lastState]) { state = 98; } else if (rules[53][lastState]) { state = 53; outputLine = ' ' + outputLine; } else if (rules[48][lastState]) { state = 48; } else if (rules[55][lastState]) { state = 55; } else if (rules[137][lastState]) { state = 137; left = 1; } else if (rules[67][lastState]) { state = 67; left = 1; } else { if (!rules[67][lastState] && newLineFlag) { asi(true); } state = 67; left = 1; } } function nonKeyword() { while (pos < len) { chr = code.charCodeAt(pos); if (chr > 0x60 && chr < 0x7b) { } else if (chr > 0x2f && chr < 0x3a) { } else if (chr > 0x40 && chr < 0x5b) { } else if (chr === 0x5f || chr === 0x24) { } else if (chr === 0x5c) { unicodeEscape(); continue; } else if (chr > 0x80) { if (!isValidVariablePart(chr)) { break; } } else { break; } outputLine += code.charAt(pos++); } outputLine = outputLine + scoping; identifierStates(); identifierAsi(); } function newLine() { newLineFlag = 1; pos++; if (lastState === 14 || lastState === 29 || lastState === 111) { asi(true); } } function semicolon() { var parentState = parentStates[index], parenIndex = lookupParen - 1, index2 = parseFloat('' + lookupSquare + lookupCurly + parenIndex); index = parseFloat('' + lookupSquare + lookupCurly + lookupParen) if (isFor[index2] && !isForIn[index2]) { state = 45; outputLine += ';'; if (isFor[index2] > 2) { error("Syntax error unexpected for semi ;"); } isFor[index2]++; isVar[index] = 0; } else { state = 35; if (lastState !== 35) { outputLine += ';'; } isVar[index] = 0; } pos++; left = 0; } function plus() { next = code.charCodeAt(pos + 1); cached = -1; if (next === 0x2b && left) { state = 107; outputLine += '++'; pos += 2; left = 1; } else if (next === 0x2b && !left) { state = 110; outputLine += '++'; pos += 2; left = 0; } else if (next === 0x3d) { state = 6; outputLine += '+='; pos += 2; left = 0; } else if (next !== 0x3d && next !== 0x2b && left) { state = 5; outputLine += ' + '; pos++; cached = next; left = 0; } else if (next !== 0x3d && next !== 0x2b && !left) { state = 133; outputLine += '+'; pos++; cached = next; left = 0; } else { error('Unexpected + Cannot follow ' + rulesLookup[lastState] + '.Output:' + output); } } function nonStandardComment() { while (pos < len) { chr = code.charCodeAt(pos++); if (chr === 10 || chr === 13 || chr === 8232 || chr == 8233) { break; } } cached = -1; newLineFlag = 1; commentSkip = 1; } function singleComment() { pos += 2; while (pos < len) { chr = code.charCodeAt(pos++); if (chr === 10 || chr === 13 || chr === 8232 || chr == 8233) { break; } } cached = -1; newLineFlag = 1; } function multiComment() { pos += 2; pos = code.indexOf('*/', pos); if (pos >= 0) { pos += 2; } else { error('Unterminated comment'); } cached = -1; } function regex() { var states = { escaping : 0, complete : 0, open : 0, square : 0, flags : {} }; cached = -1; state = 112; left = 1; states.open = 1; outputLine += '/'; pos++; while (pos < len) { if (cached >= 0) { chr = cached; } else { chr = code.charCodeAt(pos); } next = code.charCodeAt(pos + 1); cached = -1; if (chr === 0x2f && !states.escaping && !states.square) { states.open = 0; if (next !== 0x69 && next !== 0x6d && next !== 0x67) { states.complete = 1; } } else if (chr === 0x2f && !states.escaping && states.square) { outputLine += '\\'; } else if (chr === 0x28 && !states.escaping && states.square) { outputLine += '\\'; } else if (chr === 0x29 && !states.escaping && states.square) { outputLine += '\\'; } else if (chr === 0x5b && !states.escaping && states.square) { outputLine += '\\'; } else if (chr === 0x5b && !states.escaping && !states.square) { next2 = code.charCodeAt(pos + 2); if (next === 0x5d || (next === 0x5e && next2 === 0x5d)) { error("Empty character class not allowed."); } states.square = 1; } else if (chr === 0x5c && !states.escaping) { states.escaping = 1; } else if (chr === 0x5c && states.escaping) { states.escaping = 0; } else if (chr === 0x5d && !states.escaping) { states.square = 0; } else if (chr === 10 || chr === 13 || chr === 8232 || chr == 8233) { error("Unterminated regex literal"); } else if (states.escaping) { states.escaping = 0; } else if (!states.open && next !== 0x69 && next !== 0x6d && next !== 0x67) { if (!states.open && (chr === 0x69 || chr === 0x6d || chr === 0x67) && states.flags[chr]) { error("Duplicate regex flag"); } states.complete = 1; } else if (!states.open && (chr === 0x69 || chr === 0x6d || chr === 0x67) && !states.flags[chr]) { states.flags[chr] = 1; } outputLine += code.charAt(pos++); cached = next; if (states.complete) { break; } } if (states.open) { error("Unterminated regex literal"); } } function numberOrHex() { function number() { while (pos < len) { chr = code.charCodeAt(pos); if (chr >= 0x31 && chr <= 0x39) { if (states.e) { states.e = 2; } if (states.e2) { states.e2 = 2; } } else if (chr === 0x30) { if (states.zeroFirst && !states.dot) { pos++; continue; } if (states.e) { states.e = 2; } if (states.e2) { states.e2 = 2; } } else if (chr === 0x65 || chr === 0x45) { if (states.e) { break; } else { states.e = 1; } } else if (chr === 0x2b || chr === 0x2d) { if (states.e === 1 && !states.e2) { states.e = 2; states.e2 = 1; } else { cached = chr; break; } } else if (chr === 0x2e) { if (states.dot || states.e || (states.zeroFirst && states.output.length != 1)) { break; } states.dot = 1; } else { cached = chr; break; } states.output = states.output + code.charAt(pos); pos++; } if (states.zeroFirst && !states.output.length) { states.output = '0'; } else if (states.dotFirst) { if (states.output.length === 1) { error('Expected digit'); } states.output = '0' + states.output; } else if (states.e === 1 || states.e2 === 1) { error('Expected exponent'); } outputLine += states.output; } function hex() { var states = { output : '0x' }; pos++; while (pos < len) { chr = code.charCodeAt(pos); if (chr > 0x2f && chr < 0x3a) { } else if (chr > 0x60 && chr < 0x67) { } else if (chr > 0x40 && chr < 0x47) { } else { break; } states.output = states.output + code.charAt(pos); pos++; } if (states.output.length == 2) { error('Missing hex digits.'); } outputLine += states.output; } var states = { dot : 0, e : 0, e2 : 0, complete : 0, output : '', zeroFirst : 0, dotFirst : 0 }; if (rules[101][lastState]) { state = 101; } else if (rules[85][lastState]) { left = 1; state = 85; } else { if (!rules[85][lastState] && newLineFlag) { asi(); left = 1; state = 85; } } if (chr === 0x2e) { states.output = '.'; states.dot = 1; states.dotFirst = 1; } else if (chr === 0x30) { states.zeroFirst = 1; states.output += '' + code.charAt(pos); } else { states.output = code.charAt(pos); } if (pos < len) { pos++; chr = code.charCodeAt(pos); } if ((chr === 0x78 || chr === 0x58) && pos < len) { hex(); } else { number(); } } function divide() { left = 0; cached = -1; if (next === 0x3d) { state = 7; pos += 2; outputLine += '/='; } else { state = 21; pos++; outputLine += ' / '; cached = next; } } function arrayOrAccessorOpen() { index = parseFloat('' + lookupSquare + lookupCurly + lookupParen); if (!left) { state = 1; } else { state = 3; } outputLine += '['; if (state === 3) { outputLine += 'M.P('; } parentStates[index] = state; left = 0; pos++; lookupSquare++; index = parseFloat('' + lookupSquare + lookupCurly + lookupParen); parentStates[index] = state; } function arrayOrAccessorClose() { lookupSquare--; index = parseFloat('' + lookupSquare + lookupCurly + lookupParen); var parentState = parentStates[index]; if (parentState === 1) { state = 2; left = 1; } else if (parentState === 3) { state = 4; left = 1; outputLine += ')'; } else { error('Unexpected ]. Cannot follow ' + rulesLookup[lastState] + '.Output:' + output); } outputLine += ']'; left = 1; pos++; parentStates[index] = null; } function parenOpen() { index = parseFloat('' + lookupSquare + lookupCurly + lookupParen); if (lastState === 50) { state = 51; } else if (lastState === 40) { state = 41; } else if (rules[46][lastState]) { state = 46; } else if (lastState === 68) { state = 69; } else if (lastState === 22) { state = 23; } else if (lastState === 145) { state = 146; } else if (lastState === 118) { state = 119; } else if (lastState === 140) { state = 141; } else if (lastState === 53) { state = 54; } else if (lastState === 52) { state = 54; } else if (rules[104][lastState]) { state = 104; } else { if (!rules[67][lastState] && newLineFlag) { asi(); state = 104; } else { error('Unexpected (. Cannot follow ' + rulesLookup[lastState] + '.Output:' + output); } } outputLine += '('; pos++; parentStates[index] = state; left = 0; lookupParen++; } function parenClose() { index = parseFloat('' + lookupSquare + lookupCurly + lookupParen); isVar[index] = null; lookupParen--; index = parseFloat('' + lookupSquare + lookupCurly + lookupParen); parentState = parentStates[index]; if (rules[57][lastState]) { state = 57; } else if (parentState === 46) { state = 47; left = 1; } else if (parentState === 41) { state = 42; left = 0; isFor[index] = 0; isForIn[index] = 0; } else if (parentState === 119) { state = 120; left = 0; } else if (parentState === 23) { state = 24; left = 0; } else if (parentState === 146) { state = 147; left = 0; } else if (parentState === 141) { state = 142; left = 0; } else if (parentState === 69) { state = 70; left = 0; } else if (rules[58][lastState]) { state = 58; } else if (parentState === 104) { state = 106; left = 1; } else { error('Unexpected ). Cannot follow ' + rulesLookup[lastState] + '.Output:' + output); } outputLine += ')'; pos++; parentStates[index] = null; } function curlyOpen() { var curlyIndex = lookupCurly + 1, index = parseFloat('' + lookupSquare + curlyIndex + lookupParen); if (lastState === 57) { state = 61; } else if (lastState === 18) { state = 19; } else if (lastState === 32) { state = 33; } else if (lastState === 147) { state = 148; } else if (lastState === 24) { state = 26; } else if (lastState === 42) { state = 43; } else if (lastState === 142) { state = 143; } else if (lastState === 127) { state = 128; } else if (lastState === 120) { state = 121; } else if (lastState === 70) { state = 71; } else if (lastState === 37) { state = 38; } else if (lastState === 58) { state = 59; } else if (rules[96][lastState]) { state = 96; parentStates[index] = state; outputLine += 'M.O('; } else if (rules[9][lastState]) { state = 9; } else { if (!rules[67][lastState] && newLineFlag) { asi(); if (lastState === 45) { state = 96; parentStates[index] = state; outputLine += 'M.O('; } else { state = 9; } } else { error('Unexpected {. Cannot follow ' + rulesLookup[lastState] + '.Output:' + output); } } outputLine += '{'; if (state === 61 || state === 59) { outputLine += 'var arguments$=M.A(arguments);'; } pos++; index = parseFloat('' + lookupSquare + lookupCurly + lookupParen); parentStates[index] = state; left = 0; lookupCurly++; } function curlyClose() { var curlyIndex; index = parseFloat('' + lookupSquare + lookupCurly + lookupParen); isVar[index] = null; lookupCurly--; index = parseFloat('' + lookupSquare + lookupCurly + lookupParen); parentState = parentStates[index]; outputLine += '}'; if (parentState === 61) { state = 62; left = 0; } else if (parentState === 33) { state = 34; left = 0; } else if (parentState === 96) { state = 97; left = 1; curlyIndex = lookupCurly + 1; index = parseFloat('' + lookupSquare + curlyIndex + lookupParen); isObjectLiteral[index] = 0; outputLine += ')'; } else if (parentState === 43) { state = 44; left = 0; } else if (parentState === 148) { state = 149; left = 0; } else if (parentState === 26) { state = 27; left = 0; } else if (parentState === 38) { state = 39; left = 0; } else if (parentState === 143) { state = 144; left = 0; } else if (parentState === 128) { state = 129; } else if (parentState === 19) { state = 20; } else if (parentState === 121) { state = 122; left = 0; } else if (parentState === 18) { state = 19; left = 0; expect = 0; } else if (parentState === 71) { state = 72; left = 0; } else if (parentState === 59) { state = 63; left = 1; } else if (parentState === 9) { state = 10; left = 0; } else { error('Unexpected }. Cannot follow ' + rulesLookup[lastState] + '.Output:' + output); } index = parseFloat('' + lookupSquare + lookupCurly + lookupParen); parentStates[index] = null; pos++; } function ternaryOpen() { index = parseFloat('' + lookupSquare + lookupCurly + lookupParen); state = 125; outputLine += '?'; left = 0; pos++; if (isTernary[index]) { isTernary[index]++; } else { isTernary[index] = 1; } ternaryCount++; } function comma() { var parentState; index = parseFloat('' + lookupSquare + lookupCurly + lookupParen); parentState = parentStates[index]; if (lastState === 48) { state = 49; } else if (parentState === 1 || lastState === 1) { state = 0; } else if (lastState === 55) { state = 56; } else if (parentState === 104) { state = 105; } else if (isObjectLiteral[index]) { state = 100; } else if (isVar[index]) { state = 138; } else if (isTernary[index]) { error("Syntax error expected :"); } else { state = 28; } outputLine += ','; pos++; left = 0; } function period() { if (left) { state = 66; } else { error('Unexpected . Cannot follow ' + rulesLookup[lastState] + '.Output:' + output); } outputLine += '.'; pos++; left = 0; } function colon() { var parentState; index = parseFloat('' + lookupSquare + lookupCurly + lookupParen); parentState = parentStates[index]; if (isTernary[index]) { state = 126; isTernary[index]--; ternaryCount--; } else if (rules[99][lastState]) { state = 99; isObjectLiteral[index] = 1; } else if (isCase[index] || lastState === 16) { state = 123; if (lastState === 15) { error("Syntax error"); } if (lastState !== 16) { isCase[index] = 0; caseCount--; } } else if (!parentState) { state = 76; } else { error('Unexpected : Cannot follow ' + rulesLookup[lastState] + '.Output:' + output); } outputLine += ':'; pos++; left = 0; } function string() { var states; if (lastState === 96 || lastState === 100) { state = 102; left = 0; } else { state = 115; left = 1; } states = { escaping : 0, complete : 0 }; states[chr] = 1; outputLine += code.charAt(pos); pos++; while (pos < len) { chr = code.charCodeAt(pos); if (chr === 0x27 && !states.escaping && states[0x27]) { states.complete = 1; } else if (chr === 0x22 && !states.escaping && states[0x22]) { states.complete = 1; } else if (states.escaping && (chr === 10 || chr === 13 || chr === 8232 || chr == 8233)) { pos++; states.escaping = 0; continue; } else if (chr === 0x5c && !states.escaping) { states.escaping = 1; pos++; continue; } else if (chr === 0x5c && states.escaping) { states.escaping = 0; outputLine += '\\'; } else if ((chr === 10 || chr === 13 || chr === 8232 || chr == 8233) && !states.escaping) { error("Unterminated string literal"); } else if (states.escaping) { outputLine += '\\'; states.escaping = 0; } if (states.complete && state === 102) { outputLine += scoping; } outputLine += code.charAt(pos); pos++; if (states.complete) { break; } } if (!states.complete) { error("Unterminated string literal"); } } function exclamation() { cached = -1; next = code.charCodeAt(pos + 1); next2 = code.charCodeAt(pos + 2); if (next !== 0x3d && !left) { state = 88; outputLine += ' ! '; pos++; cached = next; } else if (next === 0x3d && next2 !== 0x3d) { state = 87; outputLine += '!='; pos += 2; cached = next2; } else if (next === 0x3d && next2 === 0x3d) { state = 117; outputLine += '!=='; pos += 3; } else { error('Unexpected !. Cannot follow ' + rulesLookup[lastState] + '.Output:' + output); } left = 0; } function tilde() { if (!left) { state = 11; outputLine += '~'; pos++; } else { error('Unexpected ~ Cannot follow ' + rulesLookup[lastState] + '.Output:' + output); } left = 0; } function pipe() { next = code.charCodeAt(pos + 1); cached = -1; if (next === 0x7c) { state = 81; outputLine += '||'; pos += 2; } else if (next === 0x3d) { state = 103; outputLine += '|='; pos += 2; } else if (next !== 0x7c && next !== 0x3d) { state = 12; outputLine += ' | '; pos++; cached = next; } else { error('Unexpected | Cannot follow ' + rulesLookup[lastState] + '.Output:' + output); } left = 0; } function caret() { next = code.charCodeAt(pos + 1); cached = -1; if (next === 0x3d) { state = 151; outputLine += '^='; pos += 2; } else if (next !== 0x3d) { state = 150; outputLine += ' ^ '; pos++; cached = next; } else { error('Unexpected ^. Cannot follow ' + rulesLookup[lastState] + '.Output:' + output); } left = 0; } function percent() { next = code.charCodeAt(pos + 1); cached = -1; if (next === 0x3d) { state = 93; outputLine += '%='; pos += 2; } else if (next !== 0x3d) { state = 92; outputLine += ' % '; pos++; cached = next; } else { error('Unexpected % Cannot follow ' + rulesLookup[lastState] + '.Output:' + output); } left = 0; } function ampersand() { next = code.charCodeAt(pos + 1); cached = -1; if (next === 0x26) { state = 82; outputLine += '&&'; pos += 2; } else if (next === 0x3d) { state = 8; outputLine += '&='; pos += 2; } else if (next !== 0x26 && next !== 0x3d) { state = 13; outputLine += ' & '; pos++; cached = next; } else { error('Unexpected & Cannot follow ' + rulesLookup[lastState] + '.Output:' + output); } left = 0; } function equal() { next = code.charCodeAt(pos + 1); next2 = code.charCodeAt(pos + 2); cached = -1; if (next !== 0x3d) { state = 30; outputLine += ' = '; pos++; cached = next; } else if (next === 0x3d && next2 !== 0x3d) { state = 31; outputLine += '=='; pos += 2; cached = next2; } else if (next === 0x3d && next2 === 0x3d) { state = 116; outputLine += '==='; pos += 3; } else { error('Unexpected = Cannot follow ' + rulesLookup[lastState] + '.Output:' + output); } left = 0; } function greaterThan() { next = code.charCodeAt(pos + 1); next2 = code.charCodeAt(pos + 2); next3 = code.charCodeAt(pos + 3); cached = -1; if (next === 0x3e && next2 === 0x3e && next3 === 0x3d) { state = 153; outputLine += '>>>='; pos += 4; } else if (next === 0x3e && next2 === 0x3e) { state = 152; outputLine += '>>>'; pos += 3; cached = next3; } else if (next === 0x3e && next2 === 0x3d) { state = 114; outputLine += '>>='; pos += 3; cached = next3; } else if (next === 0x3e) { state = 113; outputLine += '>>'; pos += 2; cached = next2; } else if (next !== 0x3d) { state = 64; outputLine += ' > '; pos++; cached = next; } else if (next === 0x3d) { state = 65; outputLine += '>='; pos += 2; cached = next2; } else { error('Unexpected > Cannot follow ' + rulesLookup[lastState] + '.Output:' + output); } left = 0; } function lessThan() { next = code.charCodeAt(pos + 1); next2 = code.charCodeAt(pos + 2); if (next === 0x21 && next2 === 0x2d) { next3 = code.charCodeAt(pos + 3); if (next3 === 0x2d) { pos += 4; return nonStandardComment(); } } cached = -1; if (next === 0x3c && next2 === 0x3d) { state = 80; outputLine += '<<='; pos += 3; } else if (next === 0x3c) { state = 79; outputLine += '<<'; pos += 2; cached = next2; } else if (next !== 0x3d) { state = 77; outputLine += ' < '; pos++; cached = next; } else if (next === 0x3d) { state = 78; outputLine += '<='; pos += 2; cached = next2; } else { error('Unexpected < Cannot follow ' + rulesLookup[lastState] + '.Output:' + output); } left = 0; } function asterix() { next = code.charCodeAt(pos + 1); cached = -1; if (next !== 0x3d) { state = 94; outputLine += ' * '; pos++; cached = next; } else if (next === 0x3d) { state = 95; outputLine += '*='; pos += 2; } else { error('Unexpected * Cannot follow ' + rulesLookup[lastState] + '.Output:' + output); } left = 0; } function minus() { next = code.charCodeAt(pos + 1); cached = -1; if (!left) { next2 = code.charCodeAt(pos + 2); if (next === 0x2d && next2 === 0x3e) { pos += 3; return nonStandardComment(); } } if (next === 0x2d && left) { state = 108; outputLine += '--'; pos += 2; left = 1; } else if (next === 0x2d && !left) { state = 109; outputLine += '--'; pos += 2; left = 0; } else if (next === 0x3d) { state = 91; outputLine += '-='; pos += 2; left = 0; } else if (next !== 0x3d && next !== 0x2d && left) { state = 90; outputLine += ' - '; pos++; cached = next; left = 0; } else if (next !== 0x3d && next !== 0x2d && !left) { state = 134; outputLine += '-'; pos++; cached = next; left = 0; } else { error('Unexpected - Cannot follow ' + rulesLookup[lastState] + '.Output:' + output); } } function space() { pos++; } function checkRules() { if (state === 89) { error("No state defined for char:" + String.fromCharCode(chr) + ', left: ' + left + ', last state: ' + rulesLookup[lastState] + ',output:' + output); } if (!rules[state]) { error("State does not exist in the rules:" + rulesLookup[state]); } if (!rules[state][lastState] && newLineFlag) { asi(); } if (!rules[state][lastState]) { error("Unexpected " + rulesLookup[state] + '. Cannot follow ' + rulesLookup[lastState] + '.Output:' + output); } if (parseTreeFlag) { parseTreeOutput = parseTreeOutput + '<' + rulesLookup[state] + '>' + outputLine + ''; } lastState = state; newLineFlag = 0; if (lookupSquare === 1 && lookupCurly === 1 && lookupParen === 1) { parentStates = {}; } } while (pos < len) { state = 89; if (cached >= 0) { chr = cached; } else { chr = code.charCodeAt(pos); } cached = -1; if (chr === 9 || chr === 11 || chr === 12 || chr === 32) { space(); continue; } else if (chr === 10 || chr === 13) { newLine(); continue; } else if (chr === 0x3b) { semicolon(); } else if (chr > 0x60 && chr < 0x7b) { identifier(); } else if (chr === 0x24) { nonKeyword(); } else if (chr > 0x2f && chr < 0x3a) { numberOrHex(); } else if (chr === 0x2f) { next = code.charCodeAt(pos + 1); if (!left && next !== 0x2a && next !== 0x2f && lastState !== 137) { regex(); } else if (next === 0x2f) { singleComment(); continue; } else if (next === 0x2a) { multiComment(); continue; } else if ((lastState === 137 || left) && next !== 0x2f) { divide(); } else { error('Unexpected /. Cannot follow ' + rulesLookup[lastState] + '.Output:' + output); } } else if (chr === 0x2b) { plus(); } else if (chr === 0x5b) { arrayOrAccessorOpen(); } else if (chr === 0x5d) { arrayOrAccessorClose(); } else if (chr === 0x28) { parenOpen(); } else if (chr === 0x29) { parenClose(); } else if (chr === 0x7b) { curlyOpen(); } else if (chr === 0x7d) { curlyClose(); } else if (chr === 0x3f) { ternaryOpen(); } else if (chr === 0x2c) { comma(); } else if (chr === 0x2e && left) { period(); } else if (chr === 0x3a) { colon(); } else if (chr === 0x27) { string(); } else if (chr === 0x22) { string(); } else if (chr === 0x21) { exclamation(); } else if (chr === 0x7e) { tilde(); } else if (chr === 0x7c) { pipe(); } else if (chr === 0x5e) { caret(); } else if (chr === 0x25) { percent(); } else if (chr === 0x26) { ampersand(); } else if (chr === 0x3d) { equal(); } else if (chr === 0x3e) { greaterThan(); } else if (chr === 0x3c) { lessThan(); } else if (chr === 0x2a) { asterix(); } else if (chr === 0x2d) { minus(); } else if (chr === 0x5f) { nonKeyword(); } else if (chr === 0x5c) { unicodeEscape(1); } else if (chr > 0x40 && chr < 0x5b) { if (chr === 0x49 || chr === 0x4e || chr === 0x49) { identifier(); } else { nonKeyword(); } } else if (!left && chr === 0x2e) { numberOrHex(); } else if (chr > 159) { if (chr === 160 || chr === 5760 || chr === 6158 || chr === 8192 || chr === 8193 || chr === 8194 || chr === 8195 || chr === 8196 || chr === 8197 || chr === 8198 || chr === 8199 || chr === 8200 || chr === 8201 || chr === 8202 || chr === 8239 || chr === 8287 || chr === 12288) { space(); continue; } else if (chr === 8232 || chr == 8233) { newLine(); continue; } else { nonKeyword(); } } if (commentSkip) { commentSkip = 0; continue; } checkRules(); output += outputLine; outputLine = ''; } if (lastState === 70) { error("Syntax error"); } if (lookupSquare > 1) { error("Syntax error unmatched ["); } else if (lookupCurly > 1) { error("Syntax error unmatched {"); } else if (lookupParen > 1) { error("Syntax error unmatched ("); } else if (caseCount > 1) { error("Syntax error unmatched case"); } if (!rules[35][lastState]) { error('Unexpected EOF. ' + rulesLookup[lastState] + ' cannot follow EOF.'); } if (completeFlag) { that.complete(); } if (parseTreeFlag) { that.parseTree(parseTreeOutput); } if (convertedFlag) { that.converted(output); } return output; }; this.options = { eval : true }; if ( typeof obj === 'string') { return execute(rewrite(obj)); } if (obj.options) { this.options = obj.options; } if (obj.converted) { this.converted = obj.converted; } if (obj.result) { this.result = obj.result; } if (obj.complete) { this.complete = obj.complete; } if (obj.parseTree) { this.parseTree = obj.parseTree; } converted = rewrite(obj.code); if (this.options.eval) { return execute(converted); } else { return converted; } }; }; return new Mental; }; })( typeof exports === "undefined" ? (window.mentaljs = {}) : exports); DOMPurify-0.7.3/package.json000066400000000000000000000045551262533660300156440ustar00rootroot00000000000000{ "scripts": { "build-demo": "node scripts/build-demo.js", "qunit": "node scripts/server.js", "jshint": "node node_modules/jshint/bin/jshint src/purify.js || true", "minify": "scripts/minify.sh", "amend-minified": "scripts/amend-minified.sh", "test": "npm run jshint && npm run-script travis-ci", "travis-ci": "[ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ] && ./node_modules/.bin/karma start test/karma.conf.js --log-level warn --reporters dots --single-run || false", "ci-test": "./node_modules/.bin/karma start test/karma.conf.js --single-run", "local-test": "npm run jshint;./node_modules/.bin/karma start test/karma.conf.js --browsers Firefox,Chrome --single-run" }, "pre-commit": [ "jshint", "minify", "amend-minified" ], "devDependencies": { "jshint": "^2.4.4", "json-loader": "^0.5.2", "karma": "^0.13.15", "karma-browserstack-launcher": "git://github.com/shirish87/karma-browserstack-launcher.git#global_poll_0.1.6", "karma-chrome-launcher": "^0.2.1", "karma-firefox-launcher": "^0.1.6", "karma-fixture": "^0.2.5", "karma-html2js-preprocessor": "^0.1.0", "karma-json-fixtures-preprocessor": "0.0.5", "karma-qunit": "^0.1.8", "karma-webpack": "^1.7.0", "pre-commit": "^1.1.2", "qunit-parameterize": "^0.4.0", "qunitjs": "^1.20.0", "uglify-js": "^2.5.0", "webpack": "^1.12.1" }, "name": "dompurify", "description": "DOMPurify is a DOM-only, super-fast, uber-tolerant XSS sanitizer for HTML, MathML and SVG. It's written in JavaScript and works in all modern browsers (Safari, Opera (15+), Internet Explorer (10+), Firefox and Chrome - as well as almost anything else using Blink or WebKit). DOMPurify is written by security people who have vast background in web attacks and XSS. Fear not.", "version": "0.7.3", "main": "src/purify.js", "directories": { "test": "test" }, "repository": { "type": "git", "url": "git://github.com/cure53/DOMPurify.git" }, "keywords": [ "dom", "xss", "html", "svg", "mathml", "security", "secure", "sanitizer", "sanitize", "filter", "purify" ], "author": "Mario Heiderich (https://cure53.de/)", "license": "MPL-2.0 OR Apache-2.0", "bugs": { "url": "https://github.com/cure53/DOMPurify/issues" }, "homepage": "https://github.com/cure53/DOMPurify" } DOMPurify-0.7.3/scripts/000077500000000000000000000000001262533660300150345ustar00rootroot00000000000000DOMPurify-0.7.3/scripts/amend-minified.sh000077500000000000000000000001411262533660300202350ustar00rootroot00000000000000echo "# Amending minified assets to HEAD" git add ./dist/purify.min.js ./dist/purify.min.js.map DOMPurify-0.7.3/scripts/build-demo.js000066400000000000000000000011211262533660300174060ustar00rootroot00000000000000/* jshint globalstrict:true, node:true */ 'use strict'; var he = require('he'); var fs = require('fs'); var tests = JSON.parse(fs.readFileSync('./test/expect.json', 'utf-8')); var allTests = tests.reduce(function(previousValue, currentValue) { return previousValue + '\n' + currentValue.payload; }, '').trim(); var allTestsEscaped = he.encode(allTests); var template = fs.readFileSync('./demo/index.tpl', 'utf-8'); // Poor man’s templating engine, aka. `String#replace`: var result = template.replace(/<%- examples %>/, allTestsEscaped); fs.writeFileSync('./demo/index.html', result); DOMPurify-0.7.3/scripts/minify.sh000077500000000000000000000003671262533660300166740ustar00rootroot00000000000000echo "# Ensuring ./dist directory exists..." mkdir -p foo ./dist echo "# Minifying purify.js using Uglifyjs2..." ./node_modules/.bin/uglifyjs ./src/purify.js -o ./dist/purify.min.js \ --mangle --comments --source-map ./dist/purify.min.js.map DOMPurify-0.7.3/scripts/server.js000066400000000000000000000020401262533660300166740ustar00rootroot00000000000000/* jshint globalstrict:true, node:true */ 'use strict'; var http = require('http'), url = require('url'), path = require('path'), fs = require('fs'), domain = require('domain').create(); var mimeTypes = { "html" : "text/html", "json" : "application/json", "js" : "text/javascript", "css" : "text/css" }; // *VERY* minimal static file server http.createServer(function(req, res) { var uri = url.parse(req.url).pathname, filename; if (uri === '/test/') { uri = '/test/index.html'; } filename = path.join(process.cwd(), uri); domain.on('error', function() { res.writeHead(404, { 'Content-Type': 'text/plain' }); res.end('404 Not Found\n'); }); domain.run(function() { var mimeType = mimeTypes[path.extname(filename).split(".")[1]] || 'text/plain'; res.writeHead(200, { 'Content-Type': mimeType }); fs.createReadStream(filename).pipe(res); }); }).listen(8000); console.log('Test server is running on \x1B[1m\x1B[32mhttp://localhost:8000/test/\x1B[39m, press Ctrl-C to stop.'); DOMPurify-0.7.3/src/000077500000000000000000000000001262533660300141345ustar00rootroot00000000000000DOMPurify-0.7.3/src/purify.js000066400000000000000000000704021262533660300160130ustar00rootroot00000000000000;(function(factory) { 'use strict'; /* global window: false, define: false, module: false */ var root = typeof window === 'undefined' ? null : window; if (typeof define === 'function' && define.amd) { define(function(){ return factory(root); }); } else if (typeof module !== 'undefined') { module.exports = factory(root); } else { root.DOMPurify = factory(root); } }(function factory(window) { 'use strict'; var DOMPurify = function(window) { return factory(window); }; /** * Version label, exposed for easier checks * if DOMPurify is up to date or not */ DOMPurify.version = '0.7.3'; if (!window || !window.document || window.document.nodeType !== 9) { // not running in a browser, provide a factory function // so that you can pass your own Window DOMPurify.isSupported = false; return DOMPurify; } var document = window.document; var originalDocument = document; var DocumentFragment = window.DocumentFragment; var HTMLTemplateElement = window.HTMLTemplateElement; var NodeFilter = window.NodeFilter; var NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap; var Text = window.Text; var Comment = window.Comment; var DOMParser = window.DOMParser; // As per issue #47, the web-components registry is inherited by a // new document created via createHTMLDocument. As per the spec // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries) // a new empty registry is used when creating a template contents owner // document, so we use that as our parent document to ensure nothing // is inherited. if (typeof HTMLTemplateElement === 'function') { document = document.createElement('template').content.ownerDocument; } var implementation = document.implementation; var createNodeIterator = document.createNodeIterator; var getElementsByTagName = document.getElementsByTagName; var createDocumentFragment = document.createDocumentFragment; var importNode = originalDocument.importNode; var hooks = {}; /** * Expose whether this browser supports running the full DOMPurify. */ DOMPurify.isSupported = typeof implementation.createHTMLDocument !== 'undefined' && document.documentMode !== 9; /* Add properties to a lookup table */ var _addToSet = function(set, array) { var l = array.length; while (l--) { set[array[l]] = true; } return set; }; /* Shallow clone an object */ var _cloneObj = function(object) { var newObject = {}; var property; for (property in object) { if (object.hasOwnProperty(property)) { newObject[property] = object[property]; } } return newObject; }; /** * We consider the elements and attributes below to be safe. Ideally * don't add any new ones but feel free to remove unwanted ones. */ /* allowed element names */ var ALLOWED_TAGS = null; var DEFAULT_ALLOWED_TAGS = _addToSet({}, [ // HTML 'a','abbr','acronym','address','area','article','aside','audio','b', 'bdi','bdo','big','blink','blockquote','body','br','button','canvas', 'caption','center','cite','code','col','colgroup','content','data', 'datalist','dd','decorator','del','details','dfn','dir','div','dl','dt', 'element','em','fieldset','figcaption','figure','font','footer','form', 'h1','h2','h3','h4','h5','h6','head','header','hgroup','hr','html','i', 'img','input','ins','kbd','label','legend','li','main','map','mark', 'marquee','menu','menuitem','meter','nav','nobr','ol','optgroup', 'option','output','p','pre','progress','q','rp','rt','ruby','s','samp', 'section','select','shadow','small','source','spacer','span','strike', 'strong','style','sub','summary','sup','table','tbody','td','template', 'textarea','tfoot','th','thead','time','tr','track','tt','u','ul','var', 'video','wbr', // SVG 'svg','altglyph','altglyphdef','altglyphitem','animatecolor', 'animatemotion','animatetransform','circle','clippath','defs','desc', 'ellipse','font','g','glyph','glyphref','hkern','image','line', 'lineargradient','marker','mask','metadata','mpath','path','pattern', 'polygon','polyline','radialgradient','rect','stop','switch','symbol', 'text','textpath','title','tref','tspan','view','vkern', // SVG Filters 'feBlend','feColorMatrix','feComponentTransfer','feComposite', 'feConvolveMatrix','feDiffuseLighting','feDisplacementMap', 'feFlood','feFuncA','feFuncB','feFuncG','feFuncR','feGaussianBlur', 'feImage','feMerge','feMergeNode','feMorphology','feOffset', 'feSpecularLighting','feTile','feTurbulence', //MathML 'math','menclose','merror','mfenced','mfrac','mglyph','mi','mlabeledtr', 'mmuliscripts','mn','mo','mover','mpadded','mphantom','mroot','mrow', 'ms','mpspace','msqrt','mystyle','msub','msup','msubsup','mtable','mtd', 'mtext','mtr','munder','munderover', //Text '#text' ]); /* Allowed attribute names */ var ALLOWED_ATTR = null; var DEFAULT_ALLOWED_ATTR = _addToSet({}, [ // HTML 'accept','action','align','alt','autocomplete','background','bgcolor', 'border','cellpadding','cellspacing','checked','cite','class','clear','color', 'cols','colspan','coords','datetime','default','dir','disabled', 'download','enctype','face','for','headers','height','hidden','high','href', 'hreflang','id','ismap','label','lang','list','loop', 'low','max', 'maxlength','media','method','min','multiple','name','noshade','novalidate', 'nowrap','open','optimum','pattern','placeholder','poster','preload','pubdate', 'radiogroup','readonly','rel','required','rev','reversed','rows', 'rowspan','spellcheck','scope','selected','shape','size','span', 'srclang','start','src','step','style','summary','tabindex','title', 'type','usemap','valign','value','width','xmlns', // SVG 'accent-height','accumulate','additivive','alignment-baseline', 'ascent','attributename','attributetype','azimuth','basefrequency', 'baseline-shift','begin','bias','by','clip','clip-path','clip-rule', 'color','color-interpolation','color-interpolation-filters','color-profile', 'color-rendering','cx','cy','d','dx','dy','diffuseconstant','direction', 'display','divisor','dur','edgemode','elevation','end','fill','fill-opacity', 'fill-rule','filter','flood-color','flood-opacity','font-family','font-size', 'font-size-adjust','font-stretch','font-style','font-variant','font-weight', 'fx', 'fy','g1','g2','glyph-name','glyphref','gradientunits','gradienttransform', 'image-rendering','in','in2','k','k1','k2','k3','k4','kerning','keypoints', 'keysplines','keytimes','lengthadjust','letter-spacing','kernelmatrix', 'kernelunitlength','lighting-color','local','marker-end','marker-mid', 'marker-start','markerheight','markerunits','markerwidth','maskcontentunits', 'maskunits','max','mask','mode','min','numoctaves','offset','operator', 'opacity','order','orient','orientation','origin','overflow','paint-order', 'path','pathlength','patterncontentunits','patterntransform','patternunits', 'points','preservealpha','r','rx','ry','radius','refx','refy','repeatcount', 'repeatdur','restart','rotate','scale','seed','shape-rendering','specularconstant', 'specularexponent','spreadmethod','stddeviation','stitchtiles','stop-color', 'stop-opacity','stroke-dasharray','stroke-dashoffset','stroke-linecap', 'stroke-linejoin','stroke-miterlimit','stroke-opacity','stroke','stroke-width', 'surfacescale','targetx','targety','transform','text-anchor','text-decoration', 'text-rendering','textlength','u1','u2','unicode','values','viewbox', 'visibility','vert-adv-y','vert-origin-x','vert-origin-y','word-spacing', 'wrap','writing-mode','xchannelselector','ychannelselector','x','x1','x2', 'y','y1','y2','z','zoomandpan', // MathML 'accent','accentunder','bevelled','close','columnsalign','columnlines', 'columnspan','denomalign','depth','display','displaystyle','fence', 'frame','largeop','length','linethickness','lspace','lquote', 'mathbackground','mathcolor','mathsize','mathvariant','maxsize', 'minsize','movablelimits','notation','numalign','open','rowalign', 'rowlines','rowspacing','rowspan','rspace','rquote','scriptlevel', 'scriptminsize','scriptsizemultiplier','selection','separator', 'separators','stretchy','subscriptshift','supscriptshift','symmetric', 'voffset', // XML 'xlink:href','xml:id','xlink:title','xml:space','xmlns:xlink' ]); /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */ var FORBID_TAGS = null; /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */ var FORBID_ATTR = null; /* Decide if custom data attributes are okay */ var ALLOW_DATA_ATTR = true; /* Output should be safe for jQuery's $() factory? */ var SAFE_FOR_JQUERY = false; /* Output should be safe for common template engines. * This means, DOMPurify removes data attributes, mustaches and ERB */ var SAFE_FOR_TEMPLATES = false; /* Decide if document with ... should be returned */ var WHOLE_DOCUMENT = false; /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html string. * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead */ var RETURN_DOM = false; /* Decide if a DOM `DocumentFragment` should be returned, instead of a html string */ var RETURN_DOM_FRAGMENT = false; /* If `RETURN_DOM` or `RETURN_DOM_FRAGMENT` is enabled, decide if the returned DOM * `Node` is imported into the current `Document`. If this flag is not enabled the * `Node` will belong (its ownerDocument) to a fresh `HTMLDocument`, created by * DOMPurify. */ var RETURN_DOM_IMPORT = false; /* Output should be free from DOM clobbering attacks? */ var SANITIZE_DOM = true; /* Keep element content when removing element? */ var KEEP_CONTENT = true; /* Tags to ignore content of when KEEP_CONTENT is true */ var FORBID_CONTENTS = _addToSet({}, [ 'audio', 'head', 'math', 'script', 'style', 'svg', 'video' ]); /* Keep a reference to config to pass to hooks */ var CONFIG = null; /* Ideally, do not touch anything below this line */ /* ______________________________________________ */ var formElement = document.createElement('form'); /** * _parseConfig * * @param optional config literal */ var _parseConfig = function(cfg) { /* Shield configuration object from tampering */ if (typeof cfg !== 'object') { cfg = {}; } /* Set configuration parameters */ ALLOWED_TAGS = 'ALLOWED_TAGS' in cfg ? _addToSet({}, cfg.ALLOWED_TAGS) : DEFAULT_ALLOWED_TAGS; ALLOWED_ATTR = 'ALLOWED_ATTR' in cfg ? _addToSet({}, cfg.ALLOWED_ATTR) : DEFAULT_ALLOWED_ATTR; FORBID_TAGS = 'FORBID_TAGS' in cfg ? _addToSet({}, cfg.FORBID_TAGS) : {}; FORBID_ATTR = 'FORBID_ATTR' in cfg ? _addToSet({}, cfg.FORBID_ATTR) : {}; ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true SAFE_FOR_JQUERY = cfg.SAFE_FOR_JQUERY || false; // Default false SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false RETURN_DOM = cfg.RETURN_DOM || false; // Default false RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false RETURN_DOM_IMPORT = cfg.RETURN_DOM_IMPORT || false; // Default false SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true if (RETURN_DOM_FRAGMENT) { RETURN_DOM = true; } /* Merge configuration parameters */ if (cfg.ADD_TAGS) { if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) { ALLOWED_TAGS = _cloneObj(ALLOWED_TAGS); } _addToSet(ALLOWED_TAGS, cfg.ADD_TAGS); } if (cfg.ADD_ATTR) { if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) { ALLOWED_ATTR = _cloneObj(ALLOWED_ATTR); } _addToSet(ALLOWED_ATTR, cfg.ADD_ATTR); } /* Add #text in case KEEP_CONTENT is set to true */ if (KEEP_CONTENT) { ALLOWED_TAGS['#text'] = true; } // Prevent further manipulation of configuration. // Not available in IE8, Safari 5, etc. if (Object && 'freeze' in Object) { Object.freeze(cfg); } CONFIG = cfg; }; /** * _forceRemove * * @param a DOM node */ var _forceRemove = function(node) { try { node.parentNode.removeChild(node); } catch (e) { node.outerHTML = ''; } }; /** * _initDocument * * @param a string of dirty markup * @return a DOM, filled with the dirty markup */ var _initDocument = function(dirty) { /* Create a HTML document using DOMParser */ var doc, body; try { doc = new DOMParser().parseFromString(dirty, 'text/html'); } catch (e) {} /* Some browsers throw, some browsers return null for the code above DOMParser with text/html support is only in very recent browsers. */ if (!doc){ doc = implementation.createHTMLDocument(''); body = doc.body; body.parentNode.removeChild(body.parentNode.firstElementChild); body.outerHTML = dirty; } /* Work on whole document or just its body */ if (typeof doc.getElementsByTagName === 'function'){ return doc.getElementsByTagName( WHOLE_DOCUMENT ? 'html' : 'body')[0]; } else { return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0]; } }; /** * _createIterator * * @param document/fragment to create iterator for * @return iterator instance */ var _createIterator = function(root) { return createNodeIterator.call(root.ownerDocument || root, root, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT, function() { return NodeFilter.FILTER_ACCEPT; }, false ); }; /** * _isClobbered * * @param element to check for clobbering attacks * @return true if clobbered, false if safe */ var _isClobbered = function(elm) { if (elm instanceof Text || elm instanceof Comment) { return false; } if ( typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' ) { return true; } return false; }; var MUSTACHE_EXPR = /\{\{.*|.*\}\}/gm; var ERB_EXPR = /<%.*|.*%>/gm; /** * _sanitizeElements * * @protect nodeName * @protect textContent * @protect removeChild * * @param node to check for permission to exist * @return true if node was killed, false if left alive */ var _sanitizeElements = function(currentNode) { /* Execute a hook if present */ _executeHook('beforeSanitizeElements', currentNode, null); /* Check if element is clobbered or can clobber */ if (_isClobbered(currentNode)) { _forceRemove(currentNode); return true; } /* Now let's check the element's type and name */ var tagName = currentNode.nodeName.toLowerCase(); /* Execute a hook if present */ _executeHook('uponSanitizeElement', currentNode, { tagName: tagName }); /* Remove element if anything forbids its presence */ if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) { /* Keep content except for black-listed elements */ if (KEEP_CONTENT && !FORBID_CONTENTS[tagName] && typeof currentNode.insertAdjacentHTML === 'function') { try { currentNode.insertAdjacentHTML('AfterEnd', currentNode.innerHTML); } catch (e) {} } _forceRemove(currentNode); return true; } /* Convert markup to cover jQuery behavior */ if (SAFE_FOR_JQUERY && !currentNode.firstElementChild && (!currentNode.content || !currentNode.content.firstElementChild)) { currentNode.innerHTML = currentNode.textContent.replace(/ tag that has an "id" // attribute at the time. if (lcName === 'name' && currentNode.nodeName === 'IMG' && attributes.id) { idAttr = attributes.id; attributes = Array.prototype.slice.apply(attributes); currentNode.removeAttribute('id'); currentNode.removeAttribute(name); if (attributes.indexOf(idAttr) > l) { currentNode.setAttribute('id', idAttr.value); } } else { // This avoids a crash in Safari v9.0 with double-ids. // The trick is to first set the id to be empty and then to // remove the attriubute if (name === 'id') { currentNode.setAttribute(name, ''); } currentNode.removeAttribute(name); } /* Did the hooks approve of the attribute? */ if (!hookEvent.keepAttr) { continue; } /* Make sure attribute cannot clobber */ if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in window || value in document || value in formElement)) { continue; } if ( /* Check the name is permitted */ ( (ALLOWED_ATTR[lcName] && !FORBID_ATTR[lcName]) || /* Allow potentially valid data-* attributes * At least one character after "-" (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes) * XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804) */ (!SAFE_FOR_TEMPLATES && ALLOW_DATA_ATTR && DATA_ATTR.test(lcName)) ) && /* Get rid of script and data URIs */ ( !IS_SCRIPT_OR_DATA.test(value.replace(ATTR_WHITESPACE,'')) || /* Keep image data URIs alive if src is allowed */ (lcName === 'src' && value.indexOf('data:') === 0 && currentNode.nodeName === 'IMG') ) ) { /* Handle invalid data-* attribute set by try-catching it */ try { /* Sanitize attribute content to be template-safe */ if (SAFE_FOR_TEMPLATES) { value = value.replace(MUSTACHE_EXPR, ' '); value = value.replace(ERB_EXPR, ' '); } currentNode.setAttribute(name, value); } catch (e) {} } } /* Execute a hook if present */ _executeHook('afterSanitizeAttributes', currentNode, null); }; /** * _sanitizeShadowDOM * * @param fragment to iterate over recursively * @return void */ var _sanitizeShadowDOM = function(fragment) { var shadowNode; var shadowIterator = _createIterator(fragment); /* Execute a hook if present */ _executeHook('beforeSanitizeShadowDOM', fragment, null); while ( (shadowNode = shadowIterator.nextNode()) ) { /* Execute a hook if present */ _executeHook('uponSanitizeShadowNode', shadowNode, null); /* Sanitize tags and elements */ if (_sanitizeElements(shadowNode)) { continue; } /* Deep shadow DOM detected */ if (shadowNode.content instanceof DocumentFragment) { _sanitizeShadowDOM(shadowNode.content); } /* Check attributes, sanitize if necessary */ _sanitizeAttributes(shadowNode); } /* Execute a hook if present */ _executeHook('afterSanitizeShadowDOM', fragment, null); }; /** * _executeHook * Execute user configurable hooks * * @param {String} entryPoint Name of the hook's entry point * @param {Node} currentNode */ var _executeHook = function(entryPoint, currentNode, data) { if (!hooks[entryPoint]) { return; } hooks[entryPoint].forEach(function(hook) { hook.call(DOMPurify, currentNode, data, CONFIG); }); }; /** * sanitize * Public method providing core sanitation functionality * * @param {String} dirty string * @param {Object} configuration object */ DOMPurify.sanitize = function(dirty, cfg) { /* Make sure we have a string to sanitize. DO NOT return early, as this will return the wrong type if the user has requested a DOM object rather than a string */ if (!dirty) { dirty = ''; } /* Stringify, in case dirty is an array or other object */ if (typeof dirty !== 'string') { dirty = dirty.toString(); } /* Check we can run. Otherwise fall back or ignore */ if (!DOMPurify.isSupported) { if (typeof window.toStaticHTML === 'object' || typeof window.toStaticHTML === 'function') { return window.toStaticHTML(dirty); } return dirty; } /* Assign config vars */ _parseConfig(cfg); /* Exit directly if we have nothing to do */ if (!RETURN_DOM && !WHOLE_DOCUMENT && dirty.indexOf('<') === -1) { return dirty; } /* Initialize the document to work on */ var body = _initDocument(dirty); /* Check we have a DOM node from the data */ if (!body) { return RETURN_DOM ? null : ''; } /* Get node iterator */ var currentNode; var oldNode; var nodeIterator = _createIterator(body); /* Now start iterating over the created document */ while ( (currentNode = nodeIterator.nextNode()) ) { /* Fix IE's strange behavior with manipulated textNodes #89 */ if (currentNode.nodeType === 3 && currentNode === oldNode) { continue; } /* Sanitize tags and elements */ if (_sanitizeElements(currentNode)) { continue; } /* Shadow DOM detected, sanitize it */ if (currentNode.content instanceof DocumentFragment) { _sanitizeShadowDOM(currentNode.content); } /* Check attributes, sanitize if necessary */ _sanitizeAttributes(currentNode); oldNode = currentNode; } /* Return sanitized string or DOM */ var returnNode; if (RETURN_DOM) { if (RETURN_DOM_FRAGMENT) { returnNode = createDocumentFragment.call(body.ownerDocument); while (body.firstChild) { returnNode.appendChild(body.firstChild); } } else { returnNode = body; } if (RETURN_DOM_IMPORT) { /* adoptNode() is not used because internal state is not reset (e.g. the past names map of a HTMLFormElement), this is safe in theory but we would rather not risk another attack vector. The state that is cloned by importNode() is explicitly defined by the specs. */ returnNode = importNode.call(originalDocument, returnNode, true); } return returnNode; } return WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML; }; /** * addHook * Public method to add DOMPurify hooks * * @param {String} entryPoint * @param {Function} hookFunction */ DOMPurify.addHook = function(entryPoint, hookFunction) { if (typeof hookFunction !== 'function') { return; } hooks[entryPoint] = hooks[entryPoint] || []; hooks[entryPoint].push(hookFunction); }; /** * removeHook * Public method to remove a DOMPurify hook at a given entryPoint * (pops it from the stack of hooks if more are present) * * @param {String} entryPoint * @return void */ DOMPurify.removeHook = function(entryPoint) { if (hooks[entryPoint]) { hooks[entryPoint].pop(); } }; /** * removeHooks * Public method to remove all DOMPurify hooks at a given entryPoint * * @param {String} entryPoint * @return void */ DOMPurify.removeHooks = function(entryPoint) { if (hooks[entryPoint]) { hooks[entryPoint] = []; } }; /** * removeAllHooks * Public method to remove all DOMPurify hooks * * @return void */ DOMPurify.removeAllHooks = function() { hooks = []; }; return DOMPurify; })); DOMPurify-0.7.3/test/000077500000000000000000000000001262533660300143245ustar00rootroot00000000000000DOMPurify-0.7.3/test/config/000077500000000000000000000000001262533660300155715ustar00rootroot00000000000000DOMPurify-0.7.3/test/config/setup.js000066400000000000000000000003311262533660300172640ustar00rootroot00000000000000window.alert = function() { window.xssed = true; }; QUnit.assert.contains = function( needle, haystack, message ) { var result = haystack.indexOf(needle) > -1; QUnit.push(result, needle, haystack, message); }; DOMPurify-0.7.3/test/fixtures/000077500000000000000000000000001262533660300161755ustar00rootroot00000000000000DOMPurify-0.7.3/test/fixtures/expect.js000066400000000000000000002270151262533660300200320ustar00rootroot00000000000000module.exports = [{ "title": "DOM Clobbering against document.createElement() (see #47)", "payload": "", "expected": "" }, { "title": "DOM Clobbering against an empty cookie", "payload": "", "expected": "" }, { "title": "JavaScript URIs using Unicode LS/PS I", "payload": "123I am a dolphin!", "expected": "123I am a dolphin!" }, { "title": "JavaScript URIs using Unicode LS/PS II", "payload": "123I am a dolphin too!", "expected": "123I am a dolphin too!" }, { "title": "JavaScript URIs using Unicode Whitespace", "payload": "123CLICKCLICKCLICKCLICKCLICKCLICKCLICKCLICKCLICKCLICKCLICKCLICKCLICKCLICKCLICKCLICKCLICKCLICKCLICK", "expected": "123CLICKCLICKCLICKCLICKCLICKCLICKCLICKCLICKCLICKCLICKCLICKCLICKCLICKCLICKCLICKCLICKCLICKCLICKCLICK" }, { "title": "Image with data URI src", "payload": "", "expected": "" }, { "title": "Image with JavaScript URI src (DoS on Firefox)", "payload": "", "expected": "" }, { "title": "Link with data URI href", "payload": "clickme", "expected": "clickme" }, { "title": "Simple numbers", "payload": "123456", "expected": "123456" }, { "title": "DOM clobbering XSS by @irsdl using attributes", "payload": "
", "expected": ["", "
"] }, { "title": "DOM clobbering: getElementById", "payload": "", "expected": "" }, { "title": "DOM clobbering: location", "payload": "invisible", "expected": "invisible" }, { "title": "onclick, onsubmit, onfocus; DOM clobbering: parentNode", "payload": "
123
", "expected": "
123
" }, { "title": "onsubmit, onfocus; DOM clobbering: nodeName", "payload": "
123
", "expected": ["", "
123
"] }, { "title": "onsubmit, onfocus; DOM clobbering: nodeType", "payload": "
123
", "expected": ["", "
123
"] }, { "title": "onsubmit, onfocus; DOM clobbering: children", "payload": "
123
", "expected": ["", "
123
"] }, { "title": "onsubmit, onfocus; DOM clobbering: attributes", "payload": "
123
", "expected": ["", "
123
"] }, { "title": "onsubmit, onfocus; DOM clobbering: removeChild", "payload": "
123
", "expected": ["", "
123
"] }, { "title": "onsubmit, onfocus; DOM clobbering: removeAttributeNode", "payload": "
123
", "expected": ["", "
123
"] }, { "title": "onsubmit, onfocus; DOM clobbering: setAttribute", "payload": "
123
", "expected": ["", "
123
"] }, { "title": ">style<", "payload": "", "expected": "" }, { "title": "HTML paragraph with text", "payload": "

hello

", "expected": "

hello

" }, { "title": "mXSS Variation I", "payload": "<img onerror=\"alert(1);//\" src=x:x>", "expected": [ "<img onerror=\"alert(1);//\" src=x:x>", "" ] }, { "title": "mXSS Variation II", "payload": "", "expected": ["", ""] }, { "title": "Textarea and comments enabling img element", "payload": "", "expected": "" }, { "title": "Img element inside noscript terminated inside comment", "payload": "", "expected": ["", ""] }, { "title": "Img element inside noscript terminated inside attribute", "payload": "", "expected": [ "\">", "\">", "" ] }, { "title": "Img element inside shadow DOM template", "payload": "", "expected": "" }, { "title": "Low-range-ASCII obfuscated JavaScript URI", "payload": "@shafigullin", "expected": [ "@shafigullin", "@shafigullin" ] }, { "title": "Img inside style inside broken option element", "payload": "\u0001", "expected": "\u0001" }, { "title": "Iframe inside option element", "payload": "", "expected": "" }, { "title": "Image after style to trick jQuery tag-completion", "payload": "" }, { "title": "Image after self-closing style to trick jQuery tag-completion", "payload": "", "expected": "" }, { "title": "MathML example", "payload": "\n \n a,\n a,\n a,\n a,\n a,\n a\n \n", "expected": [ "\n \n a,\n a,\n a,\n a,\n a,\n a\n \n", "\n \n a,\n a,\n a,\n a,\n a,\n a\n \n", "\n \n a,\n a,\n a,\n a,\n a,\n a\n \n" ] }, { "title": "DOM clobbering attack using name=body", "payload": "@mmrupp", "expected": [ "@mmrupp", "@mmrupp", "@mmrupp", "@mmrupp" ] }, { "title": "Special esacpes in protocol handler for XSS in Blink", "payload": "@shafigullin", "expected": [ "@shafigullin", "@shafigullin" ] }, { "title": "DOM clobbering attack using activeElement", "payload": "", "expected": [ "", "" ] }, { "title": "DOM clobbering attack using name=body and injecting SVG + keygen", "payload": ", ", "expected": [ ", ", ", " ] }, { "title": "Bypass using multiple unknown attributes", "payload": "
@superevr
", "expected": "
@superevr
" }, { "title": "Bypass using event handlers and unknown attributes", "payload": "" }, { "title": "Bypass using DOM bugs when dealing with JS URIs in arbitrary attributes", "payload": "CLICK ME (bypass by @shafigullin)", "expected": "CLICK ME (bypass by @shafigullin)" }, { "title": "Bypass using DOM bugs when dealing with JS URIs in arbitrary attributes (II)", "payload": "", "expected": [ "


", "


", "" ] }, { "title": "Bypass using unknown attributes III", "payload": "
text", "expected": "
text
" }, { "title": "Bypass using unknown attributes IV", "payload": "", "expected": [ "", "" ] }, { "title": "Bypass using unknown attributes V", "payload": "", "expected": [ "


", "


", "" ] }, { "title": "Bypass using JS URI in href", "payload": "CLICK ME (bypass by @shafigullin)", "expected": "CLICK ME (bypass by @shafigullin)" }, { "payload": "
", "expected": "
" }, { "payload": "
//[\"'`-->]]>]
", "expected": [ "
//[\"'`-->]]>]
", "
//[\"'`-->]]>]
" ] }, { "payload": "
&ADz&AGn&AG0&AEf&ACA&AHM&AHI&AGO&AD0&AGn&ACA&AG8Abg&AGUAcgByAG8AcgA9AGEAbABlAHIAdAAoADEAKQ&ACAAPABi//[\"'`-->]]>]
", "expected": "
&ADz&AGn&AG0&AEf&ACA&AHM&AHI&AGO&AD0&AGn&ACA&AG8Abg&AGUAcgByAG8AcgA9AGEAbABlAHIAdAAoADEAKQ&ACAAPABi//[\"'`-->]]>]
" }, { "payload": "
&alert&A7&(1)&R&UA;&&<&A9&11/script&X&>//[\"'`-->]]>]
", "expected": "
&alert&A7&(1)&R&UA;&&<&A9&11/script&X&>//[\"'`-->]]>]
" }, { "payload": "
0? :postMessage(importScripts('data:;base64,cG9zdE1lc3NhZ2UoJ2FsZXJ0KDEpJyk'))//[\"'`-->]]>]
", "expected": "
0? :postMessage(importScripts('data:;base64,cG9zdE1lc3NhZ2UoJ2FsZXJ0KDEpJyk'))//[\"'`-->]]>]
" }, { "payload": "
//[\"'`-->]]>]
", "expected": "
//[\"'`-->]]>]
" }, { "payload": "
//[\"'`-->]]>]
", "expected": "
//[\"'`-->]]>]
" }, { "payload": "
//[\"'`-->]]>]
", "expected": "
//[\"'`-->]]>]
" }, { "payload": "
//[\"'`-->]]>]
", "expected": "
//[\"'`-->]]>]
" }, { "payload": "
X//[\"'`-->]]>]
\n\n
//[\"'`-->]]>]
", "expected": [ "
X//[\"'`-->]]>]
\n\n
//[\"'`-->]]>]
", "
X//[\"'`-->]]>]
\n\n
//[\"'`-->]]>]
" ] }, { "payload": "
//[\"'`-->]]>]
", "expected": [ "
//[\"'`-->]]>]
", "
//[\"'`-->]]>]
", "
//[\"'`-->]]>]
" ] }, { "payload": "






...



//[\"'`-->]]>]
", "expected": "






...



//[\"'`-->]]>]
" }, { "payload": "
01//[\"'`-->]]>]
", "expected": "
01//[\"'`-->]]>]
" }, { "payload": "
//[\"'`-->]]>]
", "expected": [ "
//[\"'`-->]]>]
", "
//[\"'`-->]]>]
" ] }, { "payload": "
//[\"'`-->]]>]
", "expected": "
//[\"'`-->]]>]
" }, { "payload": "
X//[\"'`-->]]>]
", "expected": "
X//[\"'`-->]]>]
" }, { "payload": "
//[\"'`-->]]>]
", "expected": "
//[\"'`-->]]>]
" }, { "payload": "
//[\"'`-->]]>]
", "expected": "
//[\"'`-->]]>]
" }, { "payload": "
\u00BCscript \u00BEalert(19)//\u00BC/script \u00BE//[\"'`-->]]>]
", "expected": "
\u00BCscript \u00BEalert(19)//\u00BC/script \u00BE//[\"'`-->]]>]
" }, { "payload": "
//[\"'`-->]]>]
", "expected": "
//[\"'`-->]]>]
" }, { "payload": "
//[\"'`-->]]>]
", "expected": "
//[\"'`-->]]>]
" }, { "payload": "
//[\"'`-->]]>]
", "expected": "
//[\"'`-->]]>]
" }, { "payload": "
//[\"'`-->]]>]
", "expected": [ "
//[\"'`-->]]>]
", "
//[\"'`-->]]>]
" ] }, { "payload": "
1`>//[\"'`-->]]>]
", "expected": "
1`>//[\"'`-->]]>]
" }, { "payload": "
;1//[\"'`-->]]>]
", "expected": "
;1//[\"'`-->]]>]
" }, { "payload": "
+ADw-html+AD4APA-body+AD4APA-div+AD4-top secret+ADw-/div+AD4APA-/body+AD4APA-/html+AD4-.toXMLString().match(/.*/m),alert(RegExp.input);//[\"'`-->]]>]
", "expected": "
+ADw-html+AD4APA-body+AD4APA-div+AD4-top secret+ADw-/div+AD4APA-/body+AD4APA-/html+AD4-.toXMLString().match(/.*/m),alert(RegExp.input);//[\"'`-->]]>]
" }, { "payload": "
//[\"'`-->]]>]
1>//[\"'`-->]]>]
", "expected": "
//[\"'`-->]]>]
1>//[\"'`-->]]>]
" }, { "payload": "
]]>]
", "expected": "
]]>]
" }, { "payload": "
//[\"'`-->]]>]
", "expected": "
//[\"'`-->]]>]
" }, { "payload": "
//[\"'`-->]]>]
", "expected": "" }, { "payload": "
//[\"'`-->]]>]
", "expected": "
//[\"'`-->]]>]
" }, { "payload": "
XXXXXX//[\"'`-->]]>]
", "expected": [ "
XXXXXX//[\"'`-->]]>]
", "
XXXXXX//[\"'`-->]]>]
", "
XXXXXX//[\"'`-->]]>]
" ] }, { "payload": "
1//[\"'`-->]]>]
", "expected": "
1//[\"'`-->]]>]
" }, { "payload": "
1//[\"'`-->]]>]
", "expected": [ "
1//[\"'`-->]]>]
", "
1//[\"'`-->]]>]
", "
1//[\"'`-->]]>]
" ] }, { "payload": "
XXX//[\"'`-->]]>]
", "expected": [ "
XXX//[\"'`-->]]>]
", "
XXX//[\"'`-->]]>]
", "
XXX//[\"'`-->]]>]
" ] }, { "payload": "
//[\"'`-->]]>]
", "expected": "
//[\"'`-->]]>]
" }, { "payload": "
//[\"'`-->]]>]
", "expected": [ "
//[\"'`-->]]>]
", "
//[\"'`-->]]>]
", "
//[\"'`-->]]>]
" ] }, { "payload": "", "expected": [ "", "", "" ] }, { "payload": "\n><image xlink:href=\"//[\"'`-->]]>]
", "expected": [ "><image xlink:href=\"//[\"'`-->]]>]", "><image xlink:href=\"//[\"'`-->]]>]", "><image xlink:href=\"//[\"'`-->]]>]" ] }, { "payload": "
//[\"'`-->]]>]
", "expected": "
//[\"'`-->]]>]
" }, { "payload": "
  • ", "expected": [ "
  • ", "
  • " ] }, { "payload": "
    //[\"'`-->]]>]
    ", "expected": [ "
    //[\"'`-->]]>]", "
    //[\"'`-->]]>]" ] }, { "payload": "
    XXX//[\"'`-->]]>]
    ", "expected": [ "
    XXX//[\"'`-->]]>]
    ", "
    XXX//[\"'`-->]]>]
    " ] }, { "payload": "
    ", "expected": "
    " }, { "payload": "\n\n\n\nHello\n//[\"'`-->]]>]
    ", "expected": "Hello\n//[\"'`-->]]>]" }, { "payload": "
    X//[\"'`-->]]>]
    ", "expected": "
    X//[\"'`-->]]>]
    " }, { "payload": "
    XXX
    //[\"'`-->]]>]
    ", "expected": [ "
    XXX
    //[\"'`-->]]>]
    ", "
    XXX
    //[\"'`-->]]>]
    " ] }, { "payload": "
    XXX
    //[\"'`-->]]>]
    ", "expected": [ "
    XXX
    //[\"'`-->]]>]
    ", "
    XXX
    //[\"'`-->]]>]
    ", "
    XXX
    //[\"'`-->]]>]
    " ] }, { "payload": "
    //[\"'`-->]]>]
    ", "expected": [ "
    //[\"'`-->]]>]
    ", "
    //[\"'`-->]]>]
    ", "
    //[\"'`-->]]>]
    " ] }, { "payload": "
    //[\"'`-->]]>]
    ", "expected": "
    //[\"'`-->]]>]
    " }, { "payload": "
    //[\"'`-->]]>]
    ", "expected": "
    //[\"'`-->]]>]
    " }, { "payload": "
    //[\"'`-->]]>]
    ", "expected": "
    //[\"'`-->]]>]
    " }, { "payload": "
    //[\"'`-->]]>]
    ", "expected": "
    //[\"'`-->]]>]
    " }, { "payload": "
    //[\"'`-->]]>]
    ", "expected": "
    //[\"'`-->]]>]
    " }, { "payload": "//[\"'`-->]]>]
    ", "expected": "//[\"'`-->]]>]" }, { "payload": "
    //[\"'`-->]]>]
    ", "expected": "
    //[\"'`-->]]>]
    " }, { "payload": "
    ", "expected": "
    " }, { "payload": "
    //[\"'`-->]]>]
    ", "expected": "
    //[\"'`-->]]>]
    " }, { "payload": "
    alert(57)//0//[\"'`-->]]>]
    ", "expected": "
    alert(57)//0//[\"'`-->]]>]
    " }, { "payload": "
    //[\"'`-->]]>]
    ", "expected": "
    //[\"'`-->]]>]
    " }, { "payload": "
    //[\"'`-->]]>]
    ", "expected": "
    //[\"'`-->]]>]
    " }, { "payload": "
    XXX
    //[\"'`-->]]>]
    ", "expected": [ "
    XXX
    //[\"'`-->]]>]
    ", "
    XXX
    //[\"'`-->]]>]
    " ] }, { "payload": "
    XXX
    //[\"'`-->]]>]
    ", "expected": [ "
    XXX
    //[\"'`-->]]>]
    ", "
    XXX
    //[\"'`-->]]>]
    ", "
    " ] }, { "payload": "
    \n\n\n\n//[\"'`-->]]>]
    ", "expected": "
    \n\n\n\n//[\"'`-->]]>]
    " }, { "payload": "
    // O10.10\u2193, OM10.0\u2193, GC6\u2193, FF\n\n // IE6, O10.10\u2193, OM10.0\u2193\n // IE6, O11.01\u2193, OM10.1\u2193//[\"'`-->]]>]
    ", "expected": "
    // O10.10\u2193, OM10.0\u2193, GC6\u2193, FF\n\n // IE6, O10.10\u2193, OM10.0\u2193\n // IE6, O11.01\u2193, OM10.1\u2193//[\"'`-->]]>]
    " }, { "payload": "
    ]>&x;//[\"'`-->]]>]
    ", "expected": "
    ]>&x;//[\"'`-->]]>]
    " }, { "payload": "
    //[\"'`-->]]>]
    ", "expected": [ "
    //[\"'`-->]]>]
    ", "
    //[\"'`-->]]>]
    ", "
    //[\"'`-->]]>]
    " ] }, { "payload": "\n//[\"'`-->]]>]
    \n
    \n]>//[\"'`-->]]>]
    ", "expected": "//[\"'`-->]]>]\n
    \n]>//[\"'`-->]]>]
    " }, { "payload": "
    \n XXX\n//[\"'`-->]]>]
    ", "expected": "
    \n XXX\n//[\"'`-->]]>]
    " }, { "payload": "
    //[\"'`-->]]>]
    ", "expected": [ "
    //[\"'`-->]]>]
    ", "
    " ] }, { "payload": "
    x
    //[\"'`-->]]>]
    ", "expected": [ "
    x
    //[\"'`-->]]>]
    ", "
    x
    //[\"'`-->]]>]
    " ] }, { "payload": "
    //[\"'`-->]]>]
    ", "expected": "
    //[\"'`-->]]>]
    " }, { "payload": "
    //[\"'`-->]]>]
    ", "expected": "
    //[\"'`-->]]>]
    " }, { "payload": "
    //[\"'`-->]]>]
    ", "expected": "
    //[\"'`-->]]>]
    " }, { "payload": "
    //[\"'`-->]]>]
    ", "expected": "
    //[\"'`-->]]>]
    " }, { "payload": "
    //[\"'`-->]]>]
    ", "expected": "
    //[\"'`-->]]>]
    " }, { "payload": "
    &x;//[\"'`-->]]>]
    ", "expected": "
    &x;//[\"'`-->]]>]
    " }, { "payload": "
    //[\"'`-->]]>]
    ", "expected": "
    //[\"'`-->]]>]
    " }, { "payload": "
    //[\"'`-->]]>]
    ", "expected": "
    //[\"'`-->]]>]
    " }, { "payload": "
    //[\"'`-->]]>]
    ", "expected": "
    //[\"'`-->]]>]
    " }, { "payload": "
    //[\"'`-->]]>]
    ", "expected": "
    //[\"'`-->]]>]
    " }, { "payload": "
    //[\"'`-->]]>]
    ", "expected": "
    //[\"'`-->]]>]
    " }, { "payload": "
    //[\"'`-->]]>]
    //[\"'`-->]]>]
    ", "expected": [ "
    //[\"'`-->]]>]
    //[\"'`-->]]>]
    ", "
    //[\"'`-->]]>]
    " ] }, { "payload": "
    //[\"'`-->]]>]
    ", "expected": "
    //[\"'`-->]]>]
    " }, { "payload": "
    //[\"'`-->]]>]
    ", "expected": "
    //[\"'`-->]]>]
    " }, { "payload": "
    //[\"'`-->]]>]
    \n\n//[\"'`-->]]>]
    ", "expected": [ "
    //[\"'`-->]]>]
    \n\n//[\"'`-->]]>]
    ", "
    //[\"'`-->]]>]
    \n\n//[\"'`-->]]>]
    ", "
    //[\"'`-->]]>]
    \n\n//[\"'`-->]]>]
    ", "
    //[\"'`-->]]>]
    \n\n//[\"'`-->]]>]
    ", "
    //[\"'`-->]]>]
    \n\n//[\"'`-->]]>]
    " ] }, { "payload": "
    \n\n\n\n\n\n\n\n\n//[\"'`-->]]>]", "expected": [ "
    \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\n\n//[\"'`-->]]>]
    " ] }, { "payload": "
    \n\n\n//[\"'`-->]]>]
    ", "expected": [ "
    \n\n\n//[\"'`-->]]>]
    ", "
    \n\n\n//[\"'`-->]]>]
    " ] }, { "payload": "
    \n
    \n\n\n\n\n
    PRESS ENTER
    //[\"'`-->]]>]
    ", "expected": [ "
    \n
    \n\n\n\n\n
    PRESS ENTER
    //[\"'`-->]]>]
    ", "
    \n
    \n\n\n\n\n
    PRESS ENTER
    //[\"'`-->]]>]
    " ] }, { "payload": "
    [A]\n\">\n\">\n\">\n[B]\n\">\n[C]\n\">\n[D]\n<% foo>\">//[\"'`-->]]>]
    ", "expected": "
    [A]\n\">\n\">\n\">\n[B]\n\">\n[C]\n\n[D]\n<% foo>//[\"'`-->]]>]
    " }, { "payload": "
    X
    //[\"'`-->]]>]
    ", "expected": [ "
    X
    //[\"'`-->]]>]
    ", "
    X
    //[\"'`-->]]>]
    " ] }, { "payload": "
    X
    //[\"'`-->]]>]
    ", "expected": [ "
    X
    //[\"'`-->]]>]
    ", "
    X
    //[\"'`-->]]>]
    " ] }, { "payload": "
    \nalert(94)\n//[\"'`-->]]>]
    ", "expected": [ "
    \n\n//[\"'`-->]]>]
    ", "
    \nalert(94)\n//[\"'`-->]]>]
    ", "
    \n\n//[\"'`-->]]>]
    " ] }, { "payload": "
    \n\n\n\n//[\"'`-->]]>]
    ", "expected": [ "
    \n\n//[\"'`-->]]>]
    ", "
    \n\n\n\n//[\"'`-->]]>]
    ", "
    \n\n//[\"'`-->]]>]
    ", "
    \n\n\n\n//[\"'`-->]]>]
    ", "
    \n\n//[\"'`-->]]>]
    ", "
    \n\n//[\"'`-->]]>]
    ", "
    \n\n//[\"'`-->]]>]
    ", "
    \n\n//[\"'`-->]]>]
    " ] }, { "payload": "
    \n//[\"'`-->]]>]
    ", "expected": "
    \n//[\"'`-->]]>]
    " }, { "payload": "
    \n
    //[\"'`-->]]>]
    ", "expected": "
    //[\"'`-->]]>]
    " }, { "payload": "
    //[\"'`-->]]>]
    ", "expected": [ "
    //[\"'`-->]]>]
    ", "
    //[\"'`-->]]>]
    " ] }, { "payload": "
    //[\"'`-->]]>]
    ", "expected": "
    //[\"'`-->]]>]
    " }, { "payload": "
    \n\"`\">\n\n\"`\n\"`//[\"'`-->]]>]
    ", "expected": [ "
    \n\"`><img\n\n\"`><img\n\"`><img//[\"'`-->]]>]
    ", "
    \n\"`\">\n\n\"`\n\"`//[\"'`-->]]>]
    ", "
    \n\"`><img\n\n\"`><img\n\"`><img//[\"'`-->]]>]
    " ] }, { "payload": "
    \n\n\n//[\"'`-->]]>]
    ", "expected": [ "
    \n\n\n//[\"'`-->]]>]
    ", "
    \n\n\n//[\"'`-->]]>]
    ", "
    \n\n\n//[\"'`-->]]>]
    ", "
    \n\n\n//[\"'`-->]]>]
    ", "
    \n\n\n//[\"'`-->]]>]
    " ] }, { "payload": "
    \n\n//[\"'`-->]]>]
    ", "expected": [ "
    \n\n//[\"'`-->]]>]
    ", "
    \n\n//[\"'`-->]]>]
    ", "
    \n\n//[\"'`-->]]>]
    " ] }, { "payload": "
    X
    //[\"'`-->]]>]
    ", "expected": [ "
    X
    //[\"'`-->]]>]
    ", "
    X
    //[\"'`-->]]>]
    " ] }, { "payload": "
    X
    //[\"'`-->]]>]
    XXX
    \n//[\"'`-->]]>]
    ", "expected": [ "
    X
    //[\"'`-->]]>]
    XXX
    \n//[\"'`-->]]>]
    ", "
    X
    //[\"'`-->]]>]
    XXX
    \n//[\"'`-->]]>]
    " ] }, { "payload": "
    XXX//[\"'`-->]]>]
    \n//[\"'`-->]]>]
    ", "expected": "
    XXX//[\"'`-->]]>]
    \n//[\"'`-->]]>]
    " }, { "title": "XML", "payload": "
    x
    \n\n\n\">//[\"'`-->]]>]
    ", "expected": "
    x
    \n\n\n//[\"'`-->]]>]
    " }, { "title": "iframe", "payload": "
    \n \n//[\"'`-->]]>]
    ", "expected": "
    \n \n//[\"'`-->]]>]
    " }, { "title": "Drag & drop", "payload": "
    \n

    Drop me

    \n
    \n//[\"'`-->]]>]
    ", "expected": "
    \n

    Drop me

    \n
    \n//[\"'`-->]]>]
    " }, { "title": "view-source", "payload": "
    ", "expected": "
    " }, { "payload": "//[\"'`-->]]>]
    ", "expected": "//[\"'`-->]]>]" }, { "title": "window.open", "payload": "
    \n\nSpam//[\"'`-->]]>]
    ", "expected": "
    \n\nSpam//[\"'`-->]]>]
    " }, { "payload": "
    \n\n//[\"'`-->]]>]
    ", "expected": "
    //[\"'`-->]]>]
    " }, { "payload": "
    Some text\nwww.example.org\n\n//[\"'`-->]]>]
    ", "expected": [ "
    Some text\nwww.example.org\n\n//[\"'`-->]]>]
    ", "
    Some text\nwww.example.org\n\n//[\"'`-->]]>]
    " ] }, { "payload": "
    // Safari 5.0, Chrome 9, 10\n // Safari 5.0//[\"'`-->]]>]
    ", "expected": "
    // Safari 5.0, Chrome 9, 10\n // Safari 5.0//[\"'`-->]]>]
    " }, { "payload": "
    ]> //[\"'`-->]]>]
    ", "expected": [ "
    ]> //[\"'`-->]]>]
    ", "
    ]> //[\"'`-->]]>]
    ", "
    ]> //[\"'`-->]]>]
    ", "
    ]> //[\"'`-->]]>]
    " ] }, { "payload": "
    \n//[\"'`-->]]>]
    ", "expected": "
    \n//[\"'`-->]]>]
    " }, { "payload": "
    \n\nalert(127)\n//[\"'`-->]]>]
    ", "expected": [ "
    \n\nalert(127)\n//[\"'`-->]]>]
    ", "
    \n\n\n//[\"'`-->]]>]
    ", "
    \n\n\n//[\"'`-->]]>]
    ", "
    \n\n\n//[\"'`-->]]>]
    " ] }, { "payload": "
    //[\"'`-->]]>]
    ", "expected": [ "
    //[\"'`-->]]>]
    ", "
    //[\"'`-->]]>]
    ", "
    //[\"'`-->]]>]
    " ] }, { "title": "Inline SVG (data-uri)", "payload": "
    \n\n//[\"'`-->]]>]
    ", "expected": [ "
    \n\n//[\"'`-->]]>]
    ", "
    ")\">\n\n//[\"'`-->]]>]
    ", "
    \n\n//[\"'`-->]]>]
    ", "
    \n\n//[\"'`-->]]>]
    ", "
    \n\n//[\"'`-->]]>]
    " ] }, { "title": "MathML", "payload": "
    CLICKME\n\n\nCLICKME\n\n\nCLICKMEhttp://http://google.com\n//[\"'`-->]]>]
    ", "expected": [ "
    CLICKME\n\n\n\n\n\n\n//[\"'`-->]]>]
    ", "
    CLICKME\n\n\nCLICKME\n\n\nCLICKMEhttp://http://google.com\n//[\"'`-->]]>]
    " ] }, { "payload": "
    \n
    \n\n
    \n\n
    \n\n\n\n\n\n\n\n//[\"'`-->]]>]
    ", "expected": [ "
    \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\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\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//[\"'`-->]]>]
    " ] }, { "payload": "
    //[\"'`-->]]>]
    ", "expected": "
    //[\"'`-->]]>]
    " }, { "title": "XMP", "payload": "
    \n<%\n\n%></xmp><img src=xx:x onerror=alert(134)//\n\n %>/\nalert(2)\n\n\nXXX\n\n-->{}\n*{color:red}//[\"'`-->]]>]
    ", "expected": [ "
    \n<%\n\n\"%\n\n %>/\nalert(2)\n\n\nXXX\n\n-->{}\n*{color:red}//[\"'`-->]]>]
    ", "
    \n<%\n\n\"%></xmp><img\n\n %>/\nalert(2)\n\n\nXXX\n\n-->{}\n*{color:red}//[\"'`-->]]>]
    " ] }, { "title": "SVG", "payload": "
    \n\n\n//[\"'`-->]]>]
    ", "expected": [ "
    \n\n\n//[\"'`-->]]>]
    ", "
    \n\n\n//[\"'`-->]]>]
    " ] }, { "payload": "
    \n\n\n\n\n
    //[\"'`-->]]>]
    ", "expected": [ "
    \n\n\n\n\n
    //[\"'`-->]]>]
    ", "
    \n\n\n\n\n//[\"'`-->]]>]
    ", "
    \n\n\n\n\n
    //[\"'`-->]]>]
    ", "
    \n\n\n\n\n
    //[\"'`-->]]>]
    " ] }, { "title": "SVG", "payload": "
    \n\n\n\n//[\"'`-->]]>]
    ", "expected": [ "
    \n\n\n\n//[\"'`-->]]>]
    ", "
    \n\n\n\n//[\"'`-->]]>]
    ", "
    \n\n\n\n//[\"'`-->]]>]
    ", "
    \n\n\n\n//[\"'`-->]]>]
    ", "
    \n\n\n\n//[\"'`-->]]>]
    ", "
    \n\n\n\n//[\"'`-->]]>]
    " ] }, { "title": "Removing name attr from img with id can crash Safari", "payload": "", "expected": [ "", "" ] }, { "title": "DOM clobbering: submit", "payload": "123", "expected": "123" }, { "title": "DOM clobbering: acceptCharset", "payload": "123", "expected": "123" }]; DOMPurify-0.7.3/test/karma.conf.js000066400000000000000000000065641262533660300167140ustar00rootroot00000000000000module.exports = function(config) { config.set({ autoWatch: true, basePath: '../', frameworks: ['qunit'], files: [ 'bower_components/jQuery/dist/jquery.js', 'node_modules/qunit-parameterize/qunit-parameterize.js', 'test/config/setup.js', 'test/**/*.spec.js' ], preprocessors: { 'src/**/*.js': ['webpack'], 'test/**/*.js': ['webpack'] }, reporters: ['progress'], exclude: [], port: 9876, browserStack: { project: 'DOMPurify', username: process.env.BS_USERNAME, accessKey: process.env.BS_ACCESSKEY }, webpack: { plugins: [], devtool: 'inline-source-map', resolve: { alias: {}, modulesDirectories: [ 'test', 'src', 'dist' ], extensions: ['', '.js', '.json'] }, externals: { jQuery: 'jQuery' }, module: { loaders: [{ test: /\.json$/, loader: 'json-loader' }] } }, customLaunchers: { bs_win81_ie_11: { base: 'BrowserStack', browser: 'ie', browser_version: '11.0', os: 'Windows', os_version: '8.1' }, bs_win8_ie_10: { base: 'BrowserStack', browser: 'ie', browser_version: '10.0', os: 'Windows', os_version: '8' }, bs_mavericks_chrome_44: { base: 'BrowserStack', device: null, os: 'OS X', browser_version: '44.0', browser: 'chrome', os_version: 'Mavericks' }, bs_yosemite_firefox_40: { base: 'BrowserStack', device: null, os: 'OS X', browser_version: '40.0', browser: 'firefox', os_version: 'Yosemite' }, bs_yosemite_safari_8: { base: 'BrowserStack', device: null, os: 'OS X', browser_version: '8.0', browser: 'safari', os_version: 'Yosemite' }, bs_win81_opera_31: { base: 'BrowserStack', device: null, os: 'Windows', browser_version: '31', browser: 'opera', os_version: '8.1' }, bs_win7_firefox_12: { base: 'BrowserStack', device: null, os: 'Windows', browser_version: '12.0', browser: 'firefox', os_version: '7' }, bs_win81_chrome_22: { base: 'BrowserStack', device: null, os: 'Windows', browser_version: '22.0', browser: 'chrome', os_version: '8.1' }, bs_win10_edge_12: { base: 'BrowserStack', device: null, os: 'Windows', browser_version: '12.0', browser: 'edge', os_version: '10' } }, browsers: [ 'bs_win81_ie_11', 'bs_win8_ie_10', 'bs_mavericks_chrome_44', 'bs_yosemite_firefox_40', 'bs_yosemite_safari_8', 'bs_win81_opera_31', 'bs_win7_firefox_12', 'bs_win81_chrome_22', 'bs_win10_edge_12' ], browserDisconnectTimeout: 10000, browserDisconnectTolerance: 1, browserNoActivityTimeout: 240000, captureTimeout: 240000, plugins: [ 'karma-webpack', 'karma-chrome-launcher', 'karma-browserstack-launcher', 'karma-firefox-launcher', 'karma-qunit' ], singleRun: true, colors: true, logLevel: config.LOG_INFO }); }; DOMPurify-0.7.3/test/purify.min.spec.js000066400000000000000000000004621262533660300177150ustar00rootroot00000000000000var DOMPurify = require('purify.min'), testSuite = require('test-suite'), tests = require('fixtures/expect'), xssTests = tests.filter( function( element ) { if ( /alert/.test( element.payload ) ) { return element; } }); QUnit.module('DOMPurify dist'); testSuite(DOMPurify, tests, xssTests); DOMPurify-0.7.3/test/purify.spec.js000066400000000000000000000004551262533660300171350ustar00rootroot00000000000000var DOMPurify = require('purify'), testSuite = require('test-suite'), tests = require('fixtures/expect'), xssTests = tests.filter( function( element ) { if ( /alert/.test( element.payload ) ) { return element; } }); QUnit.module('DOMPurify src'); testSuite(DOMPurify, tests, xssTests); DOMPurify-0.7.3/test/test-suite.js000066400000000000000000000471211262533660300167750ustar00rootroot00000000000000module.exports = function(DOMPurify, tests, xssTests) { QUnit .cases(tests) .test( 'Sanitization test', function(params, assert) { assert.contains( DOMPurify.sanitize( params.payload ), params.expected, 'Payload: ' + params.payload); }); // Config-Flag Tests QUnit.test( 'Config-Flag tests: KEEP_CONTENT + ALLOWED_TAGS / ALLOWED_ATTR', function(assert) { // KEEP_CONTENT + ALLOWED_TAGS / ALLOWED_ATTR assert.equal( DOMPurify.sanitize( '', {KEEP_CONTENT: false} ), ""); assert.contains( DOMPurify.sanitize( 'abc123123', {ALLOWED_TAGS: ['b', 'q'], ALLOWED_ATTR: ['style'], KEEP_CONTENT: true}), ["abc123123", "abc123123"] ); assert.equal( DOMPurify.sanitize( 'abc123123', {ALLOWED_TAGS: ['b', 'q'], ALLOWED_ATTR: ['style'], KEEP_CONTENT: false}), ""); assert.equal( DOMPurify.sanitize( 'abc', {ALLOWED_TAGS: ['b', 'q'], KEEP_CONTENT: false}), ""); assert.equal( DOMPurify.sanitize( '
    ', {ALLOWED_TAGS: ['input'], KEEP_CONTENT: true}), "" ); }); QUnit.test( 'Config-Flag tests: ALLOW_DATA_ATTR', function(assert) { // ALLOW_DATA_ATTR assert.equal( DOMPurify.sanitize( 'abc', {ALLOW_DATA_ATTR: true}), "abc" ); assert.equal( DOMPurify.sanitize( 'abc', {ALLOW_DATA_ATTR: false}), "abc" ); assert.contains( DOMPurify.sanitize( 'abc', {ALLOW_DATA_ATTR: true}), ["abc", "abc"] ); assert.contains( DOMPurify.sanitize( 'abc', {ALLOW_DATA_ATTR: true}), ["abc", "abc"] ); assert.equal( DOMPurify.sanitize( 'abc', {ALLOW_DATA_ATTR: true}), "abc" ); assert.contains( DOMPurify.sanitize( 'abc', {ALLOW_DATA_ATTR: true}), ["abc", "abc"] ); assert.contains( DOMPurify.sanitize( 'abc', {ALLOW_DATA_ATTR: true}), ["abc", "abc"] // IE11 and Edge throw an InvalidCharacterError ); assert.equal( DOMPurify.sanitize( 'abc', {ALLOW_DATA_ATTR: true}), "abc" ); }); QUnit.test( 'Config-Flag tests: ADD_TAGS', function(assert) { // ADD_TAGS assert.equal( DOMPurify.sanitize( 'abc', {ADD_TAGS: ['my-component']}), "abc" ); assert.equal( DOMPurify.sanitize( 'abc', {ADD_TAGS: ['my-ĸompønent']}), "abc" ); }); QUnit.test( 'Config-Flag tests: ADD_TAGS + ADD_ATTR', function(assert) { // ADD_TAGS + ADD_ATTR assert.equal( DOMPurify.sanitize( 'abc', {ADD_TAGS: ['my-component']}), "abc" ); assert.equal( DOMPurify.sanitize( 'abc', {ADD_TAGS: ['my-component'], ADD_ATTR: ['my-attr']}), "abc" ); assert.equal( DOMPurify.sanitize( 'abc', {ADD_TAGS: ['my-ĸompønent']}), "abc" ); assert.equal( DOMPurify.sanitize( 'abc', {ADD_TAGS: ['my-ĸompønent'], ADD_ATTR: ['my-æŧŧr']}), "abc" ); }); QUnit.test( 'Config-Flag tests: SAFE_FOR_JQUERY', function(assert) { //SAFE_FOR_JQUERY assert.equal( DOMPurify.sanitize( '123" ); assert.equal( DOMPurify.sanitize( '123" ); assert.equal( DOMPurify.sanitize( '', {SAFE_FOR_JQUERY: false}), "" ); assert.equal( DOMPurify.sanitize( '', {SAFE_FOR_JQUERY: true}), "" ); assert.equal( DOMPurify.sanitize( '