+- AstRoot
   +- Comment
   +- EmptyStatement
   +- EmptyStatement
   +- EmptyStatement
   +- EmptyStatement
   +- EmptyStatement
   +- EmptyStatement
   +- EmptyStatement
   +- EmptyStatement
   +- EmptyStatement
   +- EmptyStatement
   +- Comment
   +- EmptyStatement
   +- EmptyStatement
   +- EmptyStatement
   +- VariableDeclaration
   |  +- VariableInitializer
   |  |  +- Name
   |  |  +- Name
   |  +- VariableInitializer
   |     +- Name
   |     +- InfixExpression
   |        +- PropertyGet
   |        |  +- Name
   |        |  +- Name
   |        +- PropertyGet
   |           +- Name
   |           +- Name
   +- ExpressionStatement
      +- FunctionCall
         +- ParenthesizedExpression
            +- FunctionNode
               +- Block
                  +- VariableDeclaration
                  |  +- VariableInitializer
                  |  |  +- Name
                  |  +- VariableInitializer
                  |  |  +- Name
                  |  +- VariableInitializer
                  |  |  +- Name
                  |  +- VariableInitializer
                  |  |  +- Name
                  |  +- VariableInitializer
                  |  |  +- Name
                  |  +- VariableInitializer
                  |  |  +- Name
                  |  +- VariableInitializer
                  |  |  +- Name
                  |  |  +- PropertyGet
                  |  |     +- Name
                  |  |     +- Name
                  |  +- VariableInitializer
                  |  |  +- Name
                  |  |  +- NumberLiteral
                  |  +- VariableInitializer
                  |  |  +- Name
                  |  |  +- NumberLiteral
                  |  +- VariableInitializer
                  |  |  +- Name
                  |  |  +- FunctionCall
                  |  |     +- Name
                  |  +- VariableInitializer
                  |  |  +- Name
                  |  |  +- FunctionCall
                  |  |     +- Name
                  |  +- VariableInitializer
                  |  |  +- Name
                  |  |  +- FunctionCall
                  |  |     +- Name
                  |  +- VariableInitializer
                  |  |  +- Name
                  |  |  +- FunctionCall
                  |  |     +- Name
                  |  +- VariableInitializer
                  |  |  +- Name
                  |  |  +- InfixExpression
                  |  |     +- StringLiteral
                  |  |     +- StringLiteral
                  |  +- VariableInitializer
                  |  |  +- Name
                  |  |  +- InfixExpression
                  |  |     +- InfixExpression
                  |  |     |  +- StringLiteral
                  |  |     |  +- Name
                  |  |     +- StringLiteral
                  |  +- VariableInitializer
                  |  |  +- Name
                  |  |  +- InfixExpression
                  |  |     +- InfixExpression
                  |  |     |  +- InfixExpression
                  |  |     |  |  +- InfixExpression
                  |  |     |  |  |  +- InfixExpression
                  |  |     |  |  |  |  +- InfixExpression
                  |  |     |  |  |  |  |  +- InfixExpression
                  |  |     |  |  |  |  |  |  +- InfixExpression
                  |  |     |  |  |  |  |  |  |  +- InfixExpression
                  |  |     |  |  |  |  |  |  |  |  +- InfixExpression
                  |  |     |  |  |  |  |  |  |  |  |  +- InfixExpression
                  |  |     |  |  |  |  |  |  |  |  |  |  +- InfixExpression
                  |  |     |  |  |  |  |  |  |  |  |  |  |  +- StringLiteral
                  |  |     |  |  |  |  |  |  |  |  |  |  |  +- Name
                  |  |     |  |  |  |  |  |  |  |  |  |  +- StringLiteral
                  |  |     |  |  |  |  |  |  |  |  |  +- Name
                  |  |     |  |  |  |  |  |  |  |  +- StringLiteral
                  |  |     |  |  |  |  |  |  |  +- Name
                  |  |     |  |  |  |  |  |  +- StringLiteral
                  |  |     |  |  |  |  |  +- Name
                  |  |     |  |  |  |  +- StringLiteral
                  |  |     |  |  |  +- Name
                  |  |     |  |  +- StringLiteral
                  |  |     |  +- Name
                  |  |     +- StringLiteral
                  |  +- VariableInitializer
                  |  |  +- Name
                  |  |  +- InfixExpression
                  |  |     +- InfixExpression
                  |  |     |  +- InfixExpression
                  |  |     |  |  +- InfixExpression
                  |  |     |  |  |  +- InfixExpression
                  |  |     |  |  |  |  +- InfixExpression
                  |  |     |  |  |  |  |  +- InfixExpression
                  |  |     |  |  |  |  |  |  +- InfixExpression
                  |  |     |  |  |  |  |  |  |  +- StringLiteral
                  |  |     |  |  |  |  |  |  |  +- Name
                  |  |     |  |  |  |  |  |  +- StringLiteral
                  |  |     |  |  |  |  |  +- StringLiteral
                  |  |     |  |  |  |  +- StringLiteral
                  |  |     |  |  |  +- Name
                  |  |     |  |  +- StringLiteral
                  |  |     |  +- StringLiteral
                  |  |     +- StringLiteral
                  |  +- VariableInitializer
                  |  |  +- Name
                  |  |  +- NewExpression
                  |  |     +- Name
                  |  |     +- InfixExpression
                  |  |     |  +- Name
                  |  |     |  +- StringLiteral
                  |  |     +- StringLiteral
                  |  +- VariableInitializer
                  |  |  +- Name
                  |  |  +- NewExpression
                  |  |     +- Name
                  |  |     +- InfixExpression
                  |  |     |  +- InfixExpression
                  |  |     |  |  +- InfixExpression
                  |  |     |  |  |  +- InfixExpression
                  |  |     |  |  |  |  +- StringLiteral
                  |  |     |  |  |  |  +- Name
                  |  |     |  |  |  +- StringLiteral
                  |  |     |  |  +- Name
                  |  |     |  +- StringLiteral
                  |  |     +- StringLiteral
                  |  +- VariableInitializer
                  |  |  +- Name
                  |  |  +- NewExpression
                  |  |     +- Name
                  |  |     +- InfixExpression
                  |  |        +- InfixExpression
                  |  |        |  +- InfixExpression
                  |  |        |  |  +- InfixExpression
                  |  |        |  |  |  +- StringLiteral
                  |  |        |  |  |  +- Name
                  |  |        |  |  +- StringLiteral
                  |  |        |  +- Name
                  |  |        +- StringLiteral
                  |  +- VariableInitializer
                  |  |  +- Name
                  |  |  +- NewExpression
                  |  |     +- Name
                  |  |     +- InfixExpression
                  |  |        +- InfixExpression
                  |  |        |  +- InfixExpression
                  |  |        |  |  +- InfixExpression
                  |  |        |  |  |  +- InfixExpression
                  |  |        |  |  |  |  +- InfixExpression
                  |  |        |  |  |  |  |  +- StringLiteral
                  |  |        |  |  |  |  |  +- Name
                  |  |        |  |  |  |  +- StringLiteral
                  |  |        |  |  |  +- Name
                  |  |        |  |  +- StringLiteral
                  |  |        |  +- Name
                  |  |        +- StringLiteral
                  |  +- VariableInitializer
                  |  |  +- Name
                  |  |  +- NewExpression
                  |  |     +- Name
                  |  |     +- InfixExpression
                  |  |        +- Name
                  |  |        +- StringLiteral
                  |  +- VariableInitializer
                  |  |  +- Name
                  |  |  +- NewExpression
                  |  |     +- Name
                  |  |     +- Name
                  |  +- VariableInitializer
                  |  |  +- Name
                  |  |  +- NewExpression
                  |  |     +- Name
                  |  |     +- InfixExpression
                  |  |        +- InfixExpression
                  |  |        |  +- StringLiteral
                  |  |        |  +- Name
                  |  |        +- StringLiteral
                  |  +- VariableInitializer
                  |  |  +- Name
                  |  |  +- ObjectLiteral
                  |  |     +- ObjectProperty
                  |  |     |  +- Name
                  |  |     |  +- NewExpression
                  |  |     |     +- Name
                  |  |     |     +- InfixExpression
                  |  |     |        +- InfixExpression
                  |  |     |        |  +- StringLiteral
                  |  |     |        |  +- Name
                  |  |     |        +- StringLiteral
                  |  |     +- ObjectProperty
                  |  |     |  +- Name
                  |  |     |  +- NewExpression
                  |  |     |     +- Name
                  |  |     |     +- InfixExpression
                  |  |     |        +- InfixExpression
                  |  |     |        |  +- StringLiteral
                  |  |     |        |  +- Name
                  |  |     |        +- StringLiteral
                  |  |     +- ObjectProperty
                  |  |     |  +- Name
                  |  |     |  +- NewExpression
                  |  |     |     +- Name
                  |  |     |     +- InfixExpression
                  |  |     |        +- InfixExpression
                  |  |     |        |  +- StringLiteral
                  |  |     |        |  +- Name
                  |  |     |        +- StringLiteral
                  |  |     +- ObjectProperty
                  |  |     |  +- Name
                  |  |     |  +- NewExpression
                  |  |     |     +- Name
                  |  |     |     +- InfixExpression
                  |  |     |        +- StringLiteral
                  |  |     |        +- Name
                  |  |     +- ObjectProperty
                  |  |     |  +- Name
                  |  |     |  +- NewExpression
                  |  |     |     +- Name
                  |  |     |     +- InfixExpression
                  |  |     |        +- StringLiteral
                  |  |     |        +- Name
                  |  |     +- ObjectProperty
                  |  |     |  +- Name
                  |  |     |  +- NewExpression
                  |  |     |     +- Name
                  |  |     |     +- InfixExpression
                  |  |     |     |  +- InfixExpression
                  |  |     |     |  |  +- InfixExpression
                  |  |     |     |  |  |  +- InfixExpression
                  |  |     |     |  |  |  |  +- InfixExpression
                  |  |     |     |  |  |  |  |  +- InfixExpression
                  |  |     |     |  |  |  |  |  |  +- InfixExpression
                  |  |     |     |  |  |  |  |  |  |  +- InfixExpression
                  |  |     |     |  |  |  |  |  |  |  |  +- StringLiteral
                  |  |     |     |  |  |  |  |  |  |  |  +- Name
                  |  |     |     |  |  |  |  |  |  |  +- StringLiteral
                  |  |     |     |  |  |  |  |  |  +- Name
                  |  |     |     |  |  |  |  |  +- StringLiteral
                  |  |     |     |  |  |  |  +- Name
                  |  |     |     |  |  |  +- StringLiteral
                  |  |     |     |  |  +- Name
                  |  |     |     |  +- StringLiteral
                  |  |     |     +- StringLiteral
                  |  |     +- ObjectProperty
                  |  |     |  +- Name
                  |  |     |  +- NewExpression
                  |  |     |     +- Name
                  |  |     |     +- InfixExpression
                  |  |     |     |  +- InfixExpression
                  |  |     |     |  |  +- StringLiteral
                  |  |     |     |  |  +- Name
                  |  |     |     |  +- StringLiteral
                  |  |     |     +- StringLiteral
                  |  |     +- ObjectProperty
                  |  |        +- Name
                  |  |        +- NewExpression
                  |  |           +- Name
                  |  |           +- InfixExpression
                  |  |           |  +- InfixExpression
                  |  |           |  |  +- InfixExpression
                  |  |           |  |  |  +- InfixExpression
                  |  |           |  |  |  |  +- InfixExpression
                  |  |           |  |  |  |  |  +- InfixExpression
                  |  |           |  |  |  |  |  |  +- StringLiteral
                  |  |           |  |  |  |  |  |  +- Name
                  |  |           |  |  |  |  |  +- StringLiteral
                  |  |           |  |  |  |  +- Name
                  |  |           |  |  |  +- StringLiteral
                  |  |           |  |  +- Name
                  |  |           |  +- StringLiteral
                  |  |           +- StringLiteral
                  |  +- VariableInitializer
                  |  |  +- Name
                  |  |  +- RegExpLiteral
                  |  +- VariableInitializer
                  |  |  +- Name
                  |  |  +- RegExpLiteral
                  |  +- VariableInitializer
                  |  |  +- Name
                  |  |  +- RegExpLiteral
                  |  +- VariableInitializer
                  |  |  +- Name
                  |  |  +- RegExpLiteral
                  |  +- VariableInitializer
                  |  |  +- Name
                  |  |  +- NewExpression
                  |  |     +- Name
                  |  |     +- InfixExpression
                  |  |     |  +- InfixExpression
                  |  |     |  |  +- StringLiteral
                  |  |     |  |  +- Name
                  |  |     |  +- StringLiteral
                  |  |     +- StringLiteral
                  |  +- VariableInitializer
                  |  |  +- Name
                  |  |  +- FunctionNode
                  |  |     +- Name
                  |  |     +- Name
                  |  |     +- Block
                  |  |        +- VariableDeclaration
                  |  |        |  +- VariableInitializer
                  |  |        |     +- Name
                  |  |        |     +- InfixExpression
                  |  |        |        +- InfixExpression
                  |  |        |        |  +- StringLiteral
                  |  |        |        |  +- FunctionCall
                  |  |        |        |     +- PropertyGet
                  |  |        |        |     |  +- Name
                  |  |        |        |     |  +- Name
                  |  |        |        |     +- NumberLiteral
                  |  |        |        +- NumberLiteral
                  |  |        +- IfStatement
                  |  |        |  +- Name
                  |  |        |  +- Scope
                  |  |        |     +- Comment
                  |  |        |     +- ReturnStatement
                  |  |        |        +- Name
                  |  |        +- ReturnStatement
                  |  |           +- ConditionalExpression
                  |  |              +- InfixExpression
                  |  |              |  +- Name
                  |  |              |  +- NumberLiteral
                  |  |              +- FunctionCall
                  |  |              |  +- PropertyGet
                  |  |              |  |  +- Name
                  |  |              |  |  +- Name
                  |  |              |  +- InfixExpression
                  |  |              |     +- Name
                  |  |              |     +- NumberLiteral
                  |  |              +- FunctionCall
                  |  |                 +- PropertyGet
                  |  |                 |  +- Name
                  |  |                 |  +- Name
                  |  |                 +- InfixExpression
                  |  |                 |  +- InfixExpression
                  |  |                 |  |  +- Name
                  |  |                 |  |  +- NumberLiteral
                  |  |                 |  +- NumberLiteral
                  |  |                 +- InfixExpression
                  |  |                    +- InfixExpression
                  |  |                    |  +- Name
                  |  |                    |  +- NumberLiteral
                  |  |                    +- NumberLiteral
                  |  +- VariableInitializer
                  |  |  +- Name
                  |  |  +- FunctionNode
                  |  |     +- Block
                  |  |        +- ExpressionStatement
                  |  |           +- FunctionCall
                  |  |              +- Name
                  |  +- VariableInitializer
                  |     +- Name
                  |     +- FunctionCall
                  |        +- Name
                  |        +- FunctionNode
                  |        |  +- Name
                  |        |  +- Block
                  |        |     +- ReturnStatement
                  |        |        +- InfixExpression
                  |        |           +- InfixExpression
                  |        |           |  +- PropertyGet
                  |        |           |  |  +- Name
                  |        |           |  |  +- Name
                  |        |           |  +- KeywordLiteral
                  |        |           +- FunctionCall
                  |        |              +- Name
                  |        |              +- Name
                  |        |              +- StringLiteral
                  |        +- ObjectLiteral
                  |           +- ObjectProperty
                  |           |  +- Name
                  |           |  +- StringLiteral
                  |           +- ObjectProperty
                  |              +- Name
                  |              +- StringLiteral
                  +- FunctionNode
                  |  +- Name
                  |  +- Name
                  |  +- Block
                  |     +- ThrowStatement
                  |        +- NewExpression
                  |           +- Name
                  |           +- InfixExpression
                  |              +- StringLiteral
                  |              +- Name
                  +- FunctionNode
                  |  +- Name
                  |  +- Name
                  |  +- Name
                  |  +- Name
                  |  +- Name
                  |  +- Block
                  |     +- VariableDeclaration
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  |  +- InfixExpression
                  |     |  |     +- Name
                  |     |  |     +- PropertyGet
                  |     |  |        +- Name
                  |     |  |        +- Name
                  |     |  +- VariableInitializer
                  |     |     +- Name
                  |     |     +- ConditionalExpression
                  |     |        +- Name
                  |     |        +- PropertyGet
                  |     |        |  +- Name
                  |     |        |  +- Name
                  |     |        +- NumberLiteral
                  |     +- ExpressionStatement
                  |     |  +- Assignment
                  |     |     +- Name
                  |     |     +- InfixExpression
                  |     |        +- Name
                  |     |        +- ArrayLiteral
                  |     +- Comment
                  |     +- IfStatement
                  |     |  +- InfixExpression
                  |     |  |  +- InfixExpression
                  |     |  |  |  +- UnaryExpression
                  |     |  |  |  |  +- Name
                  |     |  |  |  +- StringLiteral
                  |     |  |  +- InfixExpression
                  |     |  |     +- UnaryExpression
                  |     |  |     |  +- Name
                  |     |  |     +- InfixExpression
                  |     |  |        +- InfixExpression
                  |     |  |        |  +- Name
                  |     |  |        |  +- NumberLiteral
                  |     |  |        +- InfixExpression
                  |     |  |           +- InfixExpression
                  |     |  |           |  +- Name
                  |     |  |           |  +- NumberLiteral
                  |     |  |           +- InfixExpression
                  |     |  |              +- Name
                  |     |  |              +- NumberLiteral
                  |     |  +- Scope
                  |     |     +- ReturnStatement
                  |     |        +- Name
                  |     +- IfStatement
                  |     |  +- UnaryExpression
                  |     |  |  +- Name
                  |     |  +- Scope
                  |     |     +- ExpressionStatement
                  |     |     |  +- FunctionCall
                  |     |     |     +- Name
                  |     |     |     +- Name
                  |     |     +- ExpressionStatement
                  |     |     |  +- Assignment
                  |     |     |     +- Name
                  |     |     |     +- InfixExpression
                  |     |     |        +- Name
                  |     |     |        +- Name
                  |     |     +- IfStatement
                  |     |        +- Name
                  |     |        +- Scope
                  |     |           +- Comment
                  |     |           +- Comment
                  |     |           +- IfStatement
                  |     |           |  +- InfixExpression
                  |     |           |  |  +- InfixExpression
                  |     |           |  |  |  +- Name
                  |     |           |  |  |  +- NumberLiteral
                  |     |           |  |  +- ParenthesizedExpression
                  |     |           |  |     +- Assignment
                  |     |           |  |        +- Name
                  |     |           |  |        +- FunctionCall
                  |     |           |  |           +- PropertyGet
                  |     |           |  |           |  +- Name
                  |     |           |  |           |  +- Name
                  |     |           |  |           +- Name
                  |     |           |  +- Scope
                  |     |           |     +- Comment
                  |     |           |     +- IfStatement
                  |     |           |        +- ParenthesizedExpression
                  |     |           |        |  +- Assignment
                  |     |           |        |     +- Name
                  |     |           |        |     +- ElementGet
                  |     |           |        |        +- Name
                  |     |           |        |        +- NumberLiteral
                  |     |           |        +- Scope
                  |     |           |        |  +- Comment
                  |     |           |        |  +- IfStatement
                  |     |           |        |  |  +- InfixExpression
                  |     |           |        |  |  |  +- Name
                  |     |           |        |  |  |  +- NumberLiteral
                  |     |           |        |  |  +- Scope
                  |     |           |        |  |  |  +- IfStatement
                  |     |           |        |  |  |  |  +- ParenthesizedExpression
                  |     |           |        |  |  |  |  |  +- Assignment
                  |     |           |        |  |  |  |  |     +- Name
                  |     |           |        |  |  |  |  |     +- FunctionCall
                  |     |           |        |  |  |  |  |        +- PropertyGet
                  |     |           |        |  |  |  |  |        |  +- Name
                  |     |           |        |  |  |  |  |        |  +- Name
                  |     |           |        |  |  |  |  |        +- Name
                  |     |           |        |  |  |  |  +- Scope
                  |     |           |        |  |  |  |     +- ExpressionStatement
                  |     |           |        |  |  |  |        +- FunctionCall
                  |     |           |        |  |  |  |           +- PropertyGet
                  |     |           |        |  |  |  |           |  +- Name
                  |     |           |        |  |  |  |           |  +- Name
                  |     |           |        |  |  |  |           +- Name
                  |     |           |        |  |  |  |           +- Name
                  |     |           |        |  |  |  +- ReturnStatement
                  |     |           |        |  |  |  |  +- Name
                  |     |           |        |  |  |  +- Comment
                  |     |           |        |  |  +- Scope
                  |     |           |        |  |     +- IfStatement
                  |     |           |        |  |        +- InfixExpression
                  |     |           |        |  |        |  +- Name
                  |     |           |        |  |        |  +- InfixExpression
                  |     |           |        |  |        |     +- ParenthesizedExpression
                  |     |           |        |  |        |     |  +- Assignment
                  |     |           |        |  |        |     |     +- Name
                  |     |           |        |  |        |     |     +- FunctionCall
                  |     |           |        |  |        |     |        +- PropertyGet
                  |     |           |        |  |        |     |        |  +- Name
                  |     |           |        |  |        |     |        |  +- Name
                  |     |           |        |  |        |     |        +- Name
                  |     |           |        |  |        |     +- FunctionCall
                  |     |           |        |  |        |        +- PropertyGet
                  |     |           |        |  |        |        |  +- Name
                  |     |           |        |  |        |        |  +- Name
                  |     |           |        |  |        |        +- Name
                  |     |           |        |  |        |        +- Name
                  |     |           |        |  |        +- Scope
                  |     |           |        |  |           +- ExpressionStatement
                  |     |           |        |  |           |  +- FunctionCall
                  |     |           |        |  |           |     +- PropertyGet
                  |     |           |        |  |           |     |  +- Name
                  |     |           |        |  |           |     |  +- Name
                  |     |           |        |  |           |     +- Name
                  |     |           |        |  |           |     +- Name
                  |     |           |        |  |           +- ReturnStatement
                  |     |           |        |  |              +- Name
                  |     |           |        |  +- Comment
                  |     |           |        +- IfStatement
                  |     |           |           +- ElementGet
                  |     |           |           |  +- Name
                  |     |           |           |  +- NumberLiteral
                  |     |           |           +- Scope
                  |     |           |           |  +- ExpressionStatement
                  |     |           |           |  |  +- FunctionCall
                  |     |           |           |  |     +- PropertyGet
                  |     |           |           |  |     |  +- Name
                  |     |           |           |  |     |  +- Name
                  |     |           |           |  |     +- Name
                  |     |           |           |  |     +- FunctionCall
                  |     |           |           |  |        +- PropertyGet
                  |     |           |           |  |        |  +- Name
                  |     |           |           |  |        |  +- Name
                  |     |           |           |  |        +- Name
                  |     |           |           |  +- ReturnStatement
                  |     |           |           |  |  +- Name
                  |     |           |           |  +- Comment
                  |     |           |           +- IfStatement
                  |     |           |              +- InfixExpression
                  |     |           |              |  +- ParenthesizedExpression
                  |     |           |              |  |  +- Assignment
                  |     |           |              |  |     +- Name
                  |     |           |              |  |     +- ElementGet
                  |     |           |              |  |        +- Name
                  |     |           |              |  |        +- NumberLiteral
                  |     |           |              |  +- PropertyGet
                  |     |           |              |     +- Name
                  |     |           |              |     +- Name
                  |     |           |              +- Scope
                  |     |           |                 +- ExpressionStatement
                  |     |           |                 |  +- FunctionCall
                  |     |           |                 |     +- PropertyGet
                  |     |           |                 |     |  +- Name
                  |     |           |                 |     |  +- Name
                  |     |           |                 |     +- Name
                  |     |           |                 |     +- FunctionCall
                  |     |           |                 |        +- PropertyGet
                  |     |           |                 |        |  +- Name
                  |     |           |                 |        |  +- Name
                  |     |           |                 |        +- Name
                  |     |           |                 +- ReturnStatement
                  |     |           |                    +- Name
                  |     |           +- IfStatement
                  |     |              +- InfixExpression
                  |     |              |  +- UnaryExpression
                  |     |              |  |  +- ElementGet
                  |     |              |  |     +- Name
                  |     |              |  |     +- InfixExpression
                  |     |              |  |        +- Name
                  |     |              |  |        +- StringLiteral
                  |     |              |  +- ParenthesizedExpression
                  |     |              |     +- InfixExpression
                  |     |              |        +- UnaryExpression
                  |     |              |        |  +- Name
                  |     |              |        +- UnaryExpression
                  |     |              |           +- FunctionCall
                  |     |              |              +- PropertyGet
                  |     |              |              |  +- Name
                  |     |              |              |  +- Name
                  |     |              |              +- Name
                  |     |              +- Scope
                  |     |                 +- ExpressionStatement
                  |     |                 |  +- Assignment
                  |     |                 |     +- Name
                  |     |                 |     +- Name
                  |     |                 +- ExpressionStatement
                  |     |                 |  +- Assignment
                  |     |                 |     +- Name
                  |     |                 |     +- Name
                  |     |                 +- Comment
                  |     |                 +- Comment
                  |     |                 +- Comment
                  |     |                 +- Comment
                  |     |                 +- Comment
                  |     |                 +- Comment
                  |     |                 +- Comment
                  |     |                 +- IfStatement
                  |     |                 |  +- InfixExpression
                  |     |                 |  |  +- InfixExpression
                  |     |                 |  |  |  +- Name
                  |     |                 |  |  |  +- NumberLiteral
                  |     |                 |  |  +- ParenthesizedExpression
                  |     |                 |  |     +- InfixExpression
                  |     |                 |  |        +- FunctionCall
                  |     |                 |  |        |  +- PropertyGet
                  |     |                 |  |        |  |  +- Name
                  |     |                 |  |        |  |  +- Name
                  |     |                 |  |        |  +- Name
                  |     |                 |  |        +- FunctionCall
                  |     |                 |  |           +- PropertyGet
                  |     |                 |  |           |  +- Name
                  |     |                 |  |           |  +- Name
                  |     |                 |  |           +- Name
                  |     |                 |  +- Scope
                  |     |                 |     +- Comment
                  |     |                 |     +- ExpressionStatement
                  |     |                 |     |  +- Assignment
                  |     |                 |     |     +- Name
                  |     |                 |     |     +- InfixExpression
                  |     |                 |     |        +- InfixExpression
                  |     |                 |     |        |  +- FunctionCall
                  |     |                 |     |        |  |  +- PropertyGet
                  |     |                 |     |        |  |  |  +- Name
                  |     |                 |     |        |  |  |  +- Name
                  |     |                 |     |        |  |  +- Name
                  |     |                 |     |        |  +- FunctionCall
                  |     |                 |     |        |     +- Name
                  |     |                 |     |        |     +- PropertyGet
                  |     |                 |     |        |        +- Name
                  |     |                 |     |        |        +- Name
                  |     |                 |     |        +- Name
                  |     |                 |     +- Comment
                  |     |                 |     +- Comment
                  |     |                 |     +- IfStatement
                  |     |                 |     |  +- InfixExpression
                  |     |                 |     |  |  +- InfixExpression
                  |     |                 |     |  |  |  +- Name
                  |     |                 |     |  |  |  +- Name
                  |     |                 |     |  |  +- UnaryExpression
                  |     |                 |     |  |     +- PropertyGet
                  |     |                 |     |  |        +- Name
                  |     |                 |     |  |        +- Name
                  |     |                 |     |  +- Scope
                  |     |                 |     |     +- Comment
                  |     |                 |     |     +- IfStatement
                  |     |                 |     |        +- ParenthesizedExpression
                  |     |                 |     |        |  +- Assignment
                  |     |                 |     |        |     +- Name
                  |     |                 |     |        |     +- FunctionCall
                  |     |                 |     |        |        +- PropertyGet
                  |     |                 |     |        |        |  +- Name
                  |     |                 |     |        |        |  +- Name
                  |     |                 |     |        |        +- StringLiteral
                  |     |                 |     |        +- Scope
                  |     |                 |     |        |  +- ExpressionStatement
                  |     |                 |     |        |     +- Assignment
                  |     |                 |     |        |        +- Name
                  |     |                 |     |        |        +- FunctionCall
                  |     |                 |     |        |           +- PropertyGet
                  |     |                 |     |        |           |  +- Name
                  |     |                 |     |        |           |  +- Name
                  |     |                 |     |        |           +- Name
                  |     |                 |     |        +- Scope
                  |     |                 |     |           +- ExpressionStatement
                  |     |                 |     |              +- FunctionCall
                  |     |                 |     |                 +- PropertyGet
                  |     |                 |     |                 |  +- Name
                  |     |                 |     |                 |  +- Name
                  |     |                 |     |                 +- StringLiteral
                  |     |                 |     |                 +- ParenthesizedExpression
                  |     |                 |     |                    +- Assignment
                  |     |                 |     |                       +- Name
                  |     |                 |     |                       +- Name
                  |     |                 |     +- ExpressionStatement
                  |     |                 |     |  +- Assignment
                  |     |                 |     |     +- Name
                  |     |                 |     |     +- FunctionCall
                  |     |                 |     |        +- Name
                  |     |                 |     |        +- Name
                  |     |                 |     +- ExpressionStatement
                  |     |                 |     |  +- Assignment
                  |     |                 |     |     +- Name
                  |     |                 |     |     +- PropertyGet
                  |     |                 |     |        +- Name
                  |     |                 |     |        +- Name
                  |     |                 |     +- WhileLoop
                  |     |                 |     |  +- UpdateExpression
                  |     |                 |     |  |  +- Name
                  |     |                 |     |  +- Scope
                  |     |                 |     |     +- ExpressionStatement
                  |     |                 |     |        +- Assignment
                  |     |                 |     |           +- ElementGet
                  |     |                 |     |           |  +- Name
                  |     |                 |     |           |  +- Name
                  |     |                 |     |           +- InfixExpression
                  |     |                 |     |              +- InfixExpression
                  |     |                 |     |              |  +- ParenthesizedExpression
                  |     |                 |     |              |  |  +- ConditionalExpression
                  |     |                 |     |              |  |     +- Name
                  |     |                 |     |              |  |     +- InfixExpression
                  |     |                 |     |              |  |     |  +- StringLiteral
                  |     |                 |     |              |  |     |  +- Name
                  |     |                 |     |              |  |     +- StringLiteral
                  |     |                 |     |              |  +- StringLiteral
                  |     |                 |     |              +- FunctionCall
                  |     |                 |     |                 +- Name
                  |     |                 |     |                 +- ElementGet
                  |     |                 |     |                    +- Name
                  |     |                 |     |                    +- Name
                  |     |                 |     +- ExpressionStatement
                  |     |                 |        +- Assignment
                  |     |                 |           +- Name
                  |     |                 |           +- FunctionCall
                  |     |                 |              +- PropertyGet
                  |     |                 |              |  +- Name
                  |     |                 |              |  +- Name
                  |     |                 |              +- StringLiteral
                  |     |                 +- TryStatement
                  |     |                    +- Scope
                  |     |                    |  +- ExpressionStatement
                  |     |                    |  |  +- FunctionCall
                  |     |                    |  |     +- PropertyGet
                  |     |                    |  |     |  +- Name
                  |     |                    |  |     |  +- Name
                  |     |                    |  |     +- Name
                  |     |                    |  |     +- FunctionCall
                  |     |                    |  |        +- PropertyGet
                  |     |                    |  |        |  +- Name
                  |     |                    |  |        |  +- Name
                  |     |                    |  |        +- Name
                  |     |                    |  +- ReturnStatement
                  |     |                    |     +- Name
                  |     |                    +- CatchClause
                  |     |                    |  +- Name
                  |     |                    |  +- Scope
                  |     |                    |     +- ExpressionStatement
                  |     |                    |        +- FunctionCall
                  |     |                    |           +- Name
                  |     |                    |           +- Name
                  |     |                    |           +- KeywordLiteral
                  |     |                    +- Scope
                  |     |                       +- IfStatement
                  |     |                          +- InfixExpression
                  |     |                          |  +- Name
                  |     |                          |  +- Name
                  |     |                          +- Scope
                  |     |                             +- ExpressionStatement
                  |     |                                +- FunctionCall
                  |     |                                   +- PropertyGet
                  |     |                                   |  +- Name
                  |     |                                   |  +- Name
                  |     |                                   +- StringLiteral
                  |     +- ReturnStatement
                  |        +- FunctionCall
                  |           +- Name
                  |           +- FunctionCall
                  |           |  +- PropertyGet
                  |           |  |  +- Name
                  |           |  |  +- Name
                  |           |  +- Name
                  |           |  +- StringLiteral
                  |           +- Name
                  |           +- Name
                  |           +- Name
                  +- Comment
                  +- FunctionNode
                  |  +- Name
                  |  +- Block
                  |     +- VariableDeclaration
                  |     |  +- VariableInitializer
                  |     |     +- Name
                  |     |     +- ArrayLiteral
                  |     +- FunctionNode
                  |     |  +- Name
                  |     |  +- Name
                  |     |  +- Name
                  |     |  +- Block
                  |     |     +- Comment
                  |     |     +- IfStatement
                  |     |     |  +- InfixExpression
                  |     |     |  |  +- FunctionCall
                  |     |     |  |  |  +- PropertyGet
                  |     |     |  |  |  |  +- Name
                  |     |     |  |  |  |  +- Name
                  |     |     |  |  |  +- InfixExpression
                  |     |     |  |  |     +- Name
                  |     |     |  |  |     +- StringLiteral
                  |     |     |  |  +- PropertyGet
                  |     |     |  |     +- Name
                  |     |     |  |     +- Name
                  |     |     |  +- Scope
                  |     |     |     +- Comment
                  |     |     |     +- ExpressionStatement
                  |     |     |        +- UnaryExpression
                  |     |     |           +- ElementGet
                  |     |     |              +- Name
                  |     |     |              +- FunctionCall
                  |     |     |                 +- PropertyGet
                  |     |     |                    +- Name
                  |     |     |                    +- Name
                  |     |     +- ReturnStatement
                  |     |        +- ParenthesizedExpression
                  |     |           +- Assignment
                  |     |              +- ElementGet
                  |     |              |  +- Name
                  |     |              |  +- InfixExpression
                  |     |              |     +- Name
                  |     |              |     +- StringLiteral
                  |     |              +- Name
                  |     +- ReturnStatement
                  |        +- Name
                  +- Comment
                  +- FunctionNode
                  |  +- Name
                  |  +- Name
                  |  +- Block
                  |     +- ExpressionStatement
                  |     |  +- Assignment
                  |     |     +- ElementGet
                  |     |     |  +- Name
                  |     |     |  +- Name
                  |     |     +- KeywordLiteral
                  |     +- ReturnStatement
                  |        +- Name
                  +- Comment
                  +- FunctionNode
                  |  +- Name
                  |  +- Name
                  |  +- Block
                  |     +- ReturnStatement
                  |        +- FunctionNode
                  |           +- Name
                  |           +- Block
                  |              +- ReturnStatement
                  |                 +- InfixExpression
                  |                    +- FunctionCall
                  |                    |  +- Name
                  |                    |  +- Name
                  |                    |  +- StringLiteral
                  |                    +- InfixExpression
                  |                       +- PropertyGet
                  |                       |  +- Name
                  |                       |  +- Name
                  |                       +- Name
                  +- Comment
                  +- FunctionNode
                  |  +- Name
                  |  +- Name
                  |  +- Block
                  |     +- ReturnStatement
                  |        +- FunctionNode
                  |           +- Name
                  |           +- Block
                  |              +- ReturnStatement
                  |                 +- InfixExpression
                  |                    +- ParenthesizedExpression
                  |                    |  +- InfixExpression
                  |                    |     +- FunctionCall
                  |                    |     |  +- Name
                  |                    |     |  +- Name
                  |                    |     |  +- StringLiteral
                  |                    |     +- FunctionCall
                  |                    |        +- Name
                  |                    |        +- Name
                  |                    |        +- StringLiteral
                  |                    +- InfixExpression
                  |                       +- PropertyGet
                  |                       |  +- Name
                  |                       |  +- Name
                  |                       +- Name
                  +- Comment
                  +- FunctionNode
                  |  +- Name
                  |  +- Name
                  |  +- Block
                  |     +- Comment
                  |     +- ReturnStatement
                  |        +- FunctionNode
                  |           +- Name
                  |           +- Block
                  |              +- Comment
                  |              +- Comment
                  |              +- Comment
                  |              +- IfStatement
                  |              |  +- InfixExpression
                  |              |  |  +- StringLiteral
                  |              |  |  +- Name
                  |              |  +- Scope
                  |              |  |  +- Comment
                  |              |  |  +- Comment
                  |              |  |  +- Comment
                  |              |  |  +- Comment
                  |              |  |  +- Comment
                  |              |  |  +- Comment
                  |              |  |  +- Comment
                  |              |  |  +- IfStatement
                  |              |  |  |  +- InfixExpression
                  |              |  |  |  |  +- PropertyGet
                  |              |  |  |  |  |  +- Name
                  |              |  |  |  |  |  +- Name
                  |              |  |  |  |  +- InfixExpression
                  |              |  |  |  |     +- PropertyGet
                  |              |  |  |  |     |  +- Name
                  |              |  |  |  |     |  +- Name
                  |              |  |  |  |     +- KeywordLiteral
                  |              |  |  |  +- Scope
                  |              |  |  |     +- Comment
                  |              |  |  |     +- IfStatement
                  |              |  |  |     |  +- InfixExpression
                  |              |  |  |     |  |  +- StringLiteral
                  |              |  |  |     |  |  +- Name
                  |              |  |  |     |  +- Scope
                  |              |  |  |     |     +- IfStatement
                  |              |  |  |     |        +- InfixExpression
                  |              |  |  |     |        |  +- StringLiteral
                  |              |  |  |     |        |  +- PropertyGet
                  |              |  |  |     |        |     +- Name
                  |              |  |  |     |        |     +- Name
                  |              |  |  |     |        +- Scope
                  |              |  |  |     |        |  +- ReturnStatement
                  |              |  |  |     |        |     +- InfixExpression
                  |              |  |  |     |        |        +- PropertyGet
                  |              |  |  |     |        |        |  +- PropertyGet
                  |              |  |  |     |        |        |  |  +- Name
                  |              |  |  |     |        |        |  |  +- Name
                  |              |  |  |     |        |        |  +- Name
                  |              |  |  |     |        |        +- Name
                  |              |  |  |     |        +- Scope
                  |              |  |  |     |           +- ReturnStatement
                  |              |  |  |     |              +- InfixExpression
                  |              |  |  |     |                 +- PropertyGet
                  |              |  |  |     |                 |  +- Name
                  |              |  |  |     |                 |  +- Name
                  |              |  |  |     |                 +- Name
                  |              |  |  |     +- ReturnStatement
                  |              |  |  |        +- InfixExpression
                  |              |  |  |           +- InfixExpression
                  |              |  |  |           |  +- PropertyGet
                  |              |  |  |           |  |  +- Name
                  |              |  |  |           |  |  +- Name
                  |              |  |  |           |  +- Name
                  |              |  |  |           +- InfixExpression
                  |              |  |  |              +- InfixExpression
                  |              |  |  |              |  +- PropertyGet
                  |              |  |  |              |  |  +- Name
                  |              |  |  |              |  |  +- Name
                  |              |  |  |              |  +- UnaryExpression
                  |              |  |  |              |     +- Name
                  |              |  |  |              +- InfixExpression
                  |              |  |  |                 +- FunctionCall
                  |              |  |  |                 |  +- Name
                  |              |  |  |                 |  +- Name
                  |              |  |  |                 +- Name
                  |              |  |  +- ReturnStatement
                  |              |  |  |  +- InfixExpression
                  |              |  |  |     +- PropertyGet
                  |              |  |  |     |  +- Name
                  |              |  |  |     |  +- Name
                  |              |  |  |     +- Name
                  |              |  |  +- Comment
                  |              |  |  +- Comment
                  |              |  |  +- Comment
                  |              |  +- IfStatement
                  |              |     +- InfixExpression
                  |              |     |  +- StringLiteral
                  |              |     |  +- Name
                  |              |     +- Scope
                  |              |        +- ReturnStatement
                  |              |           +- InfixExpression
                  |              |              +- PropertyGet
                  |              |              |  +- Name
                  |              |              |  +- Name
                  |              |              +- Name
                  |              +- ReturnStatement
                  |                 +- KeywordLiteral
                  +- Comment
                  +- FunctionNode
                  |  +- Name
                  |  +- Name
                  |  +- Block
                  |     +- ReturnStatement
                  |        +- FunctionCall
                  |           +- Name
                  |           +- FunctionNode
                  |              +- Name
                  |              +- Block
                  |                 +- ExpressionStatement
                  |                 |  +- Assignment
                  |                 |     +- Name
                  |                 |     +- UnaryExpression
                  |                 |        +- Name
                  |                 +- ReturnStatement
                  |                    +- FunctionCall
                  |                       +- Name
                  |                       +- FunctionNode
                  |                          +- Name
                  |                          +- Name
                  |                          +- Block
                  |                             +- VariableDeclaration
                  |                             |  +- VariableInitializer
                  |                             |  |  +- Name
                  |                             |  +- VariableInitializer
                  |                             |  |  +- Name
                  |                             |  |  +- FunctionCall
                  |                             |  |     +- Name
                  |                             |  |     +- ArrayLiteral
                  |                             |  |     +- PropertyGet
                  |                             |  |     |  +- Name
                  |                             |  |     |  +- Name
                  |                             |  |     +- Name
                  |                             |  +- VariableInitializer
                  |                             |     +- Name
                  |                             |     +- PropertyGet
                  |                             |        +- Name
                  |                             |        +- Name
                  |                             +- Comment
                  |                             +- WhileLoop
                  |                                +- UpdateExpression
                  |                                |  +- Name
                  |                                +- Scope
                  |                                   +- IfStatement
                  |                                      +- ElementGet
                  |                                      |  +- Name
                  |                                      |  +- ParenthesizedExpression
                  |                                      |     +- Assignment
                  |                                      |        +- Name
                  |                                      |        +- ElementGet
                  |                                      |           +- Name
                  |                                      |           +- Name
                  |                                      +- Scope
                  |                                         +- ExpressionStatement
                  |                                            +- Assignment
                  |                                               +- ElementGet
                  |                                               |  +- Name
                  |                                               |  +- Name
                  |                                               +- UnaryExpression
                  |                                                  +- ParenthesizedExpression
                  |                                                     +- Assignment
                  |                                                        +- ElementGet
                  |                                                        |  +- Name
                  |                                                        |  +- Name
                  |                                                        +- ElementGet
                  |                                                           +- Name
                  |                                                           +- Name
                  +- Comment
                  +- FunctionNode
                  |  +- Name
                  |  +- Name
                  |  +- Block
                  |     +- ReturnStatement
                  |        +- InfixExpression
                  |           +- Name
                  |           +- InfixExpression
                  |              +- InfixExpression
                  |              |  +- UnaryExpression
                  |              |  |  +- PropertyGet
                  |              |  |     +- Name
                  |              |  |     +- Name
                  |              |  +- StringLiteral
                  |              +- Name
                  +- Comment
                  +- FunctionNode
                  |  +- Name
                  |  +- Name
                  |  +- Block
                  |     +- VariableDeclaration
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  +- VariableInitializer
                  |     |     +- Name
                  |     |     +- ConditionalExpression
                  |     |        +- Name
                  |     |        +- InfixExpression
                  |     |        |  +- PropertyGet
                  |     |        |  |  +- Name
                  |     |        |  |  +- Name
                  |     |        |  +- Name
                  |     |        +- Name
                  |     +- Comment
                  |     +- Comment
                  |     +- Comment
                  |     +- Comment
                  |     +- Comment
                  |     +- IfStatement
                  |     |  +- InfixExpression
                  |     |  |  +- InfixExpression
                  |     |  |  |  +- Name
                  |     |  |  |  +- Name
                  |     |  |  +- InfixExpression
                  |     |  |     +- PropertyGet
                  |     |  |     |  +- Name
                  |     |  |     |  +- Name
                  |     |  |     +- NumberLiteral
                  |     |  +- Scope
                  |     |     +- ReturnStatement
                  |     +- ExpressionStatement
                  |     |  +- Assignment
                  |     |     +- Name
                  |     |     +- Name
                  |     +- ExpressionStatement
                  |     |  +- Assignment
                  |     |     +- Name
                  |     |     +- PropertyGet
                  |     |        +- Name
                  |     |        +- Name
                  |     +- ExpressionStatement
                  |     |  +- Assignment
                  |     |     +- Name
                  |     |     +- UnaryExpression
                  |     |        +- FunctionCall
                  |     |           +- PropertyGet
                  |     |           |  +- Name
                  |     |           |  +- Name
                  |     |           +- Name
                  |     +- Comment
                  |     +- Comment
                  |     +- Comment
                  |     +- Comment
                  |     +- Comment
                  |     +- Comment
                  |     +- IfStatement
                  |        +- InfixExpression
                  |        |  +- InfixExpression
                  |        |  |  +- Name
                  |        |  |  +- Name
                  |        |  +- InfixExpression
                  |        |     +- ParenthesizedExpression
                  |        |     |  +- Assignment
                  |        |     |     +- Name
                  |        |     |     +- PropertyGet
                  |        |     |        +- Name
                  |        |     |        +- Name
                  |        |     +- InfixExpression
                  |        |        +- PropertyGet
                  |        |        |  +- Name
                  |        |        |  +- Name
                  |        |        +- Name
                  |        +- Scope
                  |           +- Comment
                  |           +- ExpressionStatement
                  |              +- FunctionCall
                  |                 +- PropertyGet
                  |                 |  +- Name
                  |                 |  +- Name
                  |                 +- StringLiteral
                  |                 +- Name
                  +- ExpressionStatement
                  |  +- Assignment
                  |     +- PropertyGet
                  |     |  +- Name
                  |     |  +- Name
                  |     +- FunctionNode
                  |        +- Name
                  |        +- Name
                  |        +- Block
                  |           +- ReturnStatement
                  |              +- FunctionCall
                  |                 +- Name
                  |                 +- Name
                  |                 +- KeywordLiteral
                  |                 +- KeywordLiteral
                  |                 +- Name
                  +- ExpressionStatement
                  |  +- Assignment
                  |     +- PropertyGet
                  |     |  +- Name
                  |     |  +- Name
                  |     +- FunctionNode
                  |        +- Name
                  |        +- Name
                  |        +- Block
                  |           +- ExpressionStatement
                  |           |  +- FunctionCall
                  |           |     +- Name
                  |           |     +- Name
                  |           +- IfStatement
                  |           |  +- InfixExpression
                  |           |  |  +- Name
                  |           |  |  +- InfixExpression
                  |           |  |     +- UnaryExpression
                  |           |  |     |  +- ElementGet
                  |           |  |     |     +- Name
                  |           |  |     |     +- InfixExpression
                  |           |  |     |        +- Name
                  |           |  |     |        +- StringLiteral
                  |           |  |     +- ParenthesizedExpression
                  |           |  |        +- InfixExpression
                  |           |  |           +- UnaryExpression
                  |           |  |           |  +- Name
                  |           |  |           +- UnaryExpression
                  |           |  |              +- FunctionCall
                  |           |  |                 +- PropertyGet
                  |           |  |                 |  +- Name
                  |           |  |                 |  +- Name
                  |           |  |                 +- Name
                  |           |  +- Scope
                  |           |     +- TryStatement
                  |           |        +- Scope
                  |           |        |  +- ReturnStatement
                  |           |        |     +- FunctionCall
                  |           |        |        +- PropertyGet
                  |           |        |        |  +- Name
                  |           |        |        |  +- Name
                  |           |        |        +- Name
                  |           |        |        +- Name
                  |           |        +- CatchClause
                  |           |           +- Name
                  |           |           +- Scope
                  |           |              +- ExpressionStatement
                  |           |                 +- FunctionCall
                  |           |                    +- Name
                  |           |                    +- Name
                  |           |                    +- KeywordLiteral
                  |           +- ReturnStatement
                  |              +- InfixExpression
                  |                 +- PropertyGet
                  |                 |  +- FunctionCall
                  |                 |  |  +- Name
                  |                 |  |  +- Name
                  |                 |  |  +- Name
                  |                 |  |  +- KeywordLiteral
                  |                 |  |  +- ArrayLiteral
                  |                 |  |     +- Name
                  |                 |  +- Name
                  |                 +- NumberLiteral
                  +- ExpressionStatement
                  |  +- Assignment
                  |     +- Name
                  |     +- Assignment
                  |        +- PropertyGet
                  |        |  +- Name
                  |        |  +- Name
                  |        +- ObjectLiteral
                  |           +- ObjectProperty
                  |           |  +- Name
                  |           |  +- NumberLiteral
                  |           +- ObjectProperty
                  |           |  +- Name
                  |           |  +- Name
                  |           +- ObjectProperty
                  |           |  +- Name
                  |           |  +- Name
                  |           +- ObjectProperty
                  |           |  +- Name
                  |           |  +- ObjectLiteral
                  |           |     +- ObjectProperty
                  |           |     |  +- Name
                  |           |     |  +- FunctionNode
                  |           |     |     +- Name
                  |           |     |     +- Name
                  |           |     |     +- Block
                  |           |     |        +- IfStatement
                  |           |     |           +- InfixExpression
                  |           |     |           |  +- InfixExpression
                  |           |     |           |  |  +- UnaryExpression
                  |           |     |           |  |  |  +- PropertyGet
                  |           |     |           |  |  |     +- Name
                  |           |     |           |  |  |     +- Name
                  |           |     |           |  |  +- StringLiteral
                  |           |     |           |  +- Name
                  |           |     |           +- Scope
                  |           |     |              +- VariableDeclaration
                  |           |     |              |  +- VariableInitializer
                  |           |     |              |     +- Name
                  |           |     |              |     +- FunctionCall
                  |           |     |              |        +- PropertyGet
                  |           |     |              |        |  +- Name
                  |           |     |              |        |  +- Name
                  |           |     |              |        +- Name
                  |           |     |              +- ReturnStatement
                  |           |     |                 +- ConditionalExpression
                  |           |     |                    +- Name
                  |           |     |                    +- ArrayLiteral
                  |           |     |                    |  +- Name
                  |           |     |                    +- ArrayLiteral
                  |           |     +- ObjectProperty
                  |           |     |  +- Name
                  |           |     |  +- FunctionNode
                  |           |     |     +- Name
                  |           |     |     +- Name
                  |           |     |     +- Block
                  |           |     |        +- IfStatement
                  |           |     |           +- InfixExpression
                  |           |     |           |  +- UnaryExpression
                  |           |     |           |  |  +- PropertyGet
                  |           |     |           |  |     +- Name
                  |           |     |           |  |     +- Name
                  |           |     |           |  +- StringLiteral
                  |           |     |           +- Scope
                  |           |     |           |  +- ReturnStatement
                  |           |     |           |  |  +- FunctionCall
                  |           |     |           |  |     +- PropertyGet
                  |           |     |           |  |     |  +- Name
                  |           |     |           |  |     |  +- Name
                  |           |     |           |  |     +- Name
                  |           |     |           |  +- Comment
                  |           |     |           +- Scope
                  |           |     |              +- ReturnStatement
                  |           |     |                 +- FunctionCall
                  |           |     |                    +- PropertyGet
                  |           |     |                    |  +- Name
                  |           |     |                    |  +- Name
                  |           |     |                    +- Name
                  |           |     +- ObjectProperty
                  |           |        +- Name
                  |           |        +- FunctionNode
                  |           |           +- Name
                  |           |           +- Name
                  |           |           +- Block
                  |           |              +- IfStatement
                  |           |                 +- InfixExpression
                  |           |                 |  +- InfixExpression
                  |           |                 |  |  +- UnaryExpression
                  |           |                 |  |  |  +- PropertyGet
                  |           |                 |  |  |     +- Name
                  |           |                 |  |  |     +- Name
                  |           |                 |  |  +- StringLiteral
                  |           |                 |  +- Name
                  |           |                 +- Scope
                  |           |                    +- ReturnStatement
                  |           |                       +- FunctionCall
                  |           |                          +- PropertyGet
                  |           |                          |  +- Name
                  |           |                          |  +- Name
                  |           |                          +- Name
                  |           +- ObjectProperty
                  |           |  +- Name
                  |           |  +- ObjectLiteral
                  |           |     +- ObjectProperty
                  |           |     |  +- StringLiteral
                  |           |     |  +- ObjectLiteral
                  |           |     |     +- ObjectProperty
                  |           |     |     |  +- Name
                  |           |     |     |  +- StringLiteral
                  |           |     |     +- ObjectProperty
                  |           |     |        +- Name
                  |           |     |        +- KeywordLiteral
                  |           |     +- ObjectProperty
                  |           |     |  +- StringLiteral
                  |           |     |  +- ObjectLiteral
                  |           |     |     +- ObjectProperty
                  |           |     |        +- Name
                  |           |     |        +- StringLiteral
                  |           |     +- ObjectProperty
                  |           |     |  +- StringLiteral
                  |           |     |  +- ObjectLiteral
                  |           |     |     +- ObjectProperty
                  |           |     |     |  +- Name
                  |           |     |     |  +- StringLiteral
                  |           |     |     +- ObjectProperty
                  |           |     |        +- Name
                  |           |     |        +- KeywordLiteral
                  |           |     +- ObjectProperty
                  |           |        +- StringLiteral
                  |           |        +- ObjectLiteral
                  |           |           +- ObjectProperty
                  |           |              +- Name
                  |           |              +- StringLiteral
                  |           +- ObjectProperty
                  |           |  +- Name
                  |           |  +- ObjectLiteral
                  |           |     +- ObjectProperty
                  |           |     |  +- Name
                  |           |     |  +- FunctionNode
                  |           |     |     +- Name
                  |           |     |     +- Block
                  |           |     |        +- ExpressionStatement
                  |           |     |        |  +- Assignment
                  |           |     |        |     +- ElementGet
                  |           |     |        |     |  +- Name
                  |           |     |        |     |  +- NumberLiteral
                  |           |     |        |     +- FunctionCall
                  |           |     |        |        +- PropertyGet
                  |           |     |        |        |  +- ElementGet
                  |           |     |        |        |  |  +- Name
                  |           |     |        |        |  |  +- NumberLiteral
                  |           |     |        |        |  +- Name
                  |           |     |        |        +- Name
                  |           |     |        |        +- Name
                  |           |     |        +- Comment
                  |           |     |        +- ExpressionStatement
                  |           |     |        |  +- Assignment
                  |           |     |        |     +- ElementGet
                  |           |     |        |     |  +- Name
                  |           |     |        |     |  +- NumberLiteral
                  |           |     |        |     +- FunctionCall
                  |           |     |        |        +- PropertyGet
                  |           |     |        |        |  +- ParenthesizedExpression
                  |           |     |        |        |  |  +- InfixExpression
                  |           |     |        |        |  |     +- ElementGet
                  |           |     |        |        |  |     |  +- Name
                  |           |     |        |        |  |     |  +- NumberLiteral
                  |           |     |        |        |  |     +- InfixExpression
                  |           |     |        |        |  |        +- ElementGet
                  |           |     |        |        |  |        |  +- Name
                  |           |     |        |        |  |        |  +- NumberLiteral
                  |           |     |        |        |  |        +- InfixExpression
                  |           |     |        |        |  |           +- ElementGet
                  |           |     |        |        |  |           |  +- Name
                  |           |     |        |        |  |           |  +- NumberLiteral
                  |           |     |        |        |  |           +- StringLiteral
                  |           |     |        |        |  +- Name
                  |           |     |        |        +- Name
                  |           |     |        |        +- Name
                  |           |     |        +- IfStatement
                  |           |     |        |  +- InfixExpression
                  |           |     |        |  |  +- ElementGet
                  |           |     |        |  |  |  +- Name
                  |           |     |        |  |  |  +- NumberLiteral
                  |           |     |        |  |  +- StringLiteral
                  |           |     |        |  +- Scope
                  |           |     |        |     +- ExpressionStatement
                  |           |     |        |        +- Assignment
                  |           |     |        |           +- ElementGet
                  |           |     |        |           |  +- Name
                  |           |     |        |           |  +- NumberLiteral
                  |           |     |        |           +- InfixExpression
                  |           |     |        |              +- InfixExpression
                  |           |     |        |              |  +- StringLiteral
                  |           |     |        |              |  +- ElementGet
                  |           |     |        |              |     +- Name
                  |           |     |        |              |     +- NumberLiteral
                  |           |     |        |              +- StringLiteral
                  |           |     |        +- ReturnStatement
                  |           |     |           +- FunctionCall
                  |           |     |              +- PropertyGet
                  |           |     |              |  +- Name
                  |           |     |              |  +- Name
                  |           |     |              +- NumberLiteral
                  |           |     |              +- NumberLiteral
                  |           |     +- ObjectProperty
                  |           |     |  +- Name
                  |           |     |  +- FunctionNode
                  |           |     |     +- Name
                  |           |     |     +- Block
                  |           |     |        +- Comment
                  |           |     |        +- ExpressionStatement
                  |           |     |        |  +- Assignment
                  |           |     |        |     +- ElementGet
                  |           |     |        |     |  +- Name
                  |           |     |        |     |  +- NumberLiteral
                  |           |     |        |     +- FunctionCall
                  |           |     |        |        +- PropertyGet
                  |           |     |        |           +- ElementGet
                  |           |     |        |           |  +- Name
                  |           |     |        |           |  +- NumberLiteral
                  |           |     |        |           +- Name
                  |           |     |        +- IfStatement
                  |           |     |        |  +- InfixExpression
                  |           |     |        |  |  +- FunctionCall
                  |           |     |        |  |  |  +- PropertyGet
                  |           |     |        |  |  |  |  +- ElementGet
                  |           |     |        |  |  |  |  |  +- Name
                  |           |     |        |  |  |  |  |  +- NumberLiteral
                  |           |     |        |  |  |  |  +- Name
                  |           |     |        |  |  |  +- NumberLiteral
                  |           |     |        |  |  |  +- NumberLiteral
                  |           |     |        |  |  +- StringLiteral
                  |           |     |        |  +- Scope
                  |           |     |        |  |  +- Comment
                  |           |     |        |  |  +- IfStatement
                  |           |     |        |  |  |  +- UnaryExpression
                  |           |     |        |  |  |  |  +- ElementGet
                  |           |     |        |  |  |  |     +- Name
                  |           |     |        |  |  |  |     +- NumberLiteral
                  |           |     |        |  |  |  +- Scope
                  |           |     |        |  |  |     +- ExpressionStatement
                  |           |     |        |  |  |        +- FunctionCall
                  |           |     |        |  |  |           +- Name
                  |           |     |        |  |  |           +- ElementGet
                  |           |     |        |  |  |              +- Name
                  |           |     |        |  |  |              +- NumberLiteral
                  |           |     |        |  |  +- ExpressionStatement
                  |           |     |        |  |  |  +- Assignment
                  |           |     |        |  |  |     +- ElementGet
                  |           |     |        |  |  |     |  +- Name
                  |           |     |        |  |  |     |  +- NumberLiteral
                  |           |     |        |  |  |     +- UnaryExpression
                  |           |     |        |  |  |        +- ParenthesizedExpression
                  |           |     |        |  |  |           +- ConditionalExpression
                  |           |     |        |  |  |              +- ElementGet
                  |           |     |        |  |  |              |  +- Name
                  |           |     |        |  |  |              |  +- NumberLiteral
                  |           |     |        |  |  |              +- InfixExpression
                  |           |     |        |  |  |              |  +- ElementGet
                  |           |     |        |  |  |              |  |  +- Name
                  |           |     |        |  |  |              |  |  +- NumberLiteral
                  |           |     |        |  |  |              |  +- ParenthesizedExpression
                  |           |     |        |  |  |              |     +- InfixExpression
                  |           |     |        |  |  |              |        +- ElementGet
                  |           |     |        |  |  |              |        |  +- Name
                  |           |     |        |  |  |              |        |  +- NumberLiteral
                  |           |     |        |  |  |              |        +- NumberLiteral
                  |           |     |        |  |  |              +- InfixExpression
                  |           |     |        |  |  |                 +- NumberLiteral
                  |           |     |        |  |  |                 +- ParenthesizedExpression
                  |           |     |        |  |  |                    +- InfixExpression
                  |           |     |        |  |  |                       +- InfixExpression
                  |           |     |        |  |  |                       |  +- ElementGet
                  |           |     |        |  |  |                       |  |  +- Name
                  |           |     |        |  |  |                       |  |  +- NumberLiteral
                  |           |     |        |  |  |                       |  +- StringLiteral
                  |           |     |        |  |  |                       +- InfixExpression
                  |           |     |        |  |  |                          +- ElementGet
                  |           |     |        |  |  |                          |  +- Name
                  |           |     |        |  |  |                          |  +- NumberLiteral
                  |           |     |        |  |  |                          +- StringLiteral
                  |           |     |        |  |  +- ExpressionStatement
                  |           |     |        |  |  |  +- Assignment
                  |           |     |        |  |  |     +- ElementGet
                  |           |     |        |  |  |     |  +- Name
                  |           |     |        |  |  |     |  +- NumberLiteral
                  |           |     |        |  |  |     +- UnaryExpression
                  |           |     |        |  |  |        +- ParenthesizedExpression
                  |           |     |        |  |  |           +- InfixExpression
                  |           |     |        |  |  |              +- ParenthesizedExpression
                  |           |     |        |  |  |              |  +- InfixExpression
                  |           |     |        |  |  |              |     +- ElementGet
                  |           |     |        |  |  |              |     |  +- Name
                  |           |     |        |  |  |              |     |  +- NumberLiteral
                  |           |     |        |  |  |              |     +- ElementGet
                  |           |     |        |  |  |              |        +- Name
                  |           |     |        |  |  |              |        +- NumberLiteral
                  |           |     |        |  |  |              +- InfixExpression
                  |           |     |        |  |  |                 +- ElementGet
                  |           |     |        |  |  |                 |  +- Name
                  |           |     |        |  |  |                 |  +- NumberLiteral
                  |           |     |        |  |  |                 +- StringLiteral
                  |           |     |        |  |  +- Comment
                  |           |     |        |  +- IfStatement
                  |           |     |        |     +- ElementGet
                  |           |     |        |     |  +- Name
                  |           |     |        |     |  +- NumberLiteral
                  |           |     |        |     +- Scope
                  |           |     |        |        +- ExpressionStatement
                  |           |     |        |           +- FunctionCall
                  |           |     |        |              +- Name
                  |           |     |        |              +- ElementGet
                  |           |     |        |                 +- Name
                  |           |     |        |                 +- NumberLiteral
                  |           |     |        +- ReturnStatement
                  |           |     |           +- Name
                  |           |     +- ObjectProperty
                  |           |        +- Name
                  |           |        +- FunctionNode
                  |           |           +- Name
                  |           |           +- Block
                  |           |              +- VariableDeclaration
                  |           |              |  +- VariableInitializer
                  |           |              |  |  +- Name
                  |           |              |  +- VariableInitializer
                  |           |              |     +- Name
                  |           |              |     +- InfixExpression
                  |           |              |        +- UnaryExpression
                  |           |              |        |  +- ElementGet
                  |           |              |        |     +- Name
                  |           |              |        |     +- NumberLiteral
                  |           |              |        +- ElementGet
                  |           |              |           +- Name
                  |           |              |           +- NumberLiteral
                  |           |              +- IfStatement
                  |           |              |  +- FunctionCall
                  |           |              |  |  +- PropertyGet
                  |           |              |  |  |  +- PropertyGet
                  |           |              |  |  |  |  +- Name
                  |           |              |  |  |  |  +- Name
                  |           |              |  |  |  +- Name
                  |           |              |  |  +- ElementGet
                  |           |              |  |     +- Name
                  |           |              |  |     +- NumberLiteral
                  |           |              |  +- Scope
                  |           |              |     +- ReturnStatement
                  |           |              |        +- KeywordLiteral
                  |           |              +- IfStatement
                  |           |              |  +- ElementGet
                  |           |              |  |  +- Name
                  |           |              |  |  +- NumberLiteral
                  |           |              |  +- Scope
                  |           |              |  |  +- ExpressionStatement
                  |           |              |  |  |  +- Assignment
                  |           |              |  |  |     +- ElementGet
                  |           |              |  |  |     |  +- Name
                  |           |              |  |  |     |  +- NumberLiteral
                  |           |              |  |  |     +- InfixExpression
                  |           |              |  |  |        +- ElementGet
                  |           |              |  |  |        |  +- Name
                  |           |              |  |  |        |  +- NumberLiteral
                  |           |              |  |  |        +- InfixExpression
                  |           |              |  |  |           +- ElementGet
                  |           |              |  |  |           |  +- Name
                  |           |              |  |  |           |  +- NumberLiteral
                  |           |              |  |  |           +- StringLiteral
                  |           |              |  |  +- Comment
                  |           |              |  +- IfStatement
                  |           |              |     +- InfixExpression
                  |           |              |     |  +- Name
                  |           |              |     |  +- InfixExpression
                  |           |              |     |     +- FunctionCall
                  |           |              |     |     |  +- PropertyGet
                  |           |              |     |     |  |  +- Name
                  |           |              |     |     |  |  +- Name
                  |           |              |     |     |  +- Name
                  |           |              |     |     +- InfixExpression
                  |           |              |     |        +- ParenthesizedExpression
                  |           |              |     |        |  +- Assignment
                  |           |              |     |        |     +- Name
                  |           |              |     |        |     +- FunctionCall
                  |           |              |     |        |        +- Name
                  |           |              |     |        |        +- Name
                  |           |              |     |        |        +- KeywordLiteral
                  |           |              |     |        +- ParenthesizedExpression
                  |           |              |     |           +- Assignment
                  |           |              |     |              +- Name
                  |           |              |     |              +- InfixExpression
                  |           |              |     |                 +- FunctionCall
                  |           |              |     |                 |  +- PropertyGet
                  |           |              |     |                 |  |  +- Name
                  |           |              |     |                 |  |  +- Name
                  |           |              |     |                 |  +- StringLiteral
                  |           |              |     |                 |  +- InfixExpression
                  |           |              |     |                 |     +- PropertyGet
                  |           |              |     |                 |     |  +- Name
                  |           |              |     |                 |     |  +- Name
                  |           |              |     |                 |     +- Name
                  |           |              |     |                 +- PropertyGet
                  |           |              |     |                    +- Name
                  |           |              |     |                    +- Name
                  |           |              |     +- Scope
                  |           |              |        +- Comment
                  |           |              |        +- ExpressionStatement
                  |           |              |        |  +- Assignment
                  |           |              |        |     +- ElementGet
                  |           |              |        |     |  +- Name
                  |           |              |        |     |  +- NumberLiteral
                  |           |              |        |     +- FunctionCall
                  |           |              |        |        +- PropertyGet
                  |           |              |        |        |  +- ElementGet
                  |           |              |        |        |  |  +- Name
                  |           |              |        |        |  |  +- NumberLiteral
                  |           |              |        |        |  +- Name
                  |           |              |        |        +- NumberLiteral
                  |           |              |        |        +- Name
                  |           |              |        +- ExpressionStatement
                  |           |              |           +- Assignment
                  |           |              |              +- ElementGet
                  |           |              |              |  +- Name
                  |           |              |              |  +- NumberLiteral
                  |           |              |              +- FunctionCall
                  |           |              |                 +- PropertyGet
                  |           |              |                 |  +- Name
                  |           |              |                 |  +- Name
                  |           |              |                 +- NumberLiteral
                  |           |              |                 +- Name
                  |           |              +- ReturnStatement
                  |           |                 +- FunctionCall
                  |           |                    +- PropertyGet
                  |           |                    |  +- Name
                  |           |                    |  +- Name
                  |           |                    +- NumberLiteral
                  |           |                    +- NumberLiteral
                  |           +- ObjectProperty
                  |           |  +- Name
                  |           |  +- ObjectLiteral
                  |           |     +- ObjectProperty
                  |           |     |  +- Name
                  |           |     |  +- FunctionNode
                  |           |     |     +- Name
                  |           |     |     +- Block
                  |           |     |        +- VariableDeclaration
                  |           |     |        |  +- VariableInitializer
                  |           |     |        |     +- Name
                  |           |     |        |     +- FunctionCall
                  |           |     |        |        +- PropertyGet
                  |           |     |        |        |  +- Name
                  |           |     |        |        |  +- Name
                  |           |     |        |        +- Name
                  |           |     |        |        +- Name
                  |           |     |        +- ReturnStatement
                  |           |     |           +- FunctionNode
                  |           |     |              +- Name
                  |           |     |              +- Block
                  |           |     |                 +- ReturnStatement
                  |           |     |                    +- InfixExpression
                  |           |     |                       +- FunctionCall
                  |           |     |                       |  +- PropertyGet
                  |           |     |                       |  |  +- Name
                  |           |     |                       |  |  +- Name
                  |           |     |                       |  +- StringLiteral
                  |           |     |                       +- Name
                  |           |     +- ObjectProperty
                  |           |     |  +- Name
                  |           |     |  +- FunctionNode
                  |           |     |     +- Name
                  |           |     |     +- Block
                  |           |     |        +- VariableDeclaration
                  |           |     |        |  +- VariableInitializer
                  |           |     |        |     +- Name
                  |           |     |        |     +- FunctionCall
                  |           |     |        |        +- PropertyGet
                  |           |     |        |           +- FunctionCall
                  |           |     |        |           |  +- PropertyGet
                  |           |     |        |           |  |  +- Name
                  |           |     |        |           |  |  +- Name
                  |           |     |        |           |  +- Name
                  |           |     |        |           |  +- Name
                  |           |     |        |           +- Name
                  |           |     |        +- ReturnStatement
                  |           |     |           +- ConditionalExpression
                  |           |     |              +- InfixExpression
                  |           |     |              |  +- Name
                  |           |     |              |  +- StringLiteral
                  |           |     |              +- FunctionNode
                  |           |     |              |  +- Block
                  |           |     |              |     +- ReturnStatement
                  |           |     |              |        +- KeywordLiteral
                  |           |     |              +- FunctionNode
                  |           |     |                 +- Name
                  |           |     |                 +- Block
                  |           |     |                    +- ReturnStatement
                  |           |     |                       +- FunctionCall
                  |           |     |                          +- Name
                  |           |     |                          +- Name
                  |           |     |                          +- Name
                  |           |     +- ObjectProperty
                  |           |     |  +- Name
                  |           |     |  +- FunctionNode
                  |           |     |     +- Name
                  |           |     |     +- Block
                  |           |     |        +- VariableDeclaration
                  |           |     |        |  +- VariableInitializer
                  |           |     |        |     +- Name
                  |           |     |        |     +- ElementGet
                  |           |     |        |        +- Name
                  |           |     |        |        +- InfixExpression
                  |           |     |        |           +- Name
                  |           |     |        |           +- StringLiteral
                  |           |     |        +- ReturnStatement
                  |           |     |           +- InfixExpression
                  |           |     |              +- Name
                  |           |     |              +- InfixExpression
                  |           |     |                 +- ParenthesizedExpression
                  |           |     |                 |  +- Assignment
                  |           |     |                 |     +- Name
                  |           |     |                 |     +- NewExpression
                  |           |     |                 |        +- Name
                  |           |     |                 |        +- InfixExpression
                  |           |     |                 |           +- InfixExpression
                  |           |     |                 |           |  +- InfixExpression
                  |           |     |                 |           |  |  +- InfixExpression
                  |           |     |                 |           |  |  |  +- InfixExpression
                  |           |     |                 |           |  |  |  |  +- InfixExpression
                  |           |     |                 |           |  |  |  |  |  +- StringLiteral
                  |           |     |                 |           |  |  |  |  |  +- Name
                  |           |     |                 |           |  |  |  |  +- StringLiteral
                  |           |     |                 |           |  |  |  +- Name
                  |           |     |                 |           |  |  +- StringLiteral
                  |           |     |                 |           |  +- Name
                  |           |     |                 |           +- StringLiteral
                  |           |     |                 +- FunctionCall
                  |           |     |                    +- Name
                  |           |     |                    +- Name
                  |           |     |                    +- FunctionNode
                  |           |     |                       +- Name
                  |           |     |                       +- Block
                  |           |     |                          +- ReturnStatement
                  |           |     |                             +- FunctionCall
                  |           |     |                                +- PropertyGet
                  |           |     |                                |  +- Name
                  |           |     |                                |  +- Name
                  |           |     |                                +- InfixExpression
                  |           |     |                                   +- InfixExpression
                  |           |     |                                   |  +- InfixExpression
                  |           |     |                                   |  |  +- UnaryExpression
                  |           |     |                                   |  |  |  +- PropertyGet
                  |           |     |                                   |  |  |     +- Name
                  |           |     |                                   |  |  |     +- Name
                  |           |     |                                   |  |  +- StringLiteral
                  |           |     |                                   |  +- PropertyGet
                  |           |     |                                   |     +- Name
                  |           |     |                                   |     +- Name
                  |           |     |                                   +- InfixExpression
                  |           |     |                                      +- InfixExpression
                  |           |     |                                      |  +- InfixExpression
                  |           |     |                                      |  |  +- UnaryExpression
                  |           |     |                                      |  |  |  +- PropertyGet
                  |           |     |                                      |  |  |     +- Name
                  |           |     |                                      |  |  |     +- Name
                  |           |     |                                      |  |  +- StringLiteral
                  |           |     |                                      |  +- FunctionCall
                  |           |     |                                      |     +- PropertyGet
                  |           |     |                                      |     |  +- Name
                  |           |     |                                      |     |  +- Name
                  |           |     |                                      |     +- StringLiteral
                  |           |     |                                      +- StringLiteral
                  |           |     +- ObjectProperty
                  |           |     |  +- Name
                  |           |     |  +- FunctionNode
                  |           |     |     +- Name
                  |           |     |     +- Name
                  |           |     |     +- Name
                  |           |     |     +- Block
                  |           |     |        +- ReturnStatement
                  |           |     |           +- FunctionNode
                  |           |     |              +- Name
                  |           |     |              +- Block
                  |           |     |                 +- VariableDeclaration
                  |           |     |                 |  +- VariableInitializer
                  |           |     |                 |     +- Name
                  |           |     |                 |     +- FunctionCall
                  |           |     |                 |        +- PropertyGet
                  |           |     |                 |        |  +- Name
                  |           |     |                 |        |  +- Name
                  |           |     |                 |        +- Name
                  |           |     |                 |        +- Name
                  |           |     |                 +- IfStatement
                  |           |     |                 |  +- InfixExpression
                  |           |     |                 |  |  +- Name
                  |           |     |                 |  |  +- KeywordLiteral
                  |           |     |                 |  +- Scope
                  |           |     |                 |     +- ReturnStatement
                  |           |     |                 |        +- InfixExpression
                  |           |     |                 |           +- Name
                  |           |     |                 |           +- StringLiteral
                  |           |     |                 +- IfStatement
                  |           |     |                 |  +- UnaryExpression
                  |           |     |                 |  |  +- Name
                  |           |     |                 |  +- Scope
                  |           |     |                 |     +- ReturnStatement
                  |           |     |                 |        +- KeywordLiteral
                  |           |     |                 +- ExpressionStatement
                  |           |     |                 |  +- Assignment
                  |           |     |                 |     +- Name
                  |           |     |                 |     +- StringLiteral
                  |           |     |                 +- IfStatement
                  |           |     |                 |  +- InfixExpression
                  |           |     |                 |  |  +- Name
                  |           |     |                 |  |  +- StringLiteral
                  |           |     |                 |  +- Scope
                  |           |     |                 |     +- ReturnStatement
                  |           |     |                 |        +- InfixExpression
                  |           |     |                 |           +- Name
                  |           |     |                 |           +- Name
                  |           |     |                 +- IfStatement
                  |           |     |                 |  +- InfixExpression
                  |           |     |                 |  |  +- Name
                  |           |     |                 |  |  +- StringLiteral
                  |           |     |                 |  +- Scope
                  |           |     |                 |     +- ReturnStatement
                  |           |     |                 |        +- InfixExpression
                  |           |     |                 |           +- Name
                  |           |     |                 |           +- Name
                  |           |     |                 +- IfStatement
                  |           |     |                 |  +- InfixExpression
                  |           |     |                 |  |  +- Name
                  |           |     |                 |  |  +- StringLiteral
                  |           |     |                 |  +- Scope
                  |           |     |                 |     +- ReturnStatement
                  |           |     |                 |        +- InfixExpression
                  |           |     |                 |           +- Name
                  |           |     |                 |           +- InfixExpression
                  |           |     |                 |              +- FunctionCall
                  |           |     |                 |              |  +- PropertyGet
                  |           |     |                 |              |  |  +- Name
                  |           |     |                 |              |  |  +- Name
                  |           |     |                 |              |  +- Name
                  |           |     |                 |              +- NumberLiteral
                  |           |     |                 +- IfStatement
                  |           |     |                 |  +- InfixExpression
                  |           |     |                 |  |  +- Name
                  |           |     |                 |  |  +- StringLiteral
                  |           |     |                 |  +- Scope
                  |           |     |                 |     +- ReturnStatement
                  |           |     |                 |        +- InfixExpression
                  |           |     |                 |           +- Name
                  |           |     |                 |           +- InfixExpression
                  |           |     |                 |              +- FunctionCall
                  |           |     |                 |              |  +- PropertyGet
                  |           |     |                 |              |  |  +- Name
                  |           |     |                 |              |  |  +- Name
                  |           |     |                 |              |  +- Name
                  |           |     |                 |              +- UnaryExpression
                  |           |     |                 |                 +- NumberLiteral
                  |           |     |                 +- IfStatement
                  |           |     |                 |  +- InfixExpression
                  |           |     |                 |  |  +- Name
                  |           |     |                 |  |  +- StringLiteral
                  |           |     |                 |  +- Scope
                  |           |     |                 |     +- ReturnStatement
                  |           |     |                 |        +- InfixExpression
                  |           |     |                 |           +- Name
                  |           |     |                 |           +- InfixExpression
                  |           |     |                 |              +- FunctionCall
                  |           |     |                 |              |  +- PropertyGet
                  |           |     |                 |              |  |  +- Name
                  |           |     |                 |              |  |  +- Name
                  |           |     |                 |              |  +- UnaryExpression
                  |           |     |                 |              |     +- PropertyGet
                  |           |     |                 |              |        +- Name
                  |           |     |                 |              |        +- Name
                  |           |     |                 |              +- Name
                  |           |     |                 +- IfStatement
                  |           |     |                 |  +- InfixExpression
                  |           |     |                 |  |  +- Name
                  |           |     |                 |  |  +- StringLiteral
                  |           |     |                 |  +- Scope
                  |           |     |                 |     +- ReturnStatement
                  |           |     |                 |        +- InfixExpression
                  |           |     |                 |           +- FunctionCall
                  |           |     |                 |           |  +- PropertyGet
                  |           |     |                 |           |  |  +- ParenthesizedExpression
                  |           |     |                 |           |  |  |  +- InfixExpression
                  |           |     |                 |           |  |  |     +- InfixExpression
                  |           |     |                 |           |  |  |     |  +- StringLiteral
                  |           |     |                 |           |  |  |     |  +- FunctionCall
                  |           |     |                 |           |  |  |     |     +- PropertyGet
                  |           |     |                 |           |  |  |     |     |  +- Name
                  |           |     |                 |           |  |  |     |     |  +- Name
                  |           |     |                 |           |  |  |     |     +- Name
                  |           |     |                 |           |  |  |     |     +- StringLiteral
                  |           |     |                 |           |  |  |     +- StringLiteral
                  |           |     |                 |           |  |  +- Name
                  |           |     |                 |           |  +- Name
                  |           |     |                 |           +- UnaryExpression
                  |           |     |                 |              +- NumberLiteral
                  |           |     |                 +- IfStatement
                  |           |     |                 |  +- InfixExpression
                  |           |     |                 |  |  +- Name
                  |           |     |                 |  |  +- StringLiteral
                  |           |     |                 |  +- Scope
                  |           |     |                 |     +- ReturnStatement
                  |           |     |                 |        +- InfixExpression
                  |           |     |                 |           +- InfixExpression
                  |           |     |                 |           |  +- Name
                  |           |     |                 |           |  +- Name
                  |           |     |                 |           +- InfixExpression
                  |           |     |                 |              +- FunctionCall
                  |           |     |                 |              |  +- PropertyGet
                  |           |     |                 |              |  |  +- Name
                  |           |     |                 |              |  |  +- Name
                  |           |     |                 |              |  +- NumberLiteral
                  |           |     |                 |              |  +- InfixExpression
                  |           |     |                 |              |     +- PropertyGet
                  |           |     |                 |              |     |  +- Name
                  |           |     |                 |              |     |  +- Name
                  |           |     |                 |              |     +- NumberLiteral
                  |           |     |                 |              +- InfixExpression
                  |           |     |                 |                 +- Name
                  |           |     |                 |                 +- StringLiteral
                  |           |     |                 +- ReturnStatement
                  |           |     |                    +- KeywordLiteral
                  |           |     +- ObjectProperty
                  |           |     |  +- Name
                  |           |     |  +- FunctionNode
                  |           |     |     +- Name
                  |           |     |     +- Name
                  |           |     |     +- Name
                  |           |     |     +- Name
                  |           |     |     +- Name
                  |           |     |     +- Block
                  |           |     |        +- VariableDeclaration
                  |           |     |        |  +- VariableInitializer
                  |           |     |        |  |  +- Name
                  |           |     |        |  |  +- InfixExpression
                  |           |     |        |  |     +- FunctionCall
                  |           |     |        |  |     |  +- PropertyGet
                  |           |     |        |  |     |  |  +- Name
                  |           |     |        |  |     |  |  +- Name
                  |           |     |        |  |     |  +- NumberLiteral
                  |           |     |        |  |     |  +- NumberLiteral
                  |           |     |        |  |     +- StringLiteral
                  |           |     |        |  +- VariableInitializer
                  |           |     |        |  |  +- Name
                  |           |     |        |  |  +- InfixExpression
                  |           |     |        |  |     +- FunctionCall
                  |           |     |        |  |     |  +- PropertyGet
                  |           |     |        |  |     |  |  +- Name
                  |           |     |        |  |     |  |  +- Name
                  |           |     |        |  |     |  +- UnaryExpression
                  |           |     |        |  |     |     +- NumberLiteral
                  |           |     |        |  |     +- StringLiteral
                  |           |     |        |  +- VariableInitializer
                  |           |     |        |     +- Name
                  |           |     |        |     +- InfixExpression
                  |           |     |        |        +- Name
                  |           |     |        |        +- StringLiteral
                  |           |     |        +- ReturnStatement
                  |           |     |           +- ConditionalExpression
                  |           |     |              +- InfixExpression
                  |           |     |              |  +- InfixExpression
                  |           |     |              |  |  +- Name
                  |           |     |              |  |  +- NumberLiteral
                  |           |     |              |  +- InfixExpression
                  |           |     |              |     +- Name
                  |           |     |              |     +- NumberLiteral
                  |           |     |              +- FunctionNode
                  |           |     |              |  +- Name
                  |           |     |              |  +- Block
                  |           |     |              |     +- ReturnStatement
                  |           |     |              |        +- UnaryExpression
                  |           |     |              |           +- UnaryExpression
                  |           |     |              |              +- PropertyGet
                  |           |     |              |                 +- Name
                  |           |     |              |                 +- Name
                  |           |     |              +- FunctionNode
                  |           |     |                 +- Name
                  |           |     |                 +- Name
                  |           |     |                 +- Name
                  |           |     |                 +- Block
                  |           |     |                    +- VariableDeclaration
                  |           |     |                    |  +- VariableInitializer
                  |           |     |                    |  |  +- Name
                  |           |     |                    |  +- VariableInitializer
                  |           |     |                    |  |  +- Name
                  |           |     |                    |  +- VariableInitializer
                  |           |     |                    |  |  +- Name
                  |           |     |                    |  +- VariableInitializer
                  |           |     |                    |  |  +- Name
                  |           |     |                    |  +- VariableInitializer
                  |           |     |                    |  |  +- Name
                  |           |     |                    |  +- VariableInitializer
                  |           |     |                    |  |  +- Name
                  |           |     |                    |  |  +- ConditionalExpression
                  |           |     |                    |  |     +- InfixExpression
                  |           |     |                    |  |     |  +- Name
                  |           |     |                    |  |     |  +- Name
                  |           |     |                    |  |     +- StringLiteral
                  |           |     |                    |  |     +- StringLiteral
                  |           |     |                    |  +- VariableInitializer
                  |           |     |                    |  |  +- Name
                  |           |     |                    |  |  +- PropertyGet
                  |           |     |                    |  |     +- Name
                  |           |     |                    |  |     +- Name
                  |           |     |                    |  +- VariableInitializer
                  |           |     |                    |  |  +- Name
                  |           |     |                    |  |  +- InfixExpression
                  |           |     |                    |  |     +- Name
                  |           |     |                    |  |     +- FunctionCall
                  |           |     |                    |  |        +- PropertyGet
                  |           |     |                    |  |           +- PropertyGet
                  |           |     |                    |  |           |  +- Name
                  |           |     |                    |  |           |  +- Name
                  |           |     |                    |  |           +- Name
                  |           |     |                    |  +- VariableInitializer
                  |           |     |                    |  |  +- Name
                  |           |     |                    |  |  +- InfixExpression
                  |           |     |                    |  |     +- UnaryExpression
                  |           |     |                    |  |     |  +- Name
                  |           |     |                    |  |     +- UnaryExpression
                  |           |     |                    |  |        +- Name
                  |           |     |                    |  +- VariableInitializer
                  |           |     |                    |     +- Name
                  |           |     |                    |     +- KeywordLiteral
                  |           |     |                    +- IfStatement
                  |           |     |                       +- Name
                  |           |     |                       +- Scope
                  |           |     |                          +- Comment
                  |           |     |                          +- IfStatement
                  |           |     |                          |  +- Name
                  |           |     |                          |  +- Scope
                  |           |     |                          |     +- WhileLoop
                  |           |     |                          |     |  +- Name
                  |           |     |                          |     |  +- Scope
                  |           |     |                          |     |     +- ExpressionStatement
                  |           |     |                          |     |     |  +- Assignment
                  |           |     |                          |     |     |     +- Name
                  |           |     |                          |     |     |     +- Name
                  |           |     |                          |     |     +- WhileLoop
                  |           |     |                          |     |     |  +- ParenthesizedExpression
                  |           |     |                          |     |     |  |  +- Assignment
                  |           |     |                          |     |     |  |     +- Name
                  |           |     |                          |     |     |  |     +- ElementGet
                  |           |     |                          |     |     |  |        +- Name
                  |           |     |                          |     |     |  |        +- Name
                  |           |     |                          |     |     |  +- Scope
                  |           |     |                          |     |     |     +- IfStatement
                  |           |     |                          |     |     |        +- ConditionalExpression
                  |           |     |                          |     |     |        |  +- Name
                  |           |     |                          |     |     |        |  +- FunctionCall
                  |           |     |                          |     |     |        |  |  +- Name
                  |           |     |                          |     |     |        |  |  +- Name
                  |           |     |                          |     |     |        |  |  +- Name
                  |           |     |                          |     |     |        |  +- InfixExpression
                  |           |     |                          |     |     |        |     +- PropertyGet
                  |           |     |                          |     |     |        |     |  +- Name
                  |           |     |                          |     |     |        |     |  +- Name
                  |           |     |                          |     |     |        |     +- NumberLiteral
                  |           |     |                          |     |     |        +- Scope
                  |           |     |                          |     |     |           +- ReturnStatement
                  |           |     |                          |     |     |              +- KeywordLiteral
                  |           |     |                          |     |     +- Comment
                  |           |     |                          |     |     +- ExpressionStatement
                  |           |     |                          |     |        +- Assignment
                  |           |     |                          |     |           +- Name
                  |           |     |                          |     |           +- Assignment
                  |           |     |                          |     |              +- Name
                  |           |     |                          |     |              +- InfixExpression
                  |           |     |                          |     |                 +- InfixExpression
                  |           |     |                          |     |                 |  +- Name
                  |           |     |                          |     |                 |  +- StringLiteral
                  |           |     |                          |     |                 +- InfixExpression
                  |           |     |                          |     |                    +- UnaryExpression
                  |           |     |                          |     |                    |  +- Name
                  |           |     |                          |     |                    +- StringLiteral
                  |           |     |                          |     +- ReturnStatement
                  |           |     |                          |        +- KeywordLiteral
                  |           |     |                          +- ExpressionStatement
                  |           |     |                          |  +- Assignment
                  |           |     |                          |     +- Name
                  |           |     |                          |     +- ArrayLiteral
                  |           |     |                          |        +- ConditionalExpression
                  |           |     |                          |           +- Name
                  |           |     |                          |           +- PropertyGet
                  |           |     |                          |           |  +- Name
                  |           |     |                          |           |  +- Name
                  |           |     |                          |           +- PropertyGet
                  |           |     |                          |              +- Name
                  |           |     |                          |              +- Name
                  |           |     |                          +- Comment
                  |           |     |                          +- IfStatement
                  |           |     |                          |  +- InfixExpression
                  |           |     |                          |  |  +- Name
                  |           |     |                          |  |  +- Name
                  |           |     |                          |  +- Scope
                  |           |     |                          |  |  +- Comment
                  |           |     |                          |  |  +- ExpressionStatement
                  |           |     |                          |  |  |  +- Assignment
                  |           |     |                          |  |  |     +- Name
                  |           |     |                          |  |  |     +- InfixExpression
                  |           |     |                          |  |  |        +- ElementGet
                  |           |     |                          |  |  |        |  +- Name
                  |           |     |                          |  |  |        |  +- Name
                  |           |     |                          |  |  |        +- ParenthesizedExpression
                  |           |     |                          |  |  |           +- Assignment
                  |           |     |                          |  |  |              +- ElementGet
                  |           |     |                          |  |  |              |  +- Name
                  |           |     |                          |  |  |              |  +- Name
                  |           |     |                          |  |  |              +- ObjectLiteral
                  |           |     |                          |  |  +- ExpressionStatement
                  |           |     |                          |  |  |  +- Assignment
                  |           |     |                          |  |  |     +- Name
                  |           |     |                          |  |  |     +- InfixExpression
                  |           |     |                          |  |  |        +- ElementGet
                  |           |     |                          |  |  |        |  +- Name
                  |           |     |                          |  |  |        |  +- Name
                  |           |     |                          |  |  |        +- ArrayLiteral
                  |           |     |                          |  |  +- ExpressionStatement
                  |           |     |                          |  |  |  +- Assignment
                  |           |     |                          |  |  |     +- Name
                  |           |     |                          |  |  |     +- InfixExpression
                  |           |     |                          |  |  |        +- InfixExpression
                  |           |     |                          |  |  |        |  +- ElementGet
                  |           |     |                          |  |  |        |  |  +- Name
                  |           |     |                          |  |  |        |  |  +- NumberLiteral
                  |           |     |                          |  |  |        |  +- Name
                  |           |     |                          |  |  |        +- ElementGet
                  |           |     |                          |  |  |           +- Name
                  |           |     |                          |  |  |           +- NumberLiteral
                  |           |     |                          |  |  +- ExpressionStatement
                  |           |     |                          |  |  |  +- Assignment
                  |           |     |                          |  |  |     +- Name
                  |           |     |                          |  |  |     +- InfixExpression
                  |           |     |                          |  |  |        +- Name
                  |           |     |                          |  |  |        +- ElementGet
                  |           |     |                          |  |  |           +- Name
                  |           |     |                          |  |  |           +- NumberLiteral
                  |           |     |                          |  |  +- ExpressionStatement
                  |           |     |                          |  |  |  +- Assignment
                  |           |     |                          |  |  |     +- Name
                  |           |     |                          |  |  |     +- InfixExpression
                  |           |     |                          |  |  |        +- Name
                  |           |     |                          |  |  |        +- ElementGet
                  |           |     |                          |  |  |           +- PropertyGet
                  |           |     |                          |  |  |           |  +- Name
                  |           |     |                          |  |  |           |  +- Name
                  |           |     |                          |  |  |           +- Name
                  |           |     |                          |  |  +- WhileLoop
                  |           |     |                          |  |     +- ParenthesizedExpression
                  |           |     |                          |  |     |  +- Assignment
                  |           |     |                          |  |     |     +- Name
                  |           |     |                          |  |     |     +- InfixExpression
                  |           |     |                          |  |     |        +- InfixExpression
                  |           |     |                          |  |     |        |  +- UpdateExpression
                  |           |     |                          |  |     |        |  |  +- Name
                  |           |     |                          |  |     |        |  +- InfixExpression
                  |           |     |                          |  |     |        |     +- Name
                  |           |     |                          |  |     |        |     +- ElementGet
                  |           |     |                          |  |     |        |        +- Name
                  |           |     |                          |  |     |        |        +- Name
                  |           |     |                          |  |     |        +- InfixExpression
                  |           |     |                          |  |     |           +- ParenthesizedExpression
                  |           |     |                          |  |     |           |  +- Assignment
                  |           |     |                          |  |     |           |     +- Name
                  |           |     |                          |  |     |           |     +- Assignment
                  |           |     |                          |  |     |           |        +- Name
                  |           |     |                          |  |     |           |        +- NumberLiteral
                  |           |     |                          |  |     |           +- FunctionCall
                  |           |     |                          |  |     |              +- PropertyGet
                  |           |     |                          |  |     |                 +- Name
                  |           |     |                          |  |     |                 +- Name
                  |           |     |                          |  |     +- Scope
                  |           |     |                          |  |        +- Comment
                  |           |     |                          |  |        +- IfStatement
                  |           |     |                          |  |           +- InfixExpression
                  |           |     |                          |  |           |  +- InfixExpression
                  |           |     |                          |  |           |  |  +- PropertyGet
                  |           |     |                          |  |           |  |  |  +- Name
                  |           |     |                          |  |           |  |  |  +- Name
                  |           |     |                          |  |           |  |  +- NumberLiteral
                  |           |     |                          |  |           |  +- InfixExpression
                  |           |     |                          |  |           |     +- UpdateExpression
                  |           |     |                          |  |           |     |  +- Name
                  |           |     |                          |  |           |     +- InfixExpression
                  |           |     |                          |  |           |        +- Name
                  |           |     |                          |  |           |        +- Name
                  |           |     |                          |  |           +- Scope
                  |           |     |                          |  |              +- ExpressionStatement
                  |           |     |                          |  |              |  +- Assignment
                  |           |     |                          |  |              |     +- ElementGet
                  |           |     |                          |  |              |     |  +- Name
                  |           |     |                          |  |              |     |  +- Name
                  |           |     |                          |  |              |     +- ArrayLiteral
                  |           |     |                          |  |              |        +- Name
                  |           |     |                          |  |              |        +- Name
                  |           |     |                          |  |              |        +- Name
                  |           |     |                          |  |              +- BreakStatement
                  |           |     |                          |  +- Scope
                  |           |     |                          |     +- Comment
                  |           |     |                          |     +- IfStatement
                  |           |     |                          |     |  +- Name
                  |           |     |                          |     |  +- Scope
                  |           |     |                          |     |     +- ExpressionStatement
                  |           |     |                          |     |     |  +- Assignment
                  |           |     |                          |     |     |     +- Name
                  |           |     |                          |     |     |     +- InfixExpression
                  |           |     |                          |     |     |        +- ElementGet
                  |           |     |                          |     |     |        |  +- Name
                  |           |     |                          |     |     |        |  +- Name
                  |           |     |                          |     |     |        +- ParenthesizedExpression
                  |           |     |                          |     |     |           +- Assignment
                  |           |     |                          |     |     |              +- ElementGet
                  |           |     |                          |     |     |              |  +- Name
                  |           |     |                          |     |     |              |  +- Name
                  |           |     |                          |     |     |              +- ObjectLiteral
                  |           |     |                          |     |     +- ExpressionStatement
                  |           |     |                          |     |     |  +- Assignment
                  |           |     |                          |     |     |     +- Name
                  |           |     |                          |     |     |     +- InfixExpression
                  |           |     |                          |     |     |        +- ElementGet
                  |           |     |                          |     |     |        |  +- Name
                  |           |     |                          |     |     |        |  +- Name
                  |           |     |                          |     |     |        +- ArrayLiteral
                  |           |     |                          |     |     +- ExpressionStatement
                  |           |     |                          |     |     |  +- Assignment
                  |           |     |                          |     |     |     +- Name
                  |           |     |                          |     |     |     +- InfixExpression
                  |           |     |                          |     |     |        +- InfixExpression
                  |           |     |                          |     |     |        |  +- ElementGet
                  |           |     |                          |     |     |        |  |  +- Name
                  |           |     |                          |     |     |        |  |  +- NumberLiteral
                  |           |     |                          |     |     |        |  +- Name
                  |           |     |                          |     |     |        +- ElementGet
                  |           |     |                          |     |     |           +- Name
                  |           |     |                          |     |     |           +- NumberLiteral
                  |           |     |                          |     |     +- ExpressionStatement
                  |           |     |                          |     |        +- Assignment
                  |           |     |                          |     |           +- Name
                  |           |     |                          |     |           +- Name
                  |           |     |                          |     +- IfStatement
                  |           |     |                          |        +- InfixExpression
                  |           |     |                          |        |  +- Name
                  |           |     |                          |        |  +- KeywordLiteral
                  |           |     |                          |        +- Scope
                  |           |     |                          |           +- Comment
                  |           |     |                          |           +- WhileLoop
                  |           |     |                          |              +- ParenthesizedExpression
                  |           |     |                          |              |  +- Assignment
                  |           |     |                          |              |     +- Name
                  |           |     |                          |              |     +- InfixExpression
                  |           |     |                          |              |        +- InfixExpression
                  |           |     |                          |              |        |  +- UpdateExpression
                  |           |     |                          |              |        |  |  +- Name
                  |           |     |                          |              |        |  +- InfixExpression
                  |           |     |                          |              |        |     +- Name
                  |           |     |                          |              |        |     +- ElementGet
                  |           |     |                          |              |        |        +- Name
                  |           |     |                          |              |        |        +- Name
                  |           |     |                          |              |        +- InfixExpression
                  |           |     |                          |              |           +- ParenthesizedExpression
                  |           |     |                          |              |           |  +- Assignment
                  |           |     |                          |              |           |     +- Name
                  |           |     |                          |              |           |     +- Assignment
                  |           |     |                          |              |           |        +- Name
                  |           |     |                          |              |           |        +- NumberLiteral
                  |           |     |                          |              |           +- FunctionCall
                  |           |     |                          |              |              +- PropertyGet
                  |           |     |                          |              |                 +- Name
                  |           |     |                          |              |                 +- Name
                  |           |     |                          |              +- Scope
                  |           |     |                          |                 +- IfStatement
                  |           |     |                          |                    +- InfixExpression
                  |           |     |                          |                    |  +- ParenthesizedExpression
                  |           |     |                          |                    |  |  +- ConditionalExpression
                  |           |     |                          |                    |  |     +- Name
                  |           |     |                          |                    |  |     +- FunctionCall
                  |           |     |                          |                    |  |     |  +- Name
                  |           |     |                          |                    |  |     |  +- Name
                  |           |     |                          |                    |  |     |  +- Name
                  |           |     |                          |                    |  |     +- InfixExpression
                  |           |     |                          |                    |  |        +- PropertyGet
                  |           |     |                          |                    |  |        |  +- Name
                  |           |     |                          |                    |  |        |  +- Name
                  |           |     |                          |                    |  |        +- NumberLiteral
                  |           |     |                          |                    |  +- UpdateExpression
                  |           |     |                          |                    |     +- Name
                  |           |     |                          |                    +- Scope
                  |           |     |                          |                       +- Comment
                  |           |     |                          |                       +- IfStatement
                  |           |     |                          |                       |  +- Name
                  |           |     |                          |                       |  +- Scope
                  |           |     |                          |                       |     +- ExpressionStatement
                  |           |     |                          |                       |     |  +- Assignment
                  |           |     |                          |                       |     |     +- Name
                  |           |     |                          |                       |     |     +- InfixExpression
                  |           |     |                          |                       |     |        +- ElementGet
                  |           |     |                          |                       |     |        |  +- Name
                  |           |     |                          |                       |     |        |  +- Name
                  |           |     |                          |                       |     |        +- ParenthesizedExpression
                  |           |     |                          |                       |     |           +- Assignment
                  |           |     |                          |                       |     |              +- ElementGet
                  |           |     |                          |                       |     |              |  +- Name
                  |           |     |                          |                       |     |              |  +- Name
                  |           |     |                          |                       |     |              +- ObjectLiteral
                  |           |     |                          |                       |     +- ExpressionStatement
                  |           |     |                          |                       |        +- Assignment
                  |           |     |                          |                       |           +- ElementGet
                  |           |     |                          |                       |           |  +- Name
                  |           |     |                          |                       |           |  +- Name
                  |           |     |                          |                       |           +- ArrayLiteral
                  |           |     |                          |                       |              +- Name
                  |           |     |                          |                       |              +- Name
                  |           |     |                          |                       +- IfStatement
                  |           |     |                          |                          +- InfixExpression
                  |           |     |                          |                          |  +- Name
                  |           |     |                          |                          |  +- Name
                  |           |     |                          |                          +- Scope
                  |           |     |                          |                             +- BreakStatement
                  |           |     |                          +- Comment
                  |           |     |                          +- ExpressionStatement
                  |           |     |                          |  +- Assignment
                  |           |     |                          |     +- Name
                  |           |     |                          |     +- Name
                  |           |     |                          +- ReturnStatement
                  |           |     |                             +- InfixExpression
                  |           |     |                                +- InfixExpression
                  |           |     |                                |  +- Name
                  |           |     |                                |  +- Name
                  |           |     |                                +- ParenthesizedExpression
                  |           |     |                                   +- InfixExpression
                  |           |     |                                      +- InfixExpression
                  |           |     |                                      |  +- InfixExpression
                  |           |     |                                      |  |  +- Name
                  |           |     |                                      |  |  +- Name
                  |           |     |                                      |  +- NumberLiteral
                  |           |     |                                      +- InfixExpression
                  |           |     |                                         +- InfixExpression
                  |           |     |                                         |  +- Name
                  |           |     |                                         |  +- Name
                  |           |     |                                         +- NumberLiteral
                  |           |     +- ObjectProperty
                  |           |        +- Name
                  |           |        +- FunctionNode
                  |           |           +- Name
                  |           |           +- Name
                  |           |           +- Block
                  |           |              +- Comment
                  |           |              +- Comment
                  |           |              +- Comment
                  |           |              +- Comment
                  |           |              +- VariableDeclaration
                  |           |              |  +- VariableInitializer
                  |           |              |  |  +- Name
                  |           |              |  +- VariableInitializer
                  |           |              |     +- Name
                  |           |              |     +- InfixExpression
                  |           |              |        +- ElementGet
                  |           |              |        |  +- PropertyGet
                  |           |              |        |  |  +- Name
                  |           |              |        |  |  +- Name
                  |           |              |        |  +- Name
                  |           |              |        +- InfixExpression
                  |           |              |           +- ElementGet
                  |           |              |           |  +- PropertyGet
                  |           |              |           |  |  +- Name
                  |           |              |           |  |  +- Name
                  |           |              |           |  +- FunctionCall
                  |           |              |           |     +- PropertyGet
                  |           |              |           |        +- Name
                  |           |              |           |        +- Name
                  |           |              |           +- FunctionCall
                  |           |              |              +- Name
                  |           |              |              +- InfixExpression
                  |           |              |                 +- StringLiteral
                  |           |              |                 +- Name
                  |           |              +- Comment
                  |           |              +- Comment
                  |           |              +- Comment
                  |           |              +- IfStatement
                  |           |              |  +- ElementGet
                  |           |              |  |  +- Name
                  |           |              |  |  +- Name
                  |           |              |  +- Scope
                  |           |              |     +- ReturnStatement
                  |           |              |        +- FunctionCall
                  |           |              |           +- Name
                  |           |              |           +- Name
                  |           |              +- IfStatement
                  |           |              |  +- InfixExpression
                  |           |              |  |  +- PropertyGet
                  |           |              |  |  |  +- Name
                  |           |              |  |  |  +- Name
                  |           |              |  |  +- NumberLiteral
                  |           |              |  +- Scope
                  |           |              |     +- ExpressionStatement
                  |           |              |     |  +- Assignment
                  |           |              |     |     +- Name
                  |           |              |     |     +- ArrayLiteral
                  |           |              |     |        +- Name
                  |           |              |     |        +- Name
                  |           |              |     |        +- StringLiteral
                  |           |              |     |        +- Name
                  |           |              |     +- ReturnStatement
                  |           |              |        +- ConditionalExpression
                  |           |              |           +- FunctionCall
                  |           |              |           |  +- PropertyGet
                  |           |              |           |  |  +- PropertyGet
                  |           |              |           |  |  |  +- Name
                  |           |              |           |  |  |  +- Name
                  |           |              |           |  |  +- Name
                  |           |              |           |  +- FunctionCall
                  |           |              |           |     +- PropertyGet
                  |           |              |           |        +- Name
                  |           |              |           |        +- Name
                  |           |              |           +- FunctionCall
                  |           |              |           |  +- Name
                  |           |              |           |  +- FunctionNode
                  |           |              |           |     +- Name
                  |           |              |           |     +- Name
                  |           |              |           |     +- Block
                  |           |              |           |        +- VariableDeclaration
                  |           |              |           |        |  +- VariableInitializer
                  |           |              |           |        |  |  +- Name
                  |           |              |           |        |  +- VariableInitializer
                  |           |              |           |        |  |  +- Name
                  |           |              |           |        |  |  +- FunctionCall
                  |           |              |           |        |  |     +- Name
                  |           |              |           |        |  |     +- Name
                  |           |              |           |        |  |     +- Name
                  |           |              |           |        |  +- VariableInitializer
                  |           |              |           |        |     +- Name
                  |           |              |           |        |     +- PropertyGet
                  |           |              |           |        |        +- Name
                  |           |              |           |        |        +- Name
                  |           |              |           |        +- WhileLoop
                  |           |              |           |           +- UpdateExpression
                  |           |              |           |           |  +- Name
                  |           |              |           |           +- Scope
                  |           |              |           |              +- ExpressionStatement
                  |           |              |           |              |  +- Assignment
                  |           |              |           |              |     +- Name
                  |           |              |           |              |     +- FunctionCall
                  |           |              |           |              |        +- PropertyGet
                  |           |              |           |              |        |  +- Name
                  |           |              |           |              |        |  +- Name
                  |           |              |           |              |        +- Name
                  |           |              |           |              |        +- ElementGet
                  |           |              |           |              |           +- Name
                  |           |              |           |              |           +- Name
                  |           |              |           |              +- ExpressionStatement
                  |           |              |           |                 +- Assignment
                  |           |              |           |                    +- ElementGet
                  |           |              |           |                    |  +- Name
                  |           |              |           |                    |  +- Name
                  |           |              |           |                    +- UnaryExpression
                  |           |              |           |                       +- ParenthesizedExpression
                  |           |              |           |                          +- Assignment
                  |           |              |           |                             +- ElementGet
                  |           |              |           |                             |  +- Name
                  |           |              |           |                             |  +- Name
                  |           |              |           |                             +- ElementGet
                  |           |              |           |                                +- Name
                  |           |              |           |                                +- Name
                  |           |              |           +- FunctionNode
                  |           |              |              +- Name
                  |           |              |              +- Block
                  |           |              |                 +- ReturnStatement
                  |           |              |                    +- FunctionCall
                  |           |              |                       +- Name
                  |           |              |                       +- Name
                  |           |              |                       +- NumberLiteral
                  |           |              |                       +- Name
                  |           |              +- ReturnStatement
                  |           |                 +- Name
                  |           +- ObjectProperty
                  |              +- Name
                  |              +- ObjectLiteral
                  |                 +- ObjectProperty
                  |                 |  +- Name
                  |                 |  +- FunctionCall
                  |                 |     +- Name
                  |                 |     +- FunctionNode
                  |                 |        +- Name
                  |                 |        +- Block
                  |                 |           +- Comment
                  |                 |           +- Comment
                  |                 |           +- Comment
                  |                 |           +- VariableDeclaration
                  |                 |           |  +- VariableInitializer
                  |                 |           |  |  +- Name
                  |                 |           |  |  +- ArrayLiteral
                  |                 |           |  +- VariableInitializer
                  |                 |           |  |  +- Name
                  |                 |           |  |  +- ArrayLiteral
                  |                 |           |  +- VariableInitializer
                  |                 |           |     +- Name
                  |                 |           |     +- FunctionCall
                  |                 |           |        +- Name
                  |                 |           |        +- FunctionCall
                  |                 |           |           +- PropertyGet
                  |                 |           |           |  +- Name
                  |                 |           |           |  +- Name
                  |                 |           |           +- Name
                  |                 |           |           +- StringLiteral
                  |                 |           +- ReturnStatement
                  |                 |              +- ConditionalExpression
                  |                 |                 +- ElementGet
                  |                 |                 |  +- Name
                  |                 |                 |  +- Name
                  |                 |                 +- FunctionCall
                  |                 |                 |  +- Name
                  |                 |                 |  +- FunctionNode
                  |                 |                 |     +- Name
                  |                 |                 |     +- Name
                  |                 |                 |     +- Name
                  |                 |                 |     +- Name
                  |                 |                 |     +- Block
                  |                 |                 |        +- VariableDeclaration
                  |                 |                 |        |  +- VariableInitializer
                  |                 |                 |        |  |  +- Name
                  |                 |                 |        |  +- VariableInitializer
                  |                 |                 |        |  |  +- Name
                  |                 |                 |        |  |  +- FunctionCall
                  |                 |                 |        |  |     +- Name
                  |                 |                 |        |  |     +- Name
                  |                 |                 |        |  |     +- KeywordLiteral
                  |                 |                 |        |  |     +- Name
                  |                 |                 |        |  |     +- ArrayLiteral
                  |                 |                 |        |  +- VariableInitializer
                  |                 |                 |        |     +- Name
                  |                 |                 |        |     +- PropertyGet
                  |                 |                 |        |        +- Name
                  |                 |                 |        |        +- Name
                  |                 |                 |        +- Comment
                  |                 |                 |        +- WhileLoop
                  |                 |                 |           +- UpdateExpression
                  |                 |                 |           |  +- Name
                  |                 |                 |           +- Scope
                  |                 |                 |              +- IfStatement
                  |                 |                 |                 +- ParenthesizedExpression
                  |                 |                 |                 |  +- Assignment
                  |                 |                 |                 |     +- Name
                  |                 |                 |                 |     +- ElementGet
                  |                 |                 |                 |        +- Name
                  |                 |                 |                 |        +- Name
                  |                 |                 |                 +- Scope
                  |                 |                 |                    +- ExpressionStatement
                  |                 |                 |                       +- Assignment
                  |                 |                 |                          +- ElementGet
                  |                 |                 |                          |  +- Name
                  |                 |                 |                          |  +- Name
                  |                 |                 |                          +- UnaryExpression
                  |                 |                 |                             +- ParenthesizedExpression
                  |                 |                 |                                +- Assignment
                  |                 |                 |                                   +- ElementGet
                  |                 |                 |                                   |  +- Name
                  |                 |                 |                                   |  +- Name
                  |                 |                 |                                   +- Name
                  |                 |                 +- FunctionNode
                  |                 |                    +- Name
                  |                 |                    +- Name
                  |                 |                    +- Name
                  |                 |                    +- Block
                  |                 |                       +- ExpressionStatement
                  |                 |                       |  +- Assignment
                  |                 |                       |     +- ElementGet
                  |                 |                       |     |  +- Name
                  |                 |                       |     |  +- NumberLiteral
                  |                 |                       |     +- Name
                  |                 |                       +- ExpressionStatement
                  |                 |                       |  +- FunctionCall
                  |                 |                       |     +- Name
                  |                 |                       |     +- Name
                  |                 |                       |     +- KeywordLiteral
                  |                 |                       |     +- Name
                  |                 |                       |     +- Name
                  |                 |                       +- Comment
                  |                 |                       +- ExpressionStatement
                  |                 |                       |  +- Assignment
                  |                 |                       |     +- ElementGet
                  |                 |                       |     |  +- Name
                  |                 |                       |     |  +- NumberLiteral
                  |                 |                       |     +- KeywordLiteral
                  |                 |                       +- ReturnStatement
                  |                 |                          +- UnaryExpression
                  |                 |                             +- FunctionCall
                  |                 |                                +- PropertyGet
                  |                 |                                   +- Name
                  |                 |                                   +- Name
                  |                 +- ObjectProperty
                  |                 |  +- Name
                  |                 |  +- FunctionCall
                  |                 |     +- Name
                  |                 |     +- FunctionNode
                  |                 |        +- Name
                  |                 |        +- Block
                  |                 |           +- ReturnStatement
                  |                 |              +- FunctionNode
                  |                 |                 +- Name
                  |                 |                 +- Block
                  |                 |                    +- ReturnStatement
                  |                 |                       +- InfixExpression
                  |                 |                          +- PropertyGet
                  |                 |                          |  +- FunctionCall
                  |                 |                          |  |  +- Name
                  |                 |                          |  |  +- Name
                  |                 |                          |  |  +- Name
                  |                 |                          |  +- Name
                  |                 |                          +- NumberLiteral
                  |                 +- ObjectProperty
                  |                 |  +- Name
                  |                 |  +- FunctionCall
                  |                 |     +- Name
                  |                 |     +- FunctionNode
                  |                 |        +- Name
                  |                 |        +- Block
                  |                 |           +- ExpressionStatement
                  |                 |           |  +- Assignment
                  |                 |           |     +- Name
                  |                 |           |     +- FunctionCall
                  |                 |           |        +- PropertyGet
                  |                 |           |        |  +- Name
                  |                 |           |        |  +- Name
                  |                 |           |        +- Name
                  |                 |           |        +- Name
                  |                 |           +- ReturnStatement
                  |                 |              +- FunctionNode
                  |                 |                 +- Name
                  |                 |                 +- Block
                  |                 |                    +- ReturnStatement
                  |                 |                       +- InfixExpression
                  |                 |                          +- FunctionCall
                  |                 |                          |  +- PropertyGet
                  |                 |                          |  |  +- ParenthesizedExpression
                  |                 |                          |  |  |  +- InfixExpression
                  |                 |                          |  |  |     +- PropertyGet
                  |                 |                          |  |  |     |  +- Name
                  |                 |                          |  |  |     |  +- Name
                  |                 |                          |  |  |     +- FunctionCall
                  |                 |                          |  |  |        +- PropertyGet
                  |                 |                          |  |  |        |  +- Name
                  |                 |                          |  |  |        |  +- Name
                  |                 |                          |  |  |        +- Name
                  |                 |                          |  |  +- Name
                  |                 |                          |  +- Name
                  |                 |                          +- UnaryExpression
                  |                 |                             +- NumberLiteral
                  |                 +- ObjectProperty
                  |                 |  +- Name
                  |                 |  +- FunctionCall
                  |                 |     +- Name
                  |                 |     +- FunctionNode
                  |                 |        +- Name
                  |                 |        +- Block
                  |                 |           +- Comment
                  |                 |           +- IfStatement
                  |                 |           |  +- UnaryExpression
                  |                 |           |  |  +- FunctionCall
                  |                 |           |  |     +- PropertyGet
                  |                 |           |  |     |  +- Name
                  |                 |           |  |     |  +- Name
                  |                 |           |  |     +- InfixExpression
                  |                 |           |  |        +- Name
                  |                 |           |  |        +- StringLiteral
                  |                 |           |  +- Scope
                  |                 |           |     +- ExpressionStatement
                  |                 |           |        +- FunctionCall
                  |                 |           |           +- Name
                  |                 |           |           +- InfixExpression
                  |                 |           |              +- StringLiteral
                  |                 |           |              +- Name
                  |                 |           +- ExpressionStatement
                  |                 |           |  +- Assignment
                  |                 |           |     +- Name
                  |                 |           |     +- FunctionCall
                  |                 |           |        +- PropertyGet
                  |                 |           |           +- FunctionCall
                  |                 |           |           |  +- PropertyGet
                  |                 |           |           |  |  +- Name
                  |                 |           |           |  |  +- Name
                  |                 |           |           |  +- Name
                  |                 |           |           |  +- Name
                  |                 |           |           +- Name
                  |                 |           +- ReturnStatement
                  |                 |              +- FunctionNode
                  |                 |                 +- Name
                  |                 |                 +- Block
                  |                 |                    +- VariableDeclaration
                  |                 |                    |  +- VariableInitializer
                  |                 |                    |     +- Name
                  |                 |                    +- DoLoop
                  |                 |                    |  +- Scope
                  |                 |                    |  |  +- IfStatement
                  |                 |                    |  |     +- ParenthesizedExpression
                  |                 |                    |  |     |  +- Assignment
                  |                 |                    |  |     |     +- Name
                  |                 |                    |  |     |     +- ConditionalExpression
                  |                 |                    |  |     |        +- Name
                  |                 |                    |  |     |        +- PropertyGet
                  |                 |                    |  |     |        |  +- Name
                  |                 |                    |  |     |        |  +- Name
                  |                 |                    |  |     |        +- InfixExpression
                  |                 |                    |  |     |           +- FunctionCall
                  |                 |                    |  |     |           |  +- PropertyGet
                  |                 |                    |  |     |           |  |  +- Name
                  |                 |                    |  |     |           |  |  +- Name
                  |                 |                    |  |     |           |  +- StringLiteral
                  |                 |                    |  |     |           +- FunctionCall
                  |                 |                    |  |     |              +- PropertyGet
                  |                 |                    |  |     |              |  +- Name
                  |                 |                    |  |     |              |  +- Name
                  |                 |                    |  |     |              +- StringLiteral
                  |                 |                    |  |     +- Scope
                  |                 |                    |  |        +- ExpressionStatement
                  |                 |                    |  |        |  +- Assignment
                  |                 |                    |  |        |     +- Name
                  |                 |                    |  |        |     +- FunctionCall
                  |                 |                    |  |        |        +- PropertyGet
                  |                 |                    |  |        |           +- Name
                  |                 |                    |  |        |           +- Name
                  |                 |                    |  |        +- ReturnStatement
                  |                 |                    |  |           +- InfixExpression
                  |                 |                    |  |              +- InfixExpression
                  |                 |                    |  |              |  +- Name
                  |                 |                    |  |              |  +- Name
                  |                 |                    |  |              +- InfixExpression
                  |                 |                    |  |                 +- FunctionCall
                  |                 |                    |  |                 |  +- PropertyGet
                  |                 |                    |  |                 |  |  +- Name
                  |                 |                    |  |                 |  |  +- Name
                  |                 |                    |  |                 |  +- InfixExpression
                  |                 |                    |  |                 |     +- Name
                  |                 |                    |  |                 |     +- StringLiteral
                  |                 |                    |  |                 +- NumberLiteral
                  |                 |                    |  +- InfixExpression
                  |                 |                    |     +- ParenthesizedExpression
                  |                 |                    |     |  +- Assignment
                  |                 |                    |     |     +- Name
                  |                 |                    |     |     +- PropertyGet
                  |                 |                    |     |        +- Name
                  |                 |                    |     |        +- Name
                  |                 |                    |     +- InfixExpression
                  |                 |                    |        +- PropertyGet
                  |                 |                    |        |  +- Name
                  |                 |                    |        |  +- Name
                  |                 |                    |        +- NumberLiteral
                  |                 |                    +- ReturnStatement
                  |                 |                       +- KeywordLiteral
                  |                 +- ObjectProperty
                  |                 |  +- Name
                  |                 |  +- FunctionNode
                  |                 |     +- Name
                  |                 |     +- Block
                  |                 |        +- VariableDeclaration
                  |                 |        |  +- VariableInitializer
                  |                 |        |     +- Name
                  |                 |        |     +- InfixExpression
                  |                 |        |        +- PropertyGet
                  |                 |        |        |  +- Name
                  |                 |        |        |  +- Name
                  |                 |        |        +- PropertyGet
                  |                 |        |           +- PropertyGet
                  |                 |        |           |  +- Name
                  |                 |        |           |  +- Name
                  |                 |        |           +- Name
                  |                 |        +- ReturnStatement
                  |                 |           +- InfixExpression
                  |                 |              +- Name
                  |                 |              +- InfixExpression
                  |                 |                 +- FunctionCall
                  |                 |                 |  +- PropertyGet
                  |                 |                 |  |  +- Name
                  |                 |                 |  |  +- Name
                  |                 |                 |  +- NumberLiteral
                  |                 |                 +- PropertyGet
                  |                 |                    +- Name
                  |                 |                    +- Name
                  |                 +- ObjectProperty
                  |                 |  +- Name
                  |                 |  +- FunctionNode
                  |                 |     +- Name
                  |                 |     +- Block
                  |                 |        +- ReturnStatement
                  |                 |           +- InfixExpression
                  |                 |              +- Name
                  |                 |              +- Name
                  |                 +- ObjectProperty
                  |                 |  +- Name
                  |                 |  +- FunctionNode
                  |                 |     +- Name
                  |                 |     +- Block
                  |                 |        +- ReturnStatement
                  |                 |           +- InfixExpression
                  |                 |              +- InfixExpression
                  |                 |              |  +- Name
                  |                 |              |  +- PropertyGet
                  |                 |              |     +- Name
                  |                 |              |     +- Name
                  |                 |              +- InfixExpression
                  |                 |                 +- FunctionCall
                  |                 |                 |  +- PropertyGet
                  |                 |                 |     +- Name
                  |                 |                 |     +- Name
                  |                 |                 +- UnaryExpression
                  |                 |                    +- UnaryExpression
                  |                 |                       +- ParenthesizedExpression
                  |                 |                          +- InfixExpression
                  |                 |                             +- PropertyGet
                  |                 |                             |  +- Name
                  |                 |                             |  +- Name
                  |                 |                             +- InfixExpression
                  |                 |                                +- PropertyGet
                  |                 |                                |  +- Name
                  |                 |                                |  +- Name
                  |                 |                                +- UnaryExpression
                  |                 |                                   +- PropertyGet
                  |                 |                                      +- Name
                  |                 |                                      +- Name
                  |                 +- ObjectProperty
                  |                 |  +- Name
                  |                 |  +- FunctionCall
                  |                 |     +- Name
                  |                 |     +- KeywordLiteral
                  |                 +- ObjectProperty
                  |                 |  +- Name
                  |                 |  +- FunctionCall
                  |                 |     +- Name
                  |                 |     +- KeywordLiteral
                  |                 +- ObjectProperty
                  |                 |  +- Name
                  |                 |  +- FunctionNode
                  |                 |     +- Name
                  |                 |     +- Block
                  |                 |        +- Comment
                  |                 |        +- Comment
                  |                 |        +- ReturnStatement
                  |                 |           +- InfixExpression
                  |                 |              +- ParenthesizedExpression
                  |                 |              |  +- InfixExpression
                  |                 |              |     +- FunctionCall
                  |                 |              |     |  +- Name
                  |                 |              |     |  +- Name
                  |                 |              |     |  +- StringLiteral
                  |                 |              |     +- UnaryExpression
                  |                 |              |        +- UnaryExpression
                  |                 |              |           +- PropertyGet
                  |                 |              |              +- Name
                  |                 |              |              +- Name
                  |                 |              +- ParenthesizedExpression
                  |                 |                 +- InfixExpression
                  |                 |                    +- FunctionCall
                  |                 |                    |  +- Name
                  |                 |                    |  +- Name
                  |                 |                    |  +- StringLiteral
                  |                 |                    +- UnaryExpression
                  |                 |                       +- UnaryExpression
                  |                 |                          +- PropertyGet
                  |                 |                             +- Name
                  |                 |                             +- Name
                  |                 +- ObjectProperty
                  |                 |  +- Name
                  |                 |  +- FunctionNode
                  |                 |     +- Name
                  |                 |     +- Block
                  |                 |        +- Comment
                  |                 |        +- Comment
                  |                 |        +- Comment
                  |                 |        +- Comment
                  |                 |        +- IfStatement
                  |                 |        |  +- PropertyGet
                  |                 |        |  |  +- Name
                  |                 |        |  |  +- Name
                  |                 |        |  +- Scope
                  |                 |        |     +- Comment
                  |                 |        |     +- ExpressionStatement
                  |                 |        |        +- PropertyGet
                  |                 |        |           +- PropertyGet
                  |                 |        |           |  +- Name
                  |                 |        |           |  +- Name
                  |                 |        |           +- Name
                  |                 |        +- ReturnStatement
                  |                 |           +- InfixExpression
                  |                 |              +- PropertyGet
                  |                 |              |  +- Name
                  |                 |              |  +- Name
                  |                 |              +- KeywordLiteral
                  |                 +- ObjectProperty
                  |                 |  +- Name
                  |                 |  +- FunctionNode
                  |                 |     +- Name
                  |                 |     +- Block
                  |                 |        +- Comment
                  |                 |        +- Comment
                  |                 |        +- Comment
                  |                 |        +- Comment
                  |                 |        +- ForLoop
                  |                 |        |  +- Assignment
                  |                 |        |  |  +- Name
                  |                 |        |  |  +- PropertyGet
                  |                 |        |  |     +- Name
                  |                 |        |  |     +- Name
                  |                 |        |  +- Name
                  |                 |        |  +- Assignment
                  |                 |        |  |  +- Name
                  |                 |        |  |  +- PropertyGet
                  |                 |        |  |     +- Name
                  |                 |        |  |     +- Name
                  |                 |        |  +- Scope
                  |                 |        |     +- IfStatement
                  |                 |        |        +- InfixExpression
                  |                 |        |        |  +- PropertyGet
                  |                 |        |        |  |  +- Name
                  |                 |        |        |  |  +- Name
                  |                 |        |        |  +- NumberLiteral
                  |                 |        |        +- Scope
                  |                 |        |           +- ReturnStatement
                  |                 |        |              +- KeywordLiteral
                  |                 |        +- ReturnStatement
                  |                 |           +- KeywordLiteral
                  |                 +- ObjectProperty
                  |                 |  +- Name
                  |                 |  +- FunctionNode
                  |                 |     +- Name
                  |                 |     +- Block
                  |                 |        +- ReturnStatement
                  |                 |           +- UnaryExpression
                  |                 |              +- FunctionCall
                  |                 |                 +- PropertyGet
                  |                 |                 |  +- PropertyGet
                  |                 |                 |  |  +- Name
                  |                 |                 |  |  +- Name
                  |                 |                 |  +- Name
                  |                 |                 +- Name
                  |                 +- ObjectProperty
                  |                 |  +- Name
                  |                 |  +- FunctionNode
                  |                 |     +- Name
                  |                 |     +- Block
                  |                 |        +- ReturnStatement
                  |                 |           +- FunctionCall
                  |                 |              +- PropertyGet
                  |                 |              |  +- Name
                  |                 |              |  +- Name
                  |                 |              +- PropertyGet
                  |                 |                 +- Name
                  |                 |                 +- Name
                  |                 +- ObjectProperty
                  |                 |  +- Name
                  |                 |  +- FunctionNode
                  |                 |     +- Name
                  |                 |     +- Block
                  |                 |        +- ReturnStatement
                  |                 |           +- FunctionCall
                  |                 |              +- PropertyGet
                  |                 |              |  +- Name
                  |                 |              |  +- Name
                  |                 |              +- PropertyGet
                  |                 |                 +- Name
                  |                 |                 +- Name
                  |                 +- ObjectProperty
                  |                 |  +- Name
                  |                 |  +- FunctionNode
                  |                 |     +- Name
                  |                 |     +- Block
                  |                 |        +- ReturnStatement
                  |                 |           +- InfixExpression
                  |                 |              +- InfixExpression
                  |                 |              |  +- FunctionCall
                  |                 |              |  |  +- Name
                  |                 |              |  |  +- Name
                  |                 |              |  |  +- StringLiteral
                  |                 |              |  +- InfixExpression
                  |                 |              |     +- PropertyGet
                  |                 |              |     |  +- Name
                  |                 |              |     |  +- Name
                  |                 |              |     +- StringLiteral
                  |                 |              +- FunctionCall
                  |                 |                 +- Name
                  |                 |                 +- Name
                  |                 |                 +- StringLiteral
                  |                 +- ObjectProperty
                  |                 |  +- Name
                  |                 |  +- FunctionNode
                  |                 |     +- Name
                  |                 |     +- Block
                  |                 |        +- ReturnStatement
                  |                 |           +- InfixExpression
                  |                 |              +- FunctionCall
                  |                 |              |  +- Name
                  |                 |              |  +- Name
                  |                 |              |  +- StringLiteral
                  |                 |              +- InfixExpression
                  |                 |                 +- PropertyGet
                  |                 |                 |  +- Name
                  |                 |                 |  +- Name
                  |                 |                 +- StringLiteral
                  |                 +- ObjectProperty
                  |                 |  +- Name
                  |                 |  +- FunctionCall
                  |                 |     +- Name
                  |                 |     +- FunctionNode
                  |                 |        +- Block
                  |                 |           +- ReturnStatement
                  |                 |              +- ArrayLiteral
                  |                 |                 +- NumberLiteral
                  |                 +- ObjectProperty
                  |                 |  +- Name
                  |                 |  +- FunctionCall
                  |                 |     +- Name
                  |                 |     +- FunctionNode
                  |                 |        +- Name
                  |                 |        +- Name
                  |                 |        +- Block
                  |                 |           +- ReturnStatement
                  |                 |              +- ArrayLiteral
                  |                 |                 +- InfixExpression
                  |                 |                    +- Name
                  |                 |                    +- NumberLiteral
                  |                 +- ObjectProperty
                  |                 |  +- Name
                  |                 |  +- FunctionCall
                  |                 |     +- Name
                  |                 |     +- FunctionNode
                  |                 |        +- Name
                  |                 |        +- Name
                  |                 |        +- Name
                  |                 |        +- Block
                  |                 |           +- ReturnStatement
                  |                 |              +- ArrayLiteral
                  |                 |                 +- ConditionalExpression
                  |                 |                    +- InfixExpression
                  |                 |                    |  +- Name
                  |                 |                    |  +- NumberLiteral
                  |                 |                    +- InfixExpression
                  |                 |                    |  +- Name
                  |                 |                    |  +- Name
                  |                 |                    +- Name
                  |                 +- ObjectProperty
                  |                 |  +- Name
                  |                 |  +- FunctionCall
                  |                 |     +- Name
                  |                 |     +- FunctionNode
                  |                 |        +- Name
                  |                 |        +- Name
                  |                 |        +- Block
                  |                 |           +- VariableDeclaration
                  |                 |           |  +- VariableInitializer
                  |                 |           |     +- Name
                  |                 |           |     +- NumberLiteral
                  |                 |           +- ForLoop
                  |                 |           |  +- EmptyExpression
                  |                 |           |  +- InfixExpression
                  |                 |           |  |  +- Name
                  |                 |           |  |  +- Name
                  |                 |           |  +- Assignment
                  |                 |           |  |  +- Name
                  |                 |           |  |  +- NumberLiteral
                  |                 |           |  +- Scope
                  |                 |           |     +- ExpressionStatement
                  |                 |           |        +- FunctionCall
                  |                 |           |           +- PropertyGet
                  |                 |           |           |  +- Name
                  |                 |           |           |  +- Name
                  |                 |           |           +- Name
                  |                 |           +- ReturnStatement
                  |                 |              +- Name
                  |                 +- ObjectProperty
                  |                 |  +- Name
                  |                 |  +- FunctionCall
                  |                 |     +- Name
                  |                 |     +- FunctionNode
                  |                 |        +- Name
                  |                 |        +- Name
                  |                 |        +- Block
                  |                 |           +- VariableDeclaration
                  |                 |           |  +- VariableInitializer
                  |                 |           |     +- Name
                  |                 |           |     +- NumberLiteral
                  |                 |           +- ForLoop
                  |                 |           |  +- EmptyExpression
                  |                 |           |  +- InfixExpression
                  |                 |           |  |  +- Name
                  |                 |           |  |  +- Name
                  |                 |           |  +- Assignment
                  |                 |           |  |  +- Name
                  |                 |           |  |  +- NumberLiteral
                  |                 |           |  +- Scope
                  |                 |           |     +- ExpressionStatement
                  |                 |           |        +- FunctionCall
                  |                 |           |           +- PropertyGet
                  |                 |           |           |  +- Name
                  |                 |           |           |  +- Name
                  |                 |           |           +- Name
                  |                 |           +- ReturnStatement
                  |                 |              +- Name
                  |                 +- ObjectProperty
                  |                 |  +- Name
                  |                 |  +- FunctionCall
                  |                 |     +- Name
                  |                 |     +- FunctionNode
                  |                 |        +- Name
                  |                 |        +- Name
                  |                 |        +- Name
                  |                 |        +- Block
                  |                 |           +- VariableDeclaration
                  |                 |           |  +- VariableInitializer
                  |                 |           |     +- Name
                  |                 |           +- IfStatement
                  |                 |           |  +- InfixExpression
                  |                 |           |  |  +- Name
                  |                 |           |  |  +- NumberLiteral
                  |                 |           |  +- Scope
                  |                 |           |  |  +- ExpressionStatement
                  |                 |           |  |     +- Assignment
                  |                 |           |  |        +- Name
                  |                 |           |  |        +- InfixExpression
                  |                 |           |  |           +- Name
                  |                 |           |  |           +- Name
                  |                 |           |  +- IfStatement
                  |                 |           |     +- InfixExpression
                  |                 |           |     |  +- Name
                  |                 |           |     |  +- Name
                  |                 |           |     +- Scope
                  |                 |           |     |  +- ExpressionStatement
                  |                 |           |     |     +- Assignment
                  |                 |           |     |        +- Name
                  |                 |           |     |        +- Name
                  |                 |           |     +- Scope
                  |                 |           |        +- ExpressionStatement
                  |                 |           |           +- Assignment
                  |                 |           |              +- Name
                  |                 |           |              +- Name
                  |                 |           +- ForLoop
                  |                 |           |  +- EmptyExpression
                  |                 |           |  +- InfixExpression
                  |                 |           |  |  +- UpdateExpression
                  |                 |           |  |  |  +- Name
                  |                 |           |  |  +- NumberLiteral
                  |                 |           |  +- EmptyExpression
                  |                 |           |  +- Scope
                  |                 |           |     +- ExpressionStatement
                  |                 |           |        +- FunctionCall
                  |                 |           |           +- PropertyGet
                  |                 |           |           |  +- Name
                  |                 |           |           |  +- Name
                  |                 |           |           +- Name
                  |                 |           +- ReturnStatement
                  |                 |              +- Name
                  |                 +- ObjectProperty
                  |                    +- Name
                  |                    +- FunctionCall
                  |                       +- Name
                  |                       +- FunctionNode
                  |                          +- Name
                  |                          +- Name
                  |                          +- Name
                  |                          +- Block
                  |                             +- VariableDeclaration
                  |                             |  +- VariableInitializer
                  |                             |     +- Name
                  |                             |     +- ConditionalExpression
                  |                             |        +- InfixExpression
                  |                             |        |  +- Name
                  |                             |        |  +- NumberLiteral
                  |                             |        +- InfixExpression
                  |                             |        |  +- Name
                  |                             |        |  +- Name
                  |                             |        +- Name
                  |                             +- ForLoop
                  |                             |  +- EmptyExpression
                  |                             |  +- InfixExpression
                  |                             |  |  +- UpdateExpression
                  |                             |  |  |  +- Name
                  |                             |  |  +- Name
                  |                             |  +- EmptyExpression
                  |                             |  +- Scope
                  |                             |     +- ExpressionStatement
                  |                             |        +- FunctionCall
                  |                             |           +- PropertyGet
                  |                             |           |  +- Name
                  |                             |           |  +- Name
                  |                             |           +- Name
                  |                             +- ReturnStatement
                  |                                +- Name
                  +- ExpressionStatement
                  |  +- Assignment
                  |     +- PropertyGet
                  |     |  +- PropertyGet
                  |     |  |  +- Name
                  |     |  |  +- Name
                  |     |  +- Name
                  |     +- PropertyGet
                  |        +- PropertyGet
                  |        |  +- Name
                  |        |  +- Name
                  |        +- Name
                  +- Comment
                  +- ForInLoop
                  |  +- Name
                  |  +- ObjectLiteral
                  |  |  +- ObjectProperty
                  |  |  |  +- Name
                  |  |  |  +- KeywordLiteral
                  |  |  +- ObjectProperty
                  |  |  |  +- Name
                  |  |  |  +- KeywordLiteral
                  |  |  +- ObjectProperty
                  |  |  |  +- Name
                  |  |  |  +- KeywordLiteral
                  |  |  +- ObjectProperty
                  |  |  |  +- Name
                  |  |  |  +- KeywordLiteral
                  |  |  +- ObjectProperty
                  |  |     +- Name
                  |  |     +- KeywordLiteral
                  |  +- Scope
                  |     +- ExpressionStatement
                  |        +- Assignment
                  |           +- ElementGet
                  |           |  +- PropertyGet
                  |           |  |  +- Name
                  |           |  |  +- Name
                  |           |  +- Name
                  |           +- FunctionCall
                  |              +- Name
                  |              +- Name
                  +- ForInLoop
                  |  +- Name
                  |  +- ObjectLiteral
                  |  |  +- ObjectProperty
                  |  |  |  +- Name
                  |  |  |  +- KeywordLiteral
                  |  |  +- ObjectProperty
                  |  |     +- Name
                  |  |     +- KeywordLiteral
                  |  +- Scope
                  |     +- ExpressionStatement
                  |        +- Assignment
                  |           +- ElementGet
                  |           |  +- PropertyGet
                  |           |  |  +- Name
                  |           |  |  +- Name
                  |           |  +- Name
                  |           +- FunctionCall
                  |              +- Name
                  |              +- Name
                  +- Comment
                  +- FunctionNode
                  |  +- Name
                  |  +- Block
                  +- ExpressionStatement
                  |  +- Assignment
                  |     +- PropertyGet
                  |     |  +- Name
                  |     |  +- Name
                  |     +- Assignment
                  |        +- PropertyGet
                  |        |  +- Name
                  |        |  +- Name
                  |        +- PropertyGet
                  |           +- Name
                  |           +- Name
                  +- ExpressionStatement
                  |  +- Assignment
                  |     +- PropertyGet
                  |     |  +- Name
                  |     |  +- Name
                  |     +- NewExpression
                  |        +- Name
                  +- FunctionNode
                  |  +- Name
                  |  +- Name
                  |  +- Name
                  |  +- Block
                  |     +- VariableDeclaration
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  +- VariableInitializer
                  |     |     +- Name
                  |     |     +- ElementGet
                  |     |        +- Name
                  |     |        +- InfixExpression
                  |     |           +- Name
                  |     |           +- StringLiteral
                  |     +- IfStatement
                  |     |  +- Name
                  |     |  +- Scope
                  |     |     +- ReturnStatement
                  |     |        +- ConditionalExpression
                  |     |           +- Name
                  |     |           +- NumberLiteral
                  |     |           +- FunctionCall
                  |     |              +- PropertyGet
                  |     |              |  +- Name
                  |     |              |  +- Name
                  |     |              +- NumberLiteral
                  |     +- ExpressionStatement
                  |     |  +- Assignment
                  |     |     +- Name
                  |     |     +- Name
                  |     +- ExpressionStatement
                  |     |  +- Assignment
                  |     |     +- Name
                  |     |     +- ArrayLiteral
                  |     +- ExpressionStatement
                  |     |  +- Assignment
                  |     |     +- Name
                  |     |     +- PropertyGet
                  |     |        +- Name
                  |     |        +- Name
                  |     +- WhileLoop
                  |     |  +- Name
                  |     |  +- Scope
                  |     |     +- Comment
                  |     |     +- IfStatement
                  |     |     |  +- InfixExpression
                  |     |     |  |  +- UnaryExpression
                  |     |     |  |  |  +- Name
                  |     |     |  |  +- ParenthesizedExpression
                  |     |     |  |     +- Assignment
                  |     |     |  |        +- Name
                  |     |     |  |        +- FunctionCall
                  |     |     |  |           +- PropertyGet
                  |     |     |  |           |  +- Name
                  |     |     |  |           |  +- Name
                  |     |     |  |           +- Name
                  |     |     |  +- Scope
                  |     |     |     +- IfStatement
                  |     |     |     |  +- Name
                  |     |     |     |  +- Scope
                  |     |     |     |     +- Comment
                  |     |     |     |     +- ExpressionStatement
                  |     |     |     |        +- Assignment
                  |     |     |     |           +- Name
                  |     |     |     |           +- InfixExpression
                  |     |     |     |              +- FunctionCall
                  |     |     |     |              |  +- PropertyGet
                  |     |     |     |              |  |  +- Name
                  |     |     |     |              |  |  +- Name
                  |     |     |     |              |  +- PropertyGet
                  |     |     |     |              |     +- ElementGet
                  |     |     |     |              |     |  +- Name
                  |     |     |     |              |     |  +- NumberLiteral
                  |     |     |     |              |     +- Name
                  |     |     |     |              +- Name
                  |     |     |     +- ExpressionStatement
                  |     |     |        +- FunctionCall
                  |     |     |           +- PropertyGet
                  |     |     |           |  +- Name
                  |     |     |           |  +- Name
                  |     |     |           +- ParenthesizedExpression
                  |     |     |              +- Assignment
                  |     |     |                 +- Name
                  |     |     |                 +- ArrayLiteral
                  |     |     +- ExpressionStatement
                  |     |     |  +- Assignment
                  |     |     |     +- Name
                  |     |     |     +- KeywordLiteral
                  |     |     +- Comment
                  |     |     +- IfStatement
                  |     |     |  +- ParenthesizedExpression
                  |     |     |  |  +- Assignment
                  |     |     |  |     +- Name
                  |     |     |  |     +- FunctionCall
                  |     |     |  |        +- PropertyGet
                  |     |     |  |        |  +- Name
                  |     |     |  |        |  +- Name
                  |     |     |  |        +- Name
                  |     |     |  +- Scope
                  |     |     |     +- ExpressionStatement
                  |     |     |     |  +- Assignment
                  |     |     |     |     +- Name
                  |     |     |     |     +- FunctionCall
                  |     |     |     |        +- PropertyGet
                  |     |     |     |           +- Name
                  |     |     |     |           +- Name
                  |     |     |     +- ExpressionStatement
                  |     |     |     |  +- FunctionCall
                  |     |     |     |     +- PropertyGet
                  |     |     |     |     |  +- Name
                  |     |     |     |     |  +- Name
                  |     |     |     |     +- ObjectLiteral
                  |     |     |     |        +- ObjectProperty
                  |     |     |     |        |  +- Name
                  |     |     |     |        |  +- Name
                  |     |     |     |        +- ObjectProperty
                  |     |     |     |           +- Name
                  |     |     |     |           +- FunctionCall
                  |     |     |     |              +- PropertyGet
                  |     |     |     |              |  +- ElementGet
                  |     |     |     |              |  |  +- Name
                  |     |     |     |              |  |  +- NumberLiteral
                  |     |     |     |              |  +- Name
                  |     |     |     |              +- Name
                  |     |     |     |              +- StringLiteral
                  |     |     |     +- ExpressionStatement
                  |     |     |        +- Assignment
                  |     |     |           +- Name
                  |     |     |           +- FunctionCall
                  |     |     |              +- PropertyGet
                  |     |     |              |  +- Name
                  |     |     |              |  +- Name
                  |     |     |              +- PropertyGet
                  |     |     |                 +- Name
                  |     |     |                 +- Name
                  |     |     +- ForInLoop
                  |     |     |  +- Name
                  |     |     |  +- PropertyGet
                  |     |     |  |  +- Name
                  |     |     |  |  +- Name
                  |     |     |  +- Scope
                  |     |     |     +- IfStatement
                  |     |     |        +- InfixExpression
                  |     |     |        |  +- ParenthesizedExpression
                  |     |     |        |  |  +- Assignment
                  |     |     |        |  |     +- Name
                  |     |     |        |  |     +- FunctionCall
                  |     |     |        |  |        +- PropertyGet
                  |     |     |        |  |        |  +- ElementGet
                  |     |     |        |  |        |  |  +- Name
                  |     |     |        |  |        |  |  +- Name
                  |     |     |        |  |        |  +- Name
                  |     |     |        |  |        +- Name
                  |     |     |        |  +- ParenthesizedExpression
                  |     |     |        |     +- InfixExpression
                  |     |     |        |        +- UnaryExpression
                  |     |     |        |        |  +- ElementGet
                  |     |     |        |        |     +- Name
                  |     |     |        |        |     +- Name
                  |     |     |        |        +- ParenthesizedExpression
                  |     |     |        |           +- Assignment
                  |     |     |        |              +- Name
                  |     |     |        |              +- FunctionCall
                  |     |     |        |                 +- ElementGet
                  |     |     |        |                 |  +- Name
                  |     |     |        |                 |  +- Name
                  |     |     |        |                 +- Name
                  |     |     |        +- Scope
                  |     |     |           +- ExpressionStatement
                  |     |     |           |  +- Assignment
                  |     |     |           |     +- Name
                  |     |     |           |     +- FunctionCall
                  |     |     |           |        +- PropertyGet
                  |     |     |           |           +- Name
                  |     |     |           |           +- Name
                  |     |     |           +- ExpressionStatement
                  |     |     |           |  +- FunctionCall
                  |     |     |           |     +- PropertyGet
                  |     |     |           |     |  +- Name
                  |     |     |           |     |  +- Name
                  |     |     |           |     +- ObjectLiteral
                  |     |     |           |        +- ObjectProperty
                  |     |     |           |        |  +- Name
                  |     |     |           |        |  +- Name
                  |     |     |           |        +- ObjectProperty
                  |     |     |           |        |  +- Name
                  |     |     |           |        |  +- Name
                  |     |     |           |        +- ObjectProperty
                  |     |     |           |           +- Name
                  |     |     |           |           +- Name
                  |     |     |           +- ExpressionStatement
                  |     |     |              +- Assignment
                  |     |     |                 +- Name
                  |     |     |                 +- FunctionCall
                  |     |     |                    +- PropertyGet
                  |     |     |                    |  +- Name
                  |     |     |                    |  +- Name
                  |     |     |                    +- PropertyGet
                  |     |     |                       +- Name
                  |     |     |                       +- Name
                  |     |     +- IfStatement
                  |     |        +- UnaryExpression
                  |     |        |  +- Name
                  |     |        +- Scope
                  |     |           +- BreakStatement
                  |     +- Comment
                  |     +- Comment
                  |     +- Comment
                  |     +- IfStatement
                  |     |  +- Name
                  |     |  +- Scope
                  |     |     +- ReturnStatement
                  |     |        +- PropertyGet
                  |     |           +- Name
                  |     |           +- Name
                  |     +- ReturnStatement
                  |        +- ConditionalExpression
                  |           +- Name
                  |           +- FunctionCall
                  |           |  +- Name
                  |           |  +- Name
                  |           +- FunctionCall
                  |              +- PropertyGet
                  |              |  +- FunctionCall
                  |              |  |  +- Name
                  |              |  |  +- Name
                  |              |  |  +- Name
                  |              |  +- Name
                  |              +- NumberLiteral
                  +- FunctionNode
                  |  +- Name
                  |  +- Name
                  |  +- Block
                  |     +- VariableDeclaration
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  |  +- NumberLiteral
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  |  +- PropertyGet
                  |     |  |     +- Name
                  |     |  |     +- Name
                  |     |  +- VariableInitializer
                  |     |     +- Name
                  |     |     +- StringLiteral
                  |     +- ForLoop
                  |     |  +- EmptyExpression
                  |     |  +- InfixExpression
                  |     |  |  +- Name
                  |     |  |  +- Name
                  |     |  +- UpdateExpression
                  |     |  |  +- Name
                  |     |  +- Scope
                  |     |     +- ExpressionStatement
                  |     |        +- Assignment
                  |     |           +- Name
                  |     |           +- PropertyGet
                  |     |              +- ElementGet
                  |     |              |  +- Name
                  |     |              |  +- Name
                  |     |              +- Name
                  |     +- ReturnStatement
                  |        +- Name
                  +- FunctionNode
                  |  +- Name
                  |  +- Name
                  |  +- Name
                  |  +- Name
                  |  +- Block
                  |     +- VariableDeclaration
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  |  +- PropertyGet
                  |     |  |     +- Name
                  |     |  |     +- Name
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  |  +- PropertyGet
                  |     |  |     +- Name
                  |     |  |     +- Name
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  |  +- InfixExpression
                  |     |  |     +- Name
                  |     |  |     +- Name
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  |  +- InfixExpression
                  |     |  |     +- Name
                  |     |  |     +- InfixExpression
                  |     |  |        +- Name
                  |     |  |        +- StringLiteral
                  |     |  +- VariableInitializer
                  |     |     +- Name
                  |     |     +- UpdateExpression
                  |     |        +- Name
                  |     +- ReturnStatement
                  |        +- ConditionalExpression
                  |           +- PropertyGet
                  |           |  +- Name
                  |           |  +- Name
                  |           +- FunctionNode
                  |           |  +- Name
                  |           |  +- Name
                  |           |  +- Name
                  |           |  +- Block
                  |           |     +- WhileLoop
                  |           |     |  +- ParenthesizedExpression
                  |           |     |  |  +- Assignment
                  |           |     |  |     +- Name
                  |           |     |  |     +- ElementGet
                  |           |     |  |        +- Name
                  |           |     |  |        +- Name
                  |           |     |  +- Scope
                  |           |     |     +- IfStatement
                  |           |     |        +- InfixExpression
                  |           |     |        |  +- InfixExpression
                  |           |     |        |  |  +- PropertyGet
                  |           |     |        |  |  |  +- Name
                  |           |     |        |  |  |  +- Name
                  |           |     |        |  |  +- NumberLiteral
                  |           |     |        |  +- Name
                  |           |     |        +- Scope
                  |           |     |           +- ReturnStatement
                  |           |     |              +- FunctionCall
                  |           |     |                 +- Name
                  |           |     |                 +- Name
                  |           |     |                 +- Name
                  |           |     |                 +- Name
                  |           |     +- ReturnStatement
                  |           |        +- KeywordLiteral
                  |           +- FunctionNode
                  |              +- Name
                  |              +- Name
                  |              +- Name
                  |              +- Block
                  |                 +- VariableDeclaration
                  |                 |  +- VariableInitializer
                  |                 |  |  +- Name
                  |                 |  +- VariableInitializer
                  |                 |  |  +- Name
                  |                 |  +- VariableInitializer
                  |                 |     +- Name
                  |                 |     +- ArrayLiteral
                  |                 |        +- Name
                  |                 |        +- Name
                  |                 +- Comment
                  |                 +- IfStatement
                  |                 |  +- Name
                  |                 |  +- Scope
                  |                 |  |  +- WhileLoop
                  |                 |  |     +- ParenthesizedExpression
                  |                 |  |     |  +- Assignment
                  |                 |  |     |     +- Name
                  |                 |  |     |     +- ElementGet
                  |                 |  |     |        +- Name
                  |                 |  |     |        +- Name
                  |                 |  |     +- Scope
                  |                 |  |        +- IfStatement
                  |                 |  |           +- InfixExpression
                  |                 |  |           |  +- InfixExpression
                  |                 |  |           |  |  +- PropertyGet
                  |                 |  |           |  |  |  +- Name
                  |                 |  |           |  |  |  +- Name
                  |                 |  |           |  |  +- NumberLiteral
                  |                 |  |           |  +- Name
                  |                 |  |           +- Scope
                  |                 |  |              +- IfStatement
                  |                 |  |                 +- FunctionCall
                  |                 |  |                 |  +- Name
                  |                 |  |                 |  +- Name
                  |                 |  |                 |  +- Name
                  |                 |  |                 |  +- Name
                  |                 |  |                 +- Scope
                  |                 |  |                    +- ReturnStatement
                  |                 |  |                       +- KeywordLiteral
                  |                 |  +- Scope
                  |                 |     +- WhileLoop
                  |                 |        +- ParenthesizedExpression
                  |                 |        |  +- Assignment
                  |                 |        |     +- Name
                  |                 |        |     +- ElementGet
                  |                 |        |        +- Name
                  |                 |        |        +- Name
                  |                 |        +- Scope
                  |                 |           +- IfStatement
                  |                 |              +- InfixExpression
                  |                 |              |  +- InfixExpression
                  |                 |              |  |  +- PropertyGet
                  |                 |              |  |  |  +- Name
                  |                 |              |  |  |  +- Name
                  |                 |              |  |  +- NumberLiteral
                  |                 |              |  +- Name
                  |                 |              +- Scope
                  |                 |                 +- ExpressionStatement
                  |                 |                 |  +- Assignment
                  |                 |                 |     +- Name
                  |                 |                 |     +- InfixExpression
                  |                 |                 |        +- ElementGet
                  |                 |                 |        |  +- Name
                  |                 |                 |        |  +- Name
                  |                 |                 |        +- ParenthesizedExpression
                  |                 |                 |           +- Assignment
                  |                 |                 |              +- ElementGet
                  |                 |                 |              |  +- Name
                  |                 |                 |              |  +- Name
                  |                 |                 |              +- ObjectLiteral
                  |                 |                 +- IfStatement
                  |                 |                    +- InfixExpression
                  |                 |                    |  +- Name
                  |                 |                    |  +- FunctionCall
                  |                 |                    |     +- Name
                  |                 |                    |     +- Name
                  |                 |                    |     +- Name
                  |                 |                    +- Scope
                  |                 |                    |  +- ExpressionStatement
                  |                 |                    |     +- Assignment
                  |                 |                    |        +- Name
                  |                 |                    |        +- InfixExpression
                  |                 |                    |           +- ElementGet
                  |                 |                    |           |  +- Name
                  |                 |                    |           |  +- Name
                  |                 |                    |           +- Name
                  |                 |                    +- IfStatement
                  |                 |                       +- InfixExpression
                  |                 |                       |  +- ParenthesizedExpression
                  |                 |                       |  |  +- Assignment
                  |                 |                       |  |     +- Name
                  |                 |                       |  |     +- ElementGet
                  |                 |                       |  |        +- Name
                  |                 |                       |  |        +- Name
                  |                 |                       |  +- InfixExpression
                  |                 |                       |     +- InfixExpression
                  |                 |                       |     |  +- ElementGet
                  |                 |                       |     |  |  +- Name
                  |                 |                       |     |  |  +- NumberLiteral
                  |                 |                       |     |  +- Name
                  |                 |                       |     +- InfixExpression
                  |                 |                       |        +- ElementGet
                  |                 |                       |        |  +- Name
                  |                 |                       |        |  +- NumberLiteral
                  |                 |                       |        +- Name
                  |                 |                       +- Scope
                  |                 |                       |  +- Comment
                  |                 |                       |  +- ReturnStatement
                  |                 |                       |     +- ParenthesizedExpression
                  |                 |                       |        +- Assignment
                  |                 |                       |           +- ElementGet
                  |                 |                       |           |  +- Name
                  |                 |                       |           |  +- NumberLiteral
                  |                 |                       |           +- ElementGet
                  |                 |                       |              +- Name
                  |                 |                       |              +- NumberLiteral
                  |                 |                       +- Scope
                  |                 |                          +- Comment
                  |                 |                          +- ExpressionStatement
                  |                 |                          |  +- Assignment
                  |                 |                          |     +- ElementGet
                  |                 |                          |     |  +- Name
                  |                 |                          |     |  +- Name
                  |                 |                          |     +- Name
                  |                 |                          +- Comment
                  |                 |                          +- IfStatement
                  |                 |                             +- ParenthesizedExpression
                  |                 |                             |  +- Assignment
                  |                 |                             |     +- ElementGet
                  |                 |                             |     |  +- Name
                  |                 |                             |     |  +- NumberLiteral
                  |                 |                             |     +- FunctionCall
                  |                 |                             |        +- Name
                  |                 |                             |        +- Name
                  |                 |                             |        +- Name
                  |                 |                             |        +- Name
                  |                 |                             +- Scope
                  |                 |                                +- ReturnStatement
                  |                 |                                   +- KeywordLiteral
                  |                 +- ReturnStatement
                  |                    +- KeywordLiteral
                  +- FunctionNode
                  |  +- Name
                  |  +- Name
                  |  +- Block
                  |     +- ReturnStatement
                  |        +- ConditionalExpression
                  |           +- InfixExpression
                  |           |  +- PropertyGet
                  |           |  |  +- Name
                  |           |  |  +- Name
                  |           |  +- NumberLiteral
                  |           +- FunctionNode
                  |           |  +- Name
                  |           |  +- Name
                  |           |  +- Name
                  |           |  +- Block
                  |           |     +- VariableDeclaration
                  |           |     |  +- VariableInitializer
                  |           |     |     +- Name
                  |           |     |     +- PropertyGet
                  |           |     |        +- Name
                  |           |     |        +- Name
                  |           |     +- WhileLoop
                  |           |     |  +- UpdateExpression
                  |           |     |  |  +- Name
                  |           |     |  +- Scope
                  |           |     |     +- IfStatement
                  |           |     |        +- UnaryExpression
                  |           |     |        |  +- FunctionCall
                  |           |     |        |     +- ElementGet
                  |           |     |        |     |  +- Name
                  |           |     |        |     |  +- Name
                  |           |     |        |     +- Name
                  |           |     |        |     +- Name
                  |           |     |        |     +- Name
                  |           |     |        +- Scope
                  |           |     |           +- ReturnStatement
                  |           |     |              +- KeywordLiteral
                  |           |     +- ReturnStatement
                  |           |        +- KeywordLiteral
                  |           +- ElementGet
                  |              +- Name
                  |              +- NumberLiteral
                  +- FunctionNode
                  |  +- Name
                  |  +- Name
                  |  +- Name
                  |  +- Name
                  |  +- Block
                  |     +- VariableDeclaration
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  |  +- NumberLiteral
                  |     |  +- VariableInitializer
                  |     |     +- Name
                  |     |     +- PropertyGet
                  |     |        +- Name
                  |     |        +- Name
                  |     +- ForLoop
                  |     |  +- EmptyExpression
                  |     |  +- InfixExpression
                  |     |  |  +- Name
                  |     |  |  +- Name
                  |     |  +- UpdateExpression
                  |     |  |  +- Name
                  |     |  +- Scope
                  |     |     +- ExpressionStatement
                  |     |        +- FunctionCall
                  |     |           +- Name
                  |     |           +- Name
                  |     |           +- ElementGet
                  |     |           |  +- Name
                  |     |           |  +- Name
                  |     |           +- Name
                  |     +- ReturnStatement
                  |        +- Name
                  +- FunctionNode
                  |  +- Name
                  |  +- Name
                  |  +- Name
                  |  +- Name
                  |  +- Name
                  |  +- Name
                  |  +- Block
                  |     +- VariableDeclaration
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  |  +- ArrayLiteral
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  |  +- NumberLiteral
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  |  +- PropertyGet
                  |     |  |     +- Name
                  |     |  |     +- Name
                  |     |  +- VariableInitializer
                  |     |     +- Name
                  |     |     +- InfixExpression
                  |     |        +- Name
                  |     |        +- KeywordLiteral
                  |     +- ForLoop
                  |     |  +- EmptyExpression
                  |     |  +- InfixExpression
                  |     |  |  +- Name
                  |     |  |  +- Name
                  |     |  +- UpdateExpression
                  |     |  |  +- Name
                  |     |  +- Scope
                  |     |     +- IfStatement
                  |     |        +- ParenthesizedExpression
                  |     |        |  +- Assignment
                  |     |        |     +- Name
                  |     |        |     +- ElementGet
                  |     |        |        +- Name
                  |     |        |        +- Name
                  |     |        +- Scope
                  |     |           +- IfStatement
                  |     |              +- InfixExpression
                  |     |              |  +- UnaryExpression
                  |     |              |  |  +- Name
                  |     |              |  +- FunctionCall
                  |     |              |     +- Name
                  |     |              |     +- Name
                  |     |              |     +- Name
                  |     |              |     +- Name
                  |     |              +- Scope
                  |     |                 +- ExpressionStatement
                  |     |                 |  +- FunctionCall
                  |     |                 |     +- PropertyGet
                  |     |                 |     |  +- Name
                  |     |                 |     |  +- Name
                  |     |                 |     +- Name
                  |     |                 +- IfStatement
                  |     |                    +- Name
                  |     |                    +- Scope
                  |     |                       +- ExpressionStatement
                  |     |                          +- FunctionCall
                  |     |                             +- PropertyGet
                  |     |                             |  +- Name
                  |     |                             |  +- Name
                  |     |                             +- Name
                  |     +- ReturnStatement
                  |        +- Name
                  +- FunctionNode
                  |  +- Name
                  |  +- Name
                  |  +- Name
                  |  +- Name
                  |  +- Name
                  |  +- Name
                  |  +- Name
                  |  +- Block
                  |     +- IfStatement
                  |     |  +- InfixExpression
                  |     |  |  +- Name
                  |     |  |  +- UnaryExpression
                  |     |  |     +- ElementGet
                  |     |  |        +- Name
                  |     |  |        +- Name
                  |     |  +- Scope
                  |     |     +- ExpressionStatement
                  |     |        +- Assignment
                  |     |           +- Name
                  |     |           +- FunctionCall
                  |     |              +- Name
                  |     |              +- Name
                  |     +- IfStatement
                  |     |  +- InfixExpression
                  |     |  |  +- Name
                  |     |  |  +- UnaryExpression
                  |     |  |     +- ElementGet
                  |     |  |        +- Name
                  |     |  |        +- Name
                  |     |  +- Scope
                  |     |     +- ExpressionStatement
                  |     |        +- Assignment
                  |     |           +- Name
                  |     |           +- FunctionCall
                  |     |              +- Name
                  |     |              +- Name
                  |     |              +- Name
                  |     +- ReturnStatement
                  |        +- FunctionCall
                  |           +- Name
                  |           +- FunctionNode
                  |              +- Name
                  |              +- Name
                  |              +- Name
                  |              +- Name
                  |              +- Block
                  |                 +- VariableDeclaration
                  |                 |  +- VariableInitializer
                  |                 |  |  +- Name
                  |                 |  +- VariableInitializer
                  |                 |  |  +- Name
                  |                 |  +- VariableInitializer
                  |                 |  |  +- Name
                  |                 |  +- VariableInitializer
                  |                 |  |  +- Name
                  |                 |  +- VariableInitializer
                  |                 |  |  +- Name
                  |                 |  |  +- ArrayLiteral
                  |                 |  +- VariableInitializer
                  |                 |  |  +- Name
                  |                 |  |  +- ArrayLiteral
                  |                 |  +- VariableInitializer
                  |                 |  |  +- Name
                  |                 |  |  +- PropertyGet
                  |                 |  |     +- Name
                  |                 |  |     +- Name
                  |                 |  +- VariableInitializer
                  |                 |  |  +- Name
                  |                 |  |  +- InfixExpression
                  |                 |  |     +- Name
                  |                 |  |     +- FunctionCall
                  |                 |  |        +- Name
                  |                 |  |        +- InfixExpression
                  |                 |  |        |  +- Name
                  |                 |  |        |  +- StringLiteral
                  |                 |  |        +- ConditionalExpression
                  |                 |  |        |  +- PropertyGet
                  |                 |  |        |  |  +- Name
                  |                 |  |        |  |  +- Name
                  |                 |  |        |  +- ArrayLiteral
                  |                 |  |        |  |  +- Name
                  |                 |  |        |  +- Name
                  |                 |  |        +- ArrayLiteral
                  |                 |  +- VariableInitializer
                  |                 |     +- Name
                  |                 |     +- ConditionalExpression
                  |                 |        +- InfixExpression
                  |                 |        |  +- Name
                  |                 |        |  +- ParenthesizedExpression
                  |                 |        |     +- InfixExpression
                  |                 |        |        +- Name
                  |                 |        |        +- UnaryExpression
                  |                 |        |           +- Name
                  |                 |        +- FunctionCall
                  |                 |        |  +- Name
                  |                 |        |  +- Name
                  |                 |        |  +- Name
                  |                 |        |  +- Name
                  |                 |        |  +- Name
                  |                 |        |  +- Name
                  |                 |        +- Name
                  |                 +- IfStatement
                  |                 |  +- Name
                  |                 |  +- Scope
                  |                 |  |  +- Comment
                  |                 |  |  +- Comment
                  |                 |  |  +- ExpressionStatement
                  |                 |  |  |  +- Assignment
                  |                 |  |  |     +- Name
                  |                 |  |  |     +- ConditionalExpression
                  |                 |  |  |        +- InfixExpression
                  |                 |  |  |        |  +- Name
                  |                 |  |  |        |  +- ParenthesizedExpression
                  |                 |  |  |        |     +- ConditionalExpression
                  |                 |  |  |        |        +- Name
                  |                 |  |  |        |        +- Name
                  |                 |  |  |        |        +- InfixExpression
                  |                 |  |  |        |           +- Name
                  |                 |  |  |        |           +- Name
                  |                 |  |  |        +- ArrayLiteral
                  |                 |  |  |        +- Name
                  |                 |  |  +- Comment
                  |                 |  |  +- ExpressionStatement
                  |                 |  |     +- FunctionCall
                  |                 |  |        +- Name
                  |                 |  |        +- Name
                  |                 |  |        +- Name
                  |                 |  |        +- Name
                  |                 |  |        +- Name
                  |                 |  +- Scope
                  |                 |     +- ExpressionStatement
                  |                 |        +- Assignment
                  |                 |           +- Name
                  |                 |           +- Name
                  |                 +- Comment
                  |                 +- IfStatement
                  |                 |  +- Name
                  |                 |  +- Scope
                  |                 |     +- ExpressionStatement
                  |                 |     |  +- Assignment
                  |                 |     |     +- Name
                  |                 |     |     +- FunctionCall
                  |                 |     |        +- Name
                  |                 |     |        +- Name
                  |                 |     |        +- Name
                  |                 |     +- ExpressionStatement
                  |                 |     |  +- FunctionCall
                  |                 |     |     +- Name
                  |                 |     |     +- Name
                  |                 |     |     +- ArrayLiteral
                  |                 |     |     +- Name
                  |                 |     |     +- Name
                  |                 |     +- Comment
                  |                 |     +- ExpressionStatement
                  |                 |     |  +- Assignment
                  |                 |     |     +- Name
                  |                 |     |     +- PropertyGet
                  |                 |     |        +- Name
                  |                 |     |        +- Name
                  |                 |     +- WhileLoop
                  |                 |        +- UpdateExpression
                  |                 |        |  +- Name
                  |                 |        +- Scope
                  |                 |           +- IfStatement
                  |                 |              +- ParenthesizedExpression
                  |                 |              |  +- Assignment
                  |                 |              |     +- Name
                  |                 |              |     +- ElementGet
                  |                 |              |        +- Name
                  |                 |              |        +- Name
                  |                 |              +- Scope
                  |                 |                 +- ExpressionStatement
                  |                 |                    +- Assignment
                  |                 |                       +- ElementGet
                  |                 |                       |  +- Name
                  |                 |                       |  +- ElementGet
                  |                 |                       |     +- Name
                  |                 |                       |     +- Name
                  |                 |                       +- UnaryExpression
                  |                 |                          +- ParenthesizedExpression
                  |                 |                             +- Assignment
                  |                 |                                +- ElementGet
                  |                 |                                |  +- Name
                  |                 |                                |  +- ElementGet
                  |                 |                                |     +- Name
                  |                 |                                |     +- Name
                  |                 |                                +- Name
                  |                 +- IfStatement
                  |                    +- Name
                  |                    +- Scope
                  |                    |  +- IfStatement
                  |                    |     +- InfixExpression
                  |                    |     |  +- Name
                  |                    |     |  +- Name
                  |                    |     +- Scope
                  |                    |        +- IfStatement
                  |                    |        |  +- Name
                  |                    |        |  +- Scope
                  |                    |        |     +- Comment
                  |                    |        |     +- ExpressionStatement
                  |                    |        |     |  +- Assignment
                  |                    |        |     |     +- Name
                  |                    |        |     |     +- ArrayLiteral
                  |                    |        |     +- ExpressionStatement
                  |                    |        |     |  +- Assignment
                  |                    |        |     |     +- Name
                  |                    |        |     |     +- PropertyGet
                  |                    |        |     |        +- Name
                  |                    |        |     |        +- Name
                  |                    |        |     +- WhileLoop
                  |                    |        |     |  +- UpdateExpression
                  |                    |        |     |  |  +- Name
                  |                    |        |     |  +- Scope
                  |                    |        |     |     +- IfStatement
                  |                    |        |     |        +- ParenthesizedExpression
                  |                    |        |     |        |  +- Assignment
                  |                    |        |     |        |     +- Name
                  |                    |        |     |        |     +- ElementGet
                  |                    |        |     |        |        +- Name
                  |                    |        |     |        |        +- Name
                  |                    |        |     |        +- Scope
                  |                    |        |     |           +- Comment
                  |                    |        |     |           +- ExpressionStatement
                  |                    |        |     |              +- FunctionCall
                  |                    |        |     |                 +- PropertyGet
                  |                    |        |     |                 |  +- Name
                  |                    |        |     |                 |  +- Name
                  |                    |        |     |                 +- ParenthesizedExpression
                  |                    |        |     |                    +- Assignment
                  |                    |        |     |                       +- ElementGet
                  |                    |        |     |                       |  +- Name
                  |                    |        |     |                       |  +- Name
                  |                    |        |     |                       +- Name
                  |                    |        |     +- ExpressionStatement
                  |                    |        |        +- FunctionCall
                  |                    |        |           +- Name
                  |                    |        |           +- KeywordLiteral
                  |                    |        |           +- ParenthesizedExpression
                  |                    |        |           |  +- Assignment
                  |                    |        |           |     +- Name
                  |                    |        |           |     +- ArrayLiteral
                  |                    |        |           +- Name
                  |                    |        |           +- Name
                  |                    |        +- ExpressionStatement
                  |                    |        |  +- Assignment
                  |                    |        |     +- Name
                  |                    |        |     +- PropertyGet
                  |                    |        |        +- Name
                  |                    |        |        +- Name
                  |                    |        +- WhileLoop
                  |                    |           +- UpdateExpression
                  |                    |           |  +- Name
                  |                    |           +- Scope
                  |                    |              +- IfStatement
                  |                    |                 +- InfixExpression
                  |                    |                 |  +- ParenthesizedExpression
                  |                    |                 |  |  +- Assignment
                  |                    |                 |  |     +- Name
                  |                    |                 |  |     +- ElementGet
                  |                    |                 |  |        +- Name
                  |                    |                 |  |        +- Name
                  |                    |                 |  +- InfixExpression
                  |                    |                 |     +- ParenthesizedExpression
                  |                    |                 |     |  +- Assignment
                  |                    |                 |     |     +- Name
                  |                    |                 |     |     +- ConditionalExpression
                  |                    |                 |     |        +- Name
                  |                    |                 |     |        +- FunctionCall
                  |                    |                 |     |        |  +- PropertyGet
                  |                    |                 |     |        |  |  +- Name
                  |                    |                 |     |        |  |  +- Name
                  |                    |                 |     |        |  +- Name
                  |                    |                 |     |        |  +- Name
                  |                    |                 |     |        +- ElementGet
                  |                    |                 |     |           +- Name
                  |                    |                 |     |           +- Name
                  |                    |                 |     +- UnaryExpression
                  |                    |                 |        +- NumberLiteral
                  |                    |                 +- Scope
                  |                    |                    +- ExpressionStatement
                  |                    |                       +- Assignment
                  |                    |                          +- ElementGet
                  |                    |                          |  +- Name
                  |                    |                          |  +- Name
                  |                    |                          +- UnaryExpression
                  |                    |                             +- ParenthesizedExpression
                  |                    |                                +- Assignment
                  |                    |                                   +- ElementGet
                  |                    |                                   |  +- Name
                  |                    |                                   |  +- Name
                  |                    |                                   +- Name
                  |                    +- Scope
                  |                       +- ExpressionStatement
                  |                       |  +- Assignment
                  |                       |     +- Name
                  |                       |     +- FunctionCall
                  |                       |        +- Name
                  |                       |        +- ConditionalExpression
                  |                       |           +- InfixExpression
                  |                       |           |  +- Name
                  |                       |           |  +- Name
                  |                       |           +- FunctionCall
                  |                       |           |  +- PropertyGet
                  |                       |           |  |  +- Name
                  |                       |           |  |  +- Name
                  |                       |           |  +- Name
                  |                       |           |  +- PropertyGet
                  |                       |           |     +- Name
                  |                       |           |     +- Name
                  |                       |           +- Name
                  |                       +- IfStatement
                  |                          +- Name
                  |                          +- Scope
                  |                          |  +- ExpressionStatement
                  |                          |     +- FunctionCall
                  |                          |        +- Name
                  |                          |        +- KeywordLiteral
                  |                          |        +- Name
                  |                          |        +- Name
                  |                          |        +- Name
                  |                          +- Scope
                  |                             +- ExpressionStatement
                  |                                +- FunctionCall
                  |                                   +- PropertyGet
                  |                                   |  +- Name
                  |                                   |  +- Name
                  |                                   +- Name
                  |                                   +- Name
                  +- FunctionNode
                  |  +- Name
                  |  +- Name
                  |  +- Block
                  |     +- VariableDeclaration
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  |  +- PropertyGet
                  |     |  |     +- Name
                  |     |  |     +- Name
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  |  +- ElementGet
                  |     |  |     +- PropertyGet
                  |     |  |     |  +- Name
                  |     |  |     |  +- Name
                  |     |  |     +- PropertyGet
                  |     |  |        +- ElementGet
                  |     |  |        |  +- Name
                  |     |  |        |  +- NumberLiteral
                  |     |  |        +- Name
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  |  +- InfixExpression
                  |     |  |     +- Name
                  |     |  |     +- ElementGet
                  |     |  |        +- PropertyGet
                  |     |  |        |  +- Name
                  |     |  |        |  +- Name
                  |     |  |        +- StringLiteral
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  |  +- ConditionalExpression
                  |     |  |     +- Name
                  |     |  |     +- NumberLiteral
                  |     |  |     +- NumberLiteral
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  |  +- FunctionCall
                  |     |  |     +- Name
                  |     |  |     +- FunctionNode
                  |     |  |     |  +- Name
                  |     |  |     |  +- Block
                  |     |  |     |     +- ReturnStatement
                  |     |  |     |        +- InfixExpression
                  |     |  |     |           +- Name
                  |     |  |     |           +- Name
                  |     |  |     +- Name
                  |     |  |     +- KeywordLiteral
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  |  +- FunctionCall
                  |     |  |     +- Name
                  |     |  |     +- FunctionNode
                  |     |  |     |  +- Name
                  |     |  |     |  +- Block
                  |     |  |     |     +- ReturnStatement
                  |     |  |     |        +- InfixExpression
                  |     |  |     |           +- FunctionCall
                  |     |  |     |           |  +- PropertyGet
                  |     |  |     |           |  |  +- Name
                  |     |  |     |           |  |  +- Name
                  |     |  |     |           |  +- Name
                  |     |  |     |           |  +- Name
                  |     |  |     |           +- UnaryExpression
                  |     |  |     |              +- NumberLiteral
                  |     |  |     +- Name
                  |     |  |     +- KeywordLiteral
                  |     |  +- VariableInitializer
                  |     |     +- Name
                  |     |     +- ArrayLiteral
                  |     |        +- FunctionNode
                  |     |           +- Name
                  |     |           +- Name
                  |     |           +- Name
                  |     |           +- Block
                  |     |              +- VariableDeclaration
                  |     |              |  +- VariableInitializer
                  |     |              |     +- Name
                  |     |              |     +- InfixExpression
                  |     |              |        +- ParenthesizedExpression
                  |     |              |        |  +- InfixExpression
                  |     |              |        |     +- UnaryExpression
                  |     |              |        |     |  +- Name
                  |     |              |        |     +- ParenthesizedExpression
                  |     |              |        |        +- InfixExpression
                  |     |              |        |           +- Name
                  |     |              |        |           +- InfixExpression
                  |     |              |        |              +- Name
                  |     |              |        |              +- Name
                  |     |              |        +- ParenthesizedExpression
                  |     |              |           +- ConditionalExpression
                  |     |              |              +- PropertyGet
                  |     |              |              |  +- ParenthesizedExpression
                  |     |              |              |  |  +- Assignment
                  |     |              |              |  |     +- Name
                  |     |              |              |  |     +- Name
                  |     |              |              |  +- Name
                  |     |              |              +- FunctionCall
                  |     |              |              |  +- Name
                  |     |              |              |  +- Name
                  |     |              |              |  +- Name
                  |     |              |              |  +- Name
                  |     |              |              +- FunctionCall
                  |     |              |                 +- Name
                  |     |              |                 +- Name
                  |     |              |                 +- Name
                  |     |              |                 +- Name
                  |     |              +- Comment
                  |     |              +- ExpressionStatement
                  |     |              |  +- Assignment
                  |     |              |     +- Name
                  |     |              |     +- KeywordLiteral
                  |     |              +- ReturnStatement
                  |     |                 +- Name
                  |     +- ForLoop
                  |     |  +- EmptyExpression
                  |     |  +- InfixExpression
                  |     |  |  +- Name
                  |     |  |  +- Name
                  |     |  +- UpdateExpression
                  |     |  |  +- Name
                  |     |  +- Scope
                  |     |     +- IfStatement
                  |     |        +- ParenthesizedExpression
                  |     |        |  +- Assignment
                  |     |        |     +- Name
                  |     |        |     +- ElementGet
                  |     |        |        +- PropertyGet
                  |     |        |        |  +- Name
                  |     |        |        |  +- Name
                  |     |        |        +- PropertyGet
                  |     |        |           +- ElementGet
                  |     |        |           |  +- Name
                  |     |        |           |  +- Name
                  |     |        |           +- Name
                  |     |        +- Scope
                  |     |        |  +- ExpressionStatement
                  |     |        |     +- Assignment
                  |     |        |        +- Name
                  |     |        |        +- ArrayLiteral
                  |     |        |           +- FunctionCall
                  |     |        |              +- Name
                  |     |        |              +- FunctionCall
                  |     |        |              |  +- Name
                  |     |        |              |  +- Name
                  |     |        |              +- Name
                  |     |        +- Scope
                  |     |           +- ExpressionStatement
                  |     |           |  +- Assignment
                  |     |           |     +- Name
                  |     |           |     +- FunctionCall
                  |     |           |        +- PropertyGet
                  |     |           |        |  +- ElementGet
                  |     |           |        |  |  +- PropertyGet
                  |     |           |        |  |  |  +- Name
                  |     |           |        |  |  |  +- Name
                  |     |           |        |  |  +- PropertyGet
                  |     |           |        |  |     +- ElementGet
                  |     |           |        |  |     |  +- Name
                  |     |           |        |  |     |  +- Name
                  |     |           |        |  |     +- Name
                  |     |           |        |  +- Name
                  |     |           |        +- KeywordLiteral
                  |     |           |        +- PropertyGet
                  |     |           |           +- ElementGet
                  |     |           |           |  +- Name
                  |     |           |           |  +- Name
                  |     |           |           +- Name
                  |     |           +- Comment
                  |     |           +- IfStatement
                  |     |           |  +- ElementGet
                  |     |           |  |  +- Name
                  |     |           |  |  +- Name
                  |     |           |  +- Scope
                  |     |           |     +- Comment
                  |     |           |     +- ExpressionStatement
                  |     |           |     |  +- Assignment
                  |     |           |     |     +- Name
                  |     |           |     |     +- UpdateExpression
                  |     |           |     |        +- Name
                  |     |           |     +- ForLoop
                  |     |           |     |  +- EmptyExpression
                  |     |           |     |  +- InfixExpression
                  |     |           |     |  |  +- Name
                  |     |           |     |  |  +- Name
                  |     |           |     |  +- UpdateExpression
                  |     |           |     |  |  +- Name
                  |     |           |     |  +- Scope
                  |     |           |     |     +- IfStatement
                  |     |           |     |        +- ElementGet
                  |     |           |     |        |  +- PropertyGet
                  |     |           |     |        |  |  +- Name
                  |     |           |     |        |  |  +- Name
                  |     |           |     |        |  +- PropertyGet
                  |     |           |     |        |     +- ElementGet
                  |     |           |     |        |     |  +- Name
                  |     |           |     |        |     |  +- Name
                  |     |           |     |        |     +- Name
                  |     |           |     |        +- Scope
                  |     |           |     |           +- BreakStatement
                  |     |           |     +- ReturnStatement
                  |     |           |        +- FunctionCall
                  |     |           |           +- Name
                  |     |           |           +- InfixExpression
                  |     |           |           |  +- InfixExpression
                  |     |           |           |  |  +- Name
                  |     |           |           |  |  +- NumberLiteral
                  |     |           |           |  +- FunctionCall
                  |     |           |           |     +- Name
                  |     |           |           |     +- Name
                  |     |           |           +- InfixExpression
                  |     |           |           |  +- InfixExpression
                  |     |           |           |  |  +- Name
                  |     |           |           |  |  +- NumberLiteral
                  |     |           |           |  +- FunctionCall
                  |     |           |           |     +- PropertyGet
                  |     |           |           |     |  +- FunctionCall
                  |     |           |           |     |  |  +- Name
                  |     |           |           |     |  |  +- FunctionCall
                  |     |           |           |     |  |     +- PropertyGet
                  |     |           |           |     |  |     |  +- FunctionCall
                  |     |           |           |     |  |     |  |  +- PropertyGet
                  |     |           |           |     |  |     |  |  |  +- Name
                  |     |           |           |     |  |     |  |  |  +- Name
                  |     |           |           |     |  |     |  |  +- NumberLiteral
                  |     |           |           |     |  |     |  |  +- InfixExpression
                  |     |           |           |     |  |     |  |     +- Name
                  |     |           |           |     |  |     |  |     +- NumberLiteral
                  |     |           |           |     |  |     |  +- Name
                  |     |           |           |     |  |     +- ObjectLiteral
                  |     |           |           |     |  |        +- ObjectProperty
                  |     |           |           |     |  |           +- Name
                  |     |           |           |     |  |           +- ConditionalExpression
                  |     |           |           |     |  |              +- InfixExpression
                  |     |           |           |     |  |              |  +- PropertyGet
                  |     |           |           |     |  |              |  |  +- ElementGet
                  |     |           |           |     |  |              |  |  |  +- Name
                  |     |           |           |     |  |              |  |  |  +- InfixExpression
                  |     |           |           |     |  |              |  |  |     +- Name
                  |     |           |           |     |  |              |  |  |     +- NumberLiteral
                  |     |           |           |     |  |              |  |  +- Name
                  |     |           |           |     |  |              |  +- StringLiteral
                  |     |           |           |     |  |              +- StringLiteral
                  |     |           |           |     |  |              +- StringLiteral
                  |     |           |           |     |  +- Name
                  |     |           |           |     +- Name
                  |     |           |           |     +- StringLiteral
                  |     |           |           +- Name
                  |     |           |           +- InfixExpression
                  |     |           |           |  +- InfixExpression
                  |     |           |           |  |  +- Name
                  |     |           |           |  |  +- Name
                  |     |           |           |  +- FunctionCall
                  |     |           |           |     +- Name
                  |     |           |           |     +- FunctionCall
                  |     |           |           |        +- PropertyGet
                  |     |           |           |        |  +- Name
                  |     |           |           |        |  +- Name
                  |     |           |           |        +- Name
                  |     |           |           |        +- Name
                  |     |           |           +- InfixExpression
                  |     |           |           |  +- InfixExpression
                  |     |           |           |  |  +- Name
                  |     |           |           |  |  +- Name
                  |     |           |           |  +- FunctionCall
                  |     |           |           |     +- Name
                  |     |           |           |     +- ParenthesizedExpression
                  |     |           |           |        +- Assignment
                  |     |           |           |           +- Name
                  |     |           |           |           +- FunctionCall
                  |     |           |           |              +- PropertyGet
                  |     |           |           |              |  +- Name
                  |     |           |           |              |  +- Name
                  |     |           |           |              +- Name
                  |     |           |           +- InfixExpression
                  |     |           |              +- InfixExpression
                  |     |           |              |  +- Name
                  |     |           |              |  +- Name
                  |     |           |              +- FunctionCall
                  |     |           |                 +- Name
                  |     |           |                 +- Name
                  |     |           +- ExpressionStatement
                  |     |              +- FunctionCall
                  |     |                 +- PropertyGet
                  |     |                 |  +- Name
                  |     |                 |  +- Name
                  |     |                 +- Name
                  |     +- ReturnStatement
                  |        +- FunctionCall
                  |           +- Name
                  |           +- Name
                  +- FunctionNode
                  |  +- Name
                  |  +- Name
                  |  +- Name
                  |  +- Block
                  |     +- VariableDeclaration
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  |  +- InfixExpression
                  |     |  |     +- PropertyGet
                  |     |  |     |  +- Name
                  |     |  |     |  +- Name
                  |     |  |     +- NumberLiteral
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  |  +- InfixExpression
                  |     |  |     +- PropertyGet
                  |     |  |     |  +- Name
                  |     |  |     |  +- Name
                  |     |  |     +- NumberLiteral
                  |     |  +- VariableInitializer
                  |     |     +- Name
                  |     |     +- FunctionNode
                  |     |        +- Name
                  |     |        +- Name
                  |     |        +- Name
                  |     |        +- Name
                  |     |        +- Name
                  |     |        +- Block
                  |     |           +- VariableDeclaration
                  |     |           |  +- VariableInitializer
                  |     |           |  |  +- Name
                  |     |           |  +- VariableInitializer
                  |     |           |  |  +- Name
                  |     |           |  +- VariableInitializer
                  |     |           |  |  +- Name
                  |     |           |  +- VariableInitializer
                  |     |           |  |  +- Name
                  |     |           |  |  +- NumberLiteral
                  |     |           |  +- VariableInitializer
                  |     |           |  |  +- Name
                  |     |           |  |  +- StringLiteral
                  |     |           |  +- VariableInitializer
                  |     |           |  |  +- Name
                  |     |           |  |  +- InfixExpression
                  |     |           |  |     +- Name
                  |     |           |  |     +- ArrayLiteral
                  |     |           |  +- VariableInitializer
                  |     |           |  |  +- Name
                  |     |           |  |  +- ArrayLiteral
                  |     |           |  +- VariableInitializer
                  |     |           |  |  +- Name
                  |     |           |  |  +- Name
                  |     |           |  +- VariableInitializer
                  |     |           |  |  +- Name
                  |     |           |  |  +- InfixExpression
                  |     |           |  |     +- Name
                  |     |           |  |     +- InfixExpression
                  |     |           |  |        +- Name
                  |     |           |  |        +- FunctionCall
                  |     |           |  |           +- PropertyGet
                  |     |           |  |           |  +- PropertyGet
                  |     |           |  |           |  |  +- Name
                  |     |           |  |           |  |  +- Name
                  |     |           |  |           |  +- Name
                  |     |           |  |           +- StringLiteral
                  |     |           |  |           +- Name
                  |     |           |  +- VariableInitializer
                  |     |           |     +- Name
                  |     |           |     +- ParenthesizedExpression
                  |     |           |        +- Assignment
                  |     |           |           +- Name
                  |     |           |           +- ConditionalExpression
                  |     |           |              +- InfixExpression
                  |     |           |              |  +- Name
                  |     |           |              |  +- KeywordLiteral
                  |     |           |              +- NumberLiteral
                  |     |           |              +- InfixExpression
                  |     |           |                 +- FunctionCall
                  |     |           |                 |  +- PropertyGet
                  |     |           |                 |     +- Name
                  |     |           |                 |     +- Name
                  |     |           |                 +- NumberLiteral
                  |     |           +- IfStatement
                  |     |           |  +- Name
                  |     |           |  +- Scope
                  |     |           |     +- Comment
                  |     |           |     +- Comment
                  |     |           |     +- Comment
                  |     |           |     +- Comment
                  |     |           |     +- ExpressionStatement
                  |     |           |        +- Assignment
                  |     |           |           +- Name
                  |     |           |           +- InfixExpression
                  |     |           |              +- InfixExpression
                  |     |           |              |  +- Name
                  |     |           |              |  +- Name
                  |     |           |              +- InfixExpression
                  |     |           |                 +- Name
                  |     |           |                 +- Name
                  |     |           +- ForLoop
                  |     |           |  +- EmptyExpression
                  |     |           |  +- InfixExpression
                  |     |           |  |  +- ParenthesizedExpression
                  |     |           |  |  |  +- Assignment
                  |     |           |  |  |     +- Name
                  |     |           |  |  |     +- ElementGet
                  |     |           |  |  |        +- Name
                  |     |           |  |  |        +- Name
                  |     |           |  |  +- KeywordLiteral
                  |     |           |  +- UpdateExpression
                  |     |           |  |  +- Name
                  |     |           |  +- Scope
                  |     |           |     +- IfStatement
                  |     |           |     |  +- InfixExpression
                  |     |           |     |  |  +- Name
                  |     |           |     |  |  +- Name
                  |     |           |     |  +- Scope
                  |     |           |     |     +- ExpressionStatement
                  |     |           |     |     |  +- Assignment
                  |     |           |     |     |     +- Name
                  |     |           |     |     |     +- NumberLiteral
                  |     |           |     |     +- Comment
                  |     |           |     |     +- Comment
                  |     |           |     |     +- Comment
                  |     |           |     |     +- Comment
                  |     |           |     |     +- IfStatement
                  |     |           |     |     |  +- InfixExpression
                  |     |           |     |     |  |  +- UnaryExpression
                  |     |           |     |     |  |  |  +- Name
                  |     |           |     |     |  |  +- InfixExpression
                  |     |           |     |     |  |     +- PropertyGet
                  |     |           |     |     |  |     |  +- Name
                  |     |           |     |     |  |     |  +- Name
                  |     |           |     |     |  |     +- Name
                  |     |           |     |     |  +- Scope
                  |     |           |     |     |     +- ExpressionStatement
                  |     |           |     |     |     |  +- FunctionCall
                  |     |           |     |     |     |     +- Name
                  |     |           |     |     |     |     +- Name
                  |     |           |     |     |     +- ExpressionStatement
                  |     |           |     |     |        +- Assignment
                  |     |           |     |     |           +- Name
                  |     |           |     |     |           +- UnaryExpression
                  |     |           |     |     |              +- Name
                  |     |           |     |     +- WhileLoop
                  |     |           |     |     |  +- ParenthesizedExpression
                  |     |           |     |     |  |  +- Assignment
                  |     |           |     |     |  |     +- Name
                  |     |           |     |     |  |     +- ElementGet
                  |     |           |     |     |  |        +- Name
                  |     |           |     |     |  |        +- UpdateExpression
                  |     |           |     |     |  |           +- Name
                  |     |           |     |     |  +- Scope
                  |     |           |     |     |     +- IfStatement
                  |     |           |     |     |        +- FunctionCall
                  |     |           |     |     |        |  +- Name
                  |     |           |     |     |        |  +- Name
                  |     |           |     |     |        |  +- InfixExpression
                  |     |           |     |     |        |  |  +- Name
                  |     |           |     |     |        |  |  +- Name
                  |     |           |     |     |        |  +- Name
                  |     |           |     |     |        +- Scope
                  |     |           |     |     |           +- ExpressionStatement
                  |     |           |     |     |           |  +- FunctionCall
                  |     |           |     |     |           |     +- PropertyGet
                  |     |           |     |     |           |     |  +- Name
                  |     |           |     |     |           |     |  +- Name
                  |     |           |     |     |           |     +- Name
                  |     |           |     |     |           |     +- Name
                  |     |           |     |     |           +- BreakStatement
                  |     |           |     |     +- IfStatement
                  |     |           |     |        +- Name
                  |     |           |     |        +- Scope
                  |     |           |     |           +- ExpressionStatement
                  |     |           |     |              +- Assignment
                  |     |           |     |                 +- Name
                  |     |           |     |                 +- Name
                  |     |           |     +- IfStatement
                  |     |           |        +- Name
                  |     |           |        +- Scope
                  |     |           |           +- Comment
                  |     |           |           +- IfStatement
                  |     |           |           |  +- ParenthesizedExpression
                  |     |           |           |  |  +- Assignment
                  |     |           |           |  |     +- Name
                  |     |           |           |  |     +- InfixExpression
                  |     |           |           |  |        +- UnaryExpression
                  |     |           |           |  |        |  +- Name
                  |     |           |           |  |        +- Name
                  |     |           |           |  +- Scope
                  |     |           |           |     +- ExpressionStatement
                  |     |           |           |        +- UpdateExpression
                  |     |           |           |           +- Name
                  |     |           |           +- IfStatement
                  |     |           |              +- Name
                  |     |           |              +- Scope
                  |     |           |                 +- ExpressionStatement
                  |     |           |                    +- FunctionCall
                  |     |           |                       +- PropertyGet
                  |     |           |                       |  +- Name
                  |     |           |                       |  +- Name
                  |     |           |                       +- Name
                  |     |           +- Comment
                  |     |           +- Comment
                  |     |           +- ExpressionStatement
                  |     |           |  +- Assignment
                  |     |           |     +- Name
                  |     |           |     +- Name
                  |     |           +- Comment
                  |     |           +- Comment
                  |     |           +- Comment
                  |     |           +- Comment
                  |     |           +- Comment
                  |     |           +- Comment
                  |     |           +- Comment
                  |     |           +- IfStatement
                  |     |           |  +- InfixExpression
                  |     |           |  |  +- Name
                  |     |           |  |  +- InfixExpression
                  |     |           |  |     +- Name
                  |     |           |  |     +- Name
                  |     |           |  +- Scope
                  |     |           |     +- ExpressionStatement
                  |     |           |     |  +- Assignment
                  |     |           |     |     +- Name
                  |     |           |     |     +- NumberLiteral
                  |     |           |     +- WhileLoop
                  |     |           |     |  +- ParenthesizedExpression
                  |     |           |     |  |  +- Assignment
                  |     |           |     |  |     +- Name
                  |     |           |     |  |     +- ElementGet
                  |     |           |     |  |        +- Name
                  |     |           |     |  |        +- UpdateExpression
                  |     |           |     |  |           +- Name
                  |     |           |     |  +- Scope
                  |     |           |     |     +- ExpressionStatement
                  |     |           |     |        +- FunctionCall
                  |     |           |     |           +- Name
                  |     |           |     |           +- Name
                  |     |           |     |           +- Name
                  |     |           |     |           +- Name
                  |     |           |     |           +- Name
                  |     |           |     +- IfStatement
                  |     |           |     |  +- Name
                  |     |           |     |  +- Scope
                  |     |           |     |     +- Comment
                  |     |           |     |     +- IfStatement
                  |     |           |     |     |  +- InfixExpression
                  |     |           |     |     |  |  +- Name
                  |     |           |     |     |  |  +- NumberLiteral
                  |     |           |     |     |  +- Scope
                  |     |           |     |     |     +- WhileLoop
                  |     |           |     |     |        +- UpdateExpression
                  |     |           |     |     |        |  +- Name
                  |     |           |     |     |        +- Scope
                  |     |           |     |     |           +- IfStatement
                  |     |           |     |     |              +- UnaryExpression
                  |     |           |     |     |              |  +- ParenthesizedExpression
                  |     |           |     |     |              |     +- InfixExpression
                  |     |           |     |     |              |        +- ElementGet
                  |     |           |     |     |              |        |  +- Name
                  |     |           |     |     |              |        |  +- Name
                  |     |           |     |     |              |        +- ElementGet
                  |     |           |     |     |              |           +- Name
                  |     |           |     |     |              |           +- Name
                  |     |           |     |     |              +- Scope
                  |     |           |     |     |                 +- ExpressionStatement
                  |     |           |     |     |                    +- Assignment
                  |     |           |     |     |                       +- ElementGet
                  |     |           |     |     |                       |  +- Name
                  |     |           |     |     |                       |  +- Name
                  |     |           |     |     |                       +- FunctionCall
                  |     |           |     |     |                          +- PropertyGet
                  |     |           |     |     |                          |  +- Name
                  |     |           |     |     |                          |  +- Name
                  |     |           |     |     |                          +- Name
                  |     |           |     |     +- ExpressionStatement
                  |     |           |     |        +- Assignment
                  |     |           |     |           +- Name
                  |     |           |     |           +- FunctionCall
                  |     |           |     |              +- Name
                  |     |           |     |              +- Name
                  |     |           |     +- ExpressionStatement
                  |     |           |     |  +- FunctionCall
                  |     |           |     |     +- PropertyGet
                  |     |           |     |     |  +- Name
                  |     |           |     |     |  +- Name
                  |     |           |     |     +- Name
                  |     |           |     |     +- Name
                  |     |           |     +- Comment
                  |     |           |     +- IfStatement
                  |     |           |        +- InfixExpression
                  |     |           |        |  +- Name
                  |     |           |        |  +- InfixExpression
                  |     |           |        |     +- UnaryExpression
                  |     |           |        |     |  +- Name
                  |     |           |        |     +- InfixExpression
                  |     |           |        |        +- InfixExpression
                  |     |           |        |        |  +- PropertyGet
                  |     |           |        |        |  |  +- Name
                  |     |           |        |        |  |  +- Name
                  |     |           |        |        |  +- NumberLiteral
                  |     |           |        |        +- InfixExpression
                  |     |           |        |           +- ParenthesizedExpression
                  |     |           |        |           |  +- InfixExpression
                  |     |           |        |           |     +- Name
                  |     |           |        |           |     +- PropertyGet
                  |     |           |        |           |        +- Name
                  |     |           |        |           |        +- Name
                  |     |           |        |           +- NumberLiteral
                  |     |           |        +- Scope
                  |     |           |           +- ExpressionStatement
                  |     |           |              +- FunctionCall
                  |     |           |                 +- PropertyGet
                  |     |           |                 |  +- Name
                  |     |           |                 |  +- Name
                  |     |           |                 +- Name
                  |     |           +- IfStatement
                  |     |           |  +- Name
                  |     |           |  +- Scope
                  |     |           |     +- ExpressionStatement
                  |     |           |     |  +- Assignment
                  |     |           |     |     +- Name
                  |     |           |     |     +- Name
                  |     |           |     +- ExpressionStatement
                  |     |           |        +- Assignment
                  |     |           |           +- Name
                  |     |           |           +- Name
                  |     |           +- ReturnStatement
                  |     |              +- Name
                  |     +- ReturnStatement
                  |        +- ConditionalExpression
                  |           +- Name
                  |           +- FunctionCall
                  |           |  +- Name
                  |           |  +- Name
                  |           +- Name
                  +- FunctionNode
                  |  +- Name
                  |  +- Name
                  |  +- Name
                  |  +- Block
                  |     +- VariableDeclaration
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  |  +- ArrayLiteral
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  |  +- ArrayLiteral
                  |     |  +- VariableInitializer
                  |     |     +- Name
                  |     |     +- ElementGet
                  |     |        +- Name
                  |     |        +- InfixExpression
                  |     |           +- Name
                  |     |           +- StringLiteral
                  |     +- IfStatement
                  |     |  +- UnaryExpression
                  |     |  |  +- Name
                  |     |  +- Scope
                  |     |     +- Comment
                  |     |     +- IfStatement
                  |     |     |  +- UnaryExpression
                  |     |     |  |  +- Name
                  |     |     |  +- Scope
                  |     |     |     +- ExpressionStatement
                  |     |     |        +- Assignment
                  |     |     |           +- Name
                  |     |     |           +- FunctionCall
                  |     |     |              +- Name
                  |     |     |              +- Name
                  |     |     +- ExpressionStatement
                  |     |     |  +- Assignment
                  |     |     |     +- Name
                  |     |     |     +- PropertyGet
                  |     |     |        +- Name
                  |     |     |        +- Name
                  |     |     +- WhileLoop
                  |     |     |  +- UpdateExpression
                  |     |     |  |  +- Name
                  |     |     |  +- Scope
                  |     |     |     +- ExpressionStatement
                  |     |     |     |  +- Assignment
                  |     |     |     |     +- Name
                  |     |     |     |     +- FunctionCall
                  |     |     |     |        +- Name
                  |     |     |     |        +- ElementGet
                  |     |     |     |           +- Name
                  |     |     |     |           +- Name
                  |     |     |     +- IfStatement
                  |     |     |        +- ElementGet
                  |     |     |        |  +- Name
                  |     |     |        |  +- Name
                  |     |     |        +- Scope
                  |     |     |        |  +- ExpressionStatement
                  |     |     |        |     +- FunctionCall
                  |     |     |        |        +- PropertyGet
                  |     |     |        |        |  +- Name
                  |     |     |        |        |  +- Name
                  |     |     |        |        +- Name
                  |     |     |        +- Scope
                  |     |     |           +- ExpressionStatement
                  |     |     |              +- FunctionCall
                  |     |     |                 +- PropertyGet
                  |     |     |                 |  +- Name
                  |     |     |                 |  +- Name
                  |     |     |                 +- Name
                  |     |     +- Comment
                  |     |     +- ExpressionStatement
                  |     |     |  +- Assignment
                  |     |     |     +- Name
                  |     |     |     +- FunctionCall
                  |     |     |        +- Name
                  |     |     |        +- Name
                  |     |     |        +- FunctionCall
                  |     |     |           +- Name
                  |     |     |           +- Name
                  |     |     |           +- Name
                  |     |     +- Comment
                  |     |     +- ExpressionStatement
                  |     |        +- Assignment
                  |     |           +- PropertyGet
                  |     |           |  +- Name
                  |     |           |  +- Name
                  |     |           +- Name
                  |     +- ReturnStatement
                  |        +- Name
                  +- Comment
                  +- FunctionNode
                  |  +- Name
                  |  +- Name
                  |  +- Name
                  |  +- Name
                  |  +- Name
                  |  +- Block
                  |     +- VariableDeclaration
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  +- VariableInitializer
                  |     |  |  +- Name
                  |     |  |  +- InfixExpression
                  |     |  |     +- InfixExpression
                  |     |  |     |  +- UnaryExpression
                  |     |  |     |  |  +- Name
                  |     |  |     |  +- StringLiteral
                  |     |  |     +- Name
                  |     |  +- VariableInitializer
                  |     |     +- Name
                  |     |     +- InfixExpression
                  |     |        +- UnaryExpression
                  |     |        |  +- Name
                  |     |        +- FunctionCall
                  |     |           +- Name
                  |     |           +- ParenthesizedExpression
                  |     |              +- Assignment
                  |     |                 +- Name
                  |     |                 +- InfixExpression
                  |     |                    +- PropertyGet
                  |     |                    |  +- Name
                  |     |                    |  +- Name
                  |     |                    +- Name
                  |     +- ExpressionStatement
                  |     |  +- Assignment
                  |     |     +- Name
                  |     |     +- InfixExpression
                  |     |        +- Name
                  |     |        +- ArrayLiteral
                  |     +- Comment
                  |     +- Comment
                  |     +- IfStatement
                  |     |  +- InfixExpression
                  |     |  |  +- PropertyGet
                  |     |  |  |  +- Name
                  |     |  |  |  +- Name
                  |     |  |  +- NumberLiteral
                  |     |  +- Scope
                  |     |     +- Comment
                  |     |     +- ExpressionStatement
                  |     |     |  +- Assignment
                  |     |     |     +- Name
                  |     |     |     +- Assignment
                  |     |     |        +- ElementGet
                  |     |     |        |  +- Name
                  |     |     |        |  +- NumberLiteral
                  |     |     |        +- FunctionCall
                  |     |     |           +- PropertyGet
                  |     |     |           |  +- ElementGet
                  |     |     |           |  |  +- Name
                  |     |     |           |  |  +- NumberLiteral
                  |     |     |           |  +- Name
                  |     |     |           +- NumberLiteral
                  |     |     +- IfStatement
                  |     |     |  +- InfixExpression
                  |     |     |  |  +- InfixExpression
                  |     |     |  |  |  +- PropertyGet
                  |     |     |  |  |  |  +- Name
                  |     |     |  |  |  |  +- Name
                  |     |     |  |  |  +- NumberLiteral
                  |     |     |  |  +- InfixExpression
                  |     |     |  |     +- InfixExpression
                  |     |     |  |     |  +- PropertyGet
                  |     |     |  |     |  |  +- ParenthesizedExpression
                  |     |     |  |     |  |  |  +- Assignment
                  |     |     |  |     |  |  |     +- Name
                  |     |     |  |     |  |  |     +- ElementGet
                  |     |     |  |     |  |  |        +- Name
                  |     |     |  |     |  |  |        +- NumberLiteral
                  |     |     |  |     |  |  +- Name
                  |     |     |  |     |  +- StringLiteral
                  |     |     |  |     +- InfixExpression
                  |     |     |  |        +- InfixExpression
                  |     |     |  |        |  +- PropertyGet
                  |     |     |  |        |  |  +- Name
                  |     |     |  |        |  |  +- Name
                  |     |     |  |        |  +- NumberLiteral
                  |     |     |  |        +- InfixExpression
                  |     |     |  |           +- Name
                  |     |     |  |           +- ElementGet
                  |     |     |  |              +- PropertyGet
                  |     |     |  |              |  +- Name
                  |     |     |  |              |  +- Name
                  |     |     |  |              +- PropertyGet
                  |     |     |  |                 +- ElementGet
                  |     |     |  |                 |  +- Name
                  |     |     |  |                 |  +- NumberLiteral
                  |     |     |  |                 +- Name
                  |     |     |  +- Scope
                  |     |     |     +- ExpressionStatement
                  |     |     |     |  +- Assignment
                  |     |     |     |     +- Name
                  |     |     |     |     +- ElementGet
                  |     |     |     |        +- ParenthesizedExpression
                  |     |     |     |        |  +- InfixExpression
                  |     |     |     |        |     +- FunctionCall
                  |     |     |     |        |     |  +- PropertyGet
                  |     |     |     |        |     |  |  +- PropertyGet
                  |     |     |     |        |     |  |  |  +- Name
                  |     |     |     |        |     |  |  |  +- Name
                  |     |     |     |        |     |  |  +- Name
                  |     |     |     |        |     |  +- FunctionCall
                  |     |     |     |        |     |  |  +- PropertyGet
                  |     |     |     |        |     |  |  |  +- ElementGet
                  |     |     |     |        |     |  |  |  |  +- PropertyGet
                  |     |     |     |        |     |  |  |  |  |  +- Name
                  |     |     |     |        |     |  |  |  |  |  +- Name
                  |     |     |     |        |     |  |  |  |  +- NumberLiteral
                  |     |     |     |        |     |  |  |  +- Name
                  |     |     |     |        |     |  |  +- Name
                  |     |     |     |        |     |  |  +- Name
                  |     |     |     |        |     |  +- Name
                  |     |     |     |        |     +- ArrayLiteral
                  |     |     |     |        +- NumberLiteral
                  |     |     |     +- IfStatement
                  |     |     |     |  +- UnaryExpression
                  |     |     |     |  |  +- Name
                  |     |     |     |  +- Scope
                  |     |     |     |  |  +- ReturnStatement
                  |     |     |     |  |  |  +- Name
                  |     |     |     |  |  +- Comment
                  |     |     |     |  +- IfStatement
                  |     |     |     |     +- Name
                  |     |     |     |     +- Scope
                  |     |     |     |        +- ExpressionStatement
                  |     |     |     |           +- Assignment
                  |     |     |     |              +- Name
                  |     |     |     |              +- PropertyGet
                  |     |     |     |                 +- Name
                  |     |     |     |                 +- Name
                  |     |     |     +- ExpressionStatement
                  |     |     |        +- Assignment
                  |     |     |           +- Name
                  |     |     |           +- FunctionCall
                  |     |     |              +- PropertyGet
                  |     |     |              |  +- Name
                  |     |     |              |  +- Name
                  |     |     |              +- PropertyGet
                  |     |     |                 +- PropertyGet
                  |     |     |                 |  +- FunctionCall
                  |     |     |                 |  |  +- PropertyGet
                  |     |     |                 |  |     +- Name
                  |     |     |                 |  |     +- Name
                  |     |     |                 |  +- Name
                  |     |     |                 +- Name
                  |     |     +- ExpressionStatement
                  |     |     |  +- Assignment
                  |     |     |     +- Name
                  |     |     |     +- ConditionalExpression
                  |     |     |        +- FunctionCall
                  |     |     |        |  +- PropertyGet
                  |     |     |        |  |  +- PropertyGet
                  |     |     |        |  |  |  +- Name
                  |     |     |        |  |  |  +- Name
                  |     |     |        |  |  +- Name
                  |     |     |        |  +- Name
                  |     |     |        +- NumberLiteral
                  |     |     |        +- PropertyGet
                  |     |     |           +- Name
                  |     |     |           +- Name
                  |     |     +- WhileLoop
                  |     |        +- UpdateExpression
                  |     |        |  +- Name
                  |     |        +- Scope
                  |     |           +- ExpressionStatement
                  |     |           |  +- Assignment
                  |     |           |     +- Name
                  |     |           |     +- ElementGet
                  |     |           |        +- Name
                  |     |           |        +- Name
                  |     |           +- Comment
                  |     |           +- IfStatement
                  |     |           |  +- ElementGet
                  |     |           |  |  +- PropertyGet
                  |     |           |  |  |  +- Name
                  |     |           |  |  |  +- Name
                  |     |           |  |  +- ParenthesizedExpression
                  |     |           |  |     +- Assignment
                  |     |           |  |        +- Name
                  |     |           |  |        +- PropertyGet
                  |     |           |  |           +- Name
                  |     |           |  |           +- Name
                  |     |           |  +- Scope
                  |     |           |     +- BreakStatement
                  |     |           +- IfStatement
                  |     |              +- ParenthesizedExpression
                  |     |              |  +- Assignment
                  |     |              |     +- Name
                  |     |              |     +- ElementGet
                  |     |              |        +- PropertyGet
                  |     |              |        |  +- Name
                  |     |              |        |  +- Name
                  |     |              |        +- Name
                  |     |              +- Scope
                  |     |                 +- Comment
                  |     |                 +- IfStatement
                  |     |                    +- ParenthesizedExpression
                  |     |                    |  +- Assignment
                  |     |                    |     +- Name
                  |     |                    |     +- FunctionCall
                  |     |                    |        +- Name
                  |     |                    |        +- FunctionCall
                  |     |                    |        |  +- PropertyGet
                  |     |                    |        |  |  +- ElementGet
                  |     |                    |        |  |  |  +- PropertyGet
                  |     |                    |        |  |  |  |  +- Name
                  |     |                    |        |  |  |  |  +- Name
                  |     |                    |        |  |  |  +- NumberLiteral
                  |     |                    |        |  |  +- Name
                  |     |                    |        |  +- Name
                  |     |                    |        |  +- Name
                  |     |                    |        +- InfixExpression
                  |     |                    |           +- InfixExpression
                  |     |                    |           |  +- FunctionCall
                  |     |                    |           |  |  +- PropertyGet
                  |     |                    |           |  |  |  +- Name
                  |     |                    |           |  |  |  +- Name
                  |     |                    |           |  |  +- PropertyGet
                  |     |                    |           |  |     +- ElementGet
                  |     |                    |           |  |     |  +- Name
                  |     |                    |           |  |     |  +- NumberLiteral
                  |     |                    |           |  |     +- Name
                  |     |                    |           |  +- FunctionCall
                  |     |                    |           |     +- Name
                  |     |                    |           |     +- PropertyGet
                  |     |                    |           |        +- Name
                  |     |                    |           |        +- Name
                  |     |                    |           +- Name
                  |     |                    +- Scope
                  |     |                       +- Comment
                  |     |                       +- ExpressionStatement
                  |     |                       |  +- FunctionCall
                  |     |                       |     +- PropertyGet
                  |     |                       |     |  +- Name
                  |     |                       |     |  +- Name
                  |     |                       |     +- Name
                  |     |                       |     +- NumberLiteral
                  |     |                       +- ExpressionStatement
                  |     |                       |  +- Assignment
                  |     |                       |     +- Name
                  |     |                       |     +- InfixExpression
                  |     |                       |        +- PropertyGet
                  |     |                       |        |  +- Name
                  |     |                       |        |  +- Name
                  |     |                       |        +- FunctionCall
                  |     |                       |           +- Name
                  |     |                       |           +- Name
                  |     |                       +- IfStatement
                  |     |                       |  +- UnaryExpression
                  |     |                       |  |  +- Name
                  |     |                       |  +- Scope
                  |     |                       |     +- ExpressionStatement
                  |     |                       |     |  +- FunctionCall
                  |     |                       |     |     +- PropertyGet
                  |     |                       |     |     |  +- Name
                  |     |                       |     |     |  +- Name
                  |     |                       |     |     +- Name
                  |     |                       |     |     +- Name
                  |     |                       |     +- ReturnStatement
                  |     |                       |        +- Name
                  |     |                       +- BreakStatement
                  |     +- ExpressionStatement
                  |     |  +- FunctionCall
                  |     |     +- ParenthesizedExpression
                  |     |     |  +- InfixExpression
                  |     |     |     +- Name
                  |     |     |     +- FunctionCall
                  |     |     |        +- Name
                  |     |     |        +- Name
                  |     |     |        +- Name
                  |     |     +- Name
                  |     |     +- Name
                  |     |     +- UnaryExpression
                  |     |     |  +- Name
                  |     |     +- Name
                  |     |     +- InfixExpression
                  |     |        +- UnaryExpression
                  |     |        |  +- Name
                  |     |        +- InfixExpression
                  |     |           +- InfixExpression
                  |     |           |  +- FunctionCall
                  |     |           |  |  +- PropertyGet
                  |     |           |  |  |  +- Name
                  |     |           |  |  |  +- Name
                  |     |           |  |  +- Name
                  |     |           |  +- FunctionCall
                  |     |           |     +- Name
                  |     |           |     +- PropertyGet
                  |     |           |        +- Name
                  |     |           |        +- Name
                  |     |           +- Name
                  |     +- ReturnStatement
                  |        +- Name
                  +- Comment
                  +- ExpressionStatement
                  |  +- FunctionCall
                  |     +- Name
                  +- ExpressionStatement
                     +- Assignment
                        +- PropertyGet
                        |  +- Name
                        |  +- Name
                        +- Name
