Problems reported:

parser/general/function_reference_following_token:79:29: A comparison expression can't be an operand of another comparison expression.
var operators_lessThan = f<a><b>;
                            ^

parser/general/function_reference_following_token:79:33: Expected '[' before this.
var operators_lessThan = f<a><b>;
                                ^

parser/general/function_reference_following_token:89:46: A comparison expression can't be an operand of another comparison expression.
var operators_openBracket_error = f(a<b,c>[d]>e);
                                             ^

beginCompilationUnit(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields()
      handleNoType(var)
      handleIdentifier(typeArgs_ampersand, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
        beginBinaryExpression(&)
          handleLiteralInt(0)
        endBinaryExpression(&)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(typeArgs_asterisk, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
        beginBinaryExpression(*)
          handleLiteralInt(0)
        endBinaryExpression(*)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(typeArgs_bar, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
        beginBinaryExpression(|)
          handleLiteralInt(0)
        endBinaryExpression(|)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(typeArgs_caret, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
        beginBinaryExpression(^)
          handleLiteralInt(0)
        endBinaryExpression(^)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(typeArgs_closeBrace, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleNoTypeArguments({)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
        handleLiteralSetOrMap(1, {, null, }, true)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(typeArgs_closeBracket, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleNoTypeArguments([)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
        handleLiteralList(1, [, null, ])
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(typeArgs_closeParen, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(g, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(f, expression)
          handleNoTypeArguments(<)
          handleNoArguments(<)
          handleSend(f, <)
          beginTypeArguments(<)
            handleIdentifier(a, typeReference)
            handleNoTypeArguments(,)
            handleType(a, null)
            handleIdentifier(b, typeReference)
            handleNoTypeArguments(>)
            handleType(b, null)
          endTypeArguments(2, <, >)
          handleTypeArgumentApplication(<)
        endArguments(1, (, ))
        handleSend(g, ;)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(typeArgs_colon, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleNoTypeArguments({)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
        handleLiteralNull(null)
        handleLiteralMapEntry(:, })
        handleLiteralSetOrMap(1, {, null, }, false)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(typeArgs_comma, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleNoTypeArguments([)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
        handleLiteralNull(null)
        handleLiteralList(2, [, null, ])
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(typeArgs_equals, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
        beginBinaryExpression(==)
          handleLiteralNull(null)
        endBinaryExpression(==)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(typeArgs_not_equals, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
        beginBinaryExpression(!=)
          handleLiteralNull(null)
        endBinaryExpression(!=)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(typeArgs_openParen, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        beginArguments(()
        endArguments(0, (, ))
        handleSend(f, ;)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(typeArgs_percent, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
        beginBinaryExpression(%)
          handleLiteralInt(0)
        endBinaryExpression(%)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(typeArgs_period_methodInvocation, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        beginImplicitCreationExpression(=)
          handleIdentifier(f, constructorReference)
          beginConstructorReference(f)
            beginTypeArguments(<)
              handleIdentifier(a, typeReference)
              handleNoTypeArguments(,)
              handleType(a, null)
              handleIdentifier(b, typeReference)
              handleNoTypeArguments(>)
              handleType(b, null)
            endTypeArguments(2, <, >)
            handleIdentifier(toString, constructorReferenceContinuationAfterTypeArguments)
          endConstructorReference(f, ., ()
          beginArguments(()
          endArguments(0, (, ))
        endImplicitCreationExpression(=)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(typeArgs_period_methodInvocation_generic, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
        handleIdentifier(foo, expressionContinuation)
        beginTypeArguments(<)
          handleIdentifier(c, typeReference)
          handleNoTypeArguments(>)
          handleType(c, null)
        endTypeArguments(1, <, >)
        beginArguments(()
        endArguments(0, (, ))
        handleSend(foo, ;)
        handleEndingBinaryExpression(.)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(typeArgs_period_period, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
        beginCascade(..)
          handleIdentifier(toString, expressionContinuation)
          handleNoTypeArguments(()
          beginArguments(()
          endArguments(0, (, ))
          handleSend(toString, ;)
          handleEndingBinaryExpression(..)
        endCascade()
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(typeArgs_period_propertyAccess, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
        handleIdentifier(hashCode, expressionContinuation)
        handleNoTypeArguments(;)
        handleNoArguments(;)
        handleSend(hashCode, ;)
        handleEndingBinaryExpression(.)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(typeArgs_plus, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
        beginBinaryExpression(+)
          handleLiteralInt(0)
        endBinaryExpression(+)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(typeArgs_question, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
        beginConditionalExpression(?)
          handleLiteralNull(null)
          handleConditionalExpressionColon()
          handleLiteralNull(null)
        endConditionalExpression(?, :)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(typeArgs_question_period_methodInvocation, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
        handleIdentifier(toString, expressionContinuation)
        handleNoTypeArguments(()
        beginArguments(()
        endArguments(0, (, ))
        handleSend(toString, ;)
        handleEndingBinaryExpression(?.)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(typeArgs_question_period_methodInvocation_generic, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
        handleIdentifier(foo, expressionContinuation)
        beginTypeArguments(<)
          handleIdentifier(c, typeReference)
          handleNoTypeArguments(>)
          handleType(c, null)
        endTypeArguments(1, <, >)
        beginArguments(()
        endArguments(0, (, ))
        handleSend(foo, ;)
        handleEndingBinaryExpression(?.)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(typeArgs_question_period_period, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
        beginCascade(?..)
          handleIdentifier(toString, expressionContinuation)
          handleNoTypeArguments(()
          beginArguments(()
          endArguments(0, (, ))
          handleSend(toString, ;)
          handleEndingBinaryExpression(?..)
        endCascade()
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(typeArgs_question_period_propertyAccess, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
        handleIdentifier(hashCode, expressionContinuation)
        handleNoTypeArguments(;)
        handleNoArguments(;)
        handleSend(hashCode, ;)
        handleEndingBinaryExpression(?.)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(typeArgs_question_question, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
        beginBinaryExpression(??)
          handleLiteralInt(0)
        endBinaryExpression(??)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(typeArgs_semicolon, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(typeArgs_slash, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
        beginBinaryExpression(/)
          handleLiteralInt(1)
        endBinaryExpression(/)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(typeArgs_tilde_slash, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginTypeArguments(<)
          handleIdentifier(a, typeReference)
          handleNoTypeArguments(,)
          handleType(a, null)
          handleIdentifier(b, typeReference)
          handleNoTypeArguments(>)
          handleType(b, null)
        endTypeArguments(2, <, >)
        handleTypeArgumentApplication(<)
        beginBinaryExpression(~/)
          handleLiteralInt(1)
        endBinaryExpression(~/)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(operators_bang_openBracket, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(a, expression)
          handleNoTypeArguments(<)
          handleNoArguments(<)
          handleSend(a, <)
          beginBinaryExpression(<)
            handleIdentifier(b, expression)
            handleNoTypeArguments(,)
            handleNoArguments(,)
            handleSend(b, ,)
          endBinaryExpression(<)
          handleIdentifier(c, expression)
          handleNoTypeArguments(>)
          handleNoArguments(>)
          handleSend(c, >)
          beginBinaryExpression(>)
            handleNoTypeArguments([)
            handleIdentifier(d, expression)
            handleNoTypeArguments(])
            handleNoArguments(])
            handleSend(d, ])
            handleLiteralList(1, [, null, ])
            handleUnaryPrefixExpression(!)
          endBinaryExpression(>)
        endArguments(2, (, ))
        handleSend(f, ;)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(operators_bang_paren, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(a, expression)
          handleNoTypeArguments(<)
          handleNoArguments(<)
          handleSend(a, <)
          beginBinaryExpression(<)
            handleIdentifier(b, expression)
            handleNoTypeArguments(,)
            handleNoArguments(,)
            handleSend(b, ,)
          endBinaryExpression(<)
          handleIdentifier(c, expression)
          handleNoTypeArguments(>)
          handleNoArguments(>)
          handleSend(c, >)
          beginBinaryExpression(>)
            handleIdentifier(d, expression)
            handleNoTypeArguments())
            handleNoArguments())
            handleSend(d, ))
            handleParenthesizedExpression(()
            handleUnaryPrefixExpression(!)
          endBinaryExpression(>)
        endArguments(2, (, ))
        handleSend(f, ;)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(operators_lessThan, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(<)
        handleNoArguments(<)
        handleSend(f, <)
        beginBinaryExpression(<)
          handleIdentifier(a, expression)
          handleNoTypeArguments(>)
          handleNoArguments(>)
          handleSend(a, >)
        endBinaryExpression(<)
        handleRecoverableError(EqualityCannotBeEqualityOperand, >, >)
        beginBinaryExpression(>)
          beginTypeArguments(<)
            handleIdentifier(b, typeReference)
            handleNoTypeArguments(>)
            handleType(b, null)
          endTypeArguments(1, <, >)
          handleRecoverableError(Message[ExpectedButGot, Expected '[' before this., null, {string: [}], ;, ;)
          handleLiteralList(0, [, null, ])
        endBinaryExpression(>)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(operators_minus, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(a, expression)
          handleNoTypeArguments(<)
          handleNoArguments(<)
          handleSend(a, <)
          beginBinaryExpression(<)
            handleIdentifier(b, expression)
            handleNoTypeArguments(,)
            handleNoArguments(,)
            handleSend(b, ,)
          endBinaryExpression(<)
          handleIdentifier(c, expression)
          handleNoTypeArguments(>)
          handleNoArguments(>)
          handleSend(c, >)
          beginBinaryExpression(>)
            handleIdentifier(d, expression)
            handleNoTypeArguments())
            handleNoArguments())
            handleSend(d, ))
            handleUnaryPrefixExpression(-)
          endBinaryExpression(>)
        endArguments(2, (, ))
        handleSend(f, ;)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(operators_openBracket, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(a, expression)
          handleNoTypeArguments(<)
          handleNoArguments(<)
          handleSend(a, <)
          beginBinaryExpression(<)
            handleIdentifier(b, expression)
            handleNoTypeArguments(,)
            handleNoArguments(,)
            handleSend(b, ,)
          endBinaryExpression(<)
          handleIdentifier(c, expression)
          handleNoTypeArguments(>)
          handleNoArguments(>)
          handleSend(c, >)
          beginBinaryExpression(>)
            handleNoTypeArguments([)
            handleIdentifier(d, expression)
            handleNoTypeArguments(])
            handleNoArguments(])
            handleSend(d, ])
            handleLiteralList(1, [, null, ])
          endBinaryExpression(>)
        endArguments(2, (, ))
        handleSend(f, ;)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(operators_openBracket_error, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(a, expression)
          handleNoTypeArguments(<)
          handleNoArguments(<)
          handleSend(a, <)
          beginBinaryExpression(<)
            handleIdentifier(b, expression)
            handleNoTypeArguments(,)
            handleNoArguments(,)
            handleSend(b, ,)
          endBinaryExpression(<)
          handleIdentifier(c, expression)
          handleNoTypeArguments(>)
          handleNoArguments(>)
          handleSend(c, >)
          beginBinaryExpression(>)
            handleNoTypeArguments([)
            handleIdentifier(d, expression)
            handleNoTypeArguments(])
            handleNoArguments(])
            handleSend(d, ])
            handleLiteralList(1, [, null, ])
          endBinaryExpression(>)
          handleRecoverableError(EqualityCannotBeEqualityOperand, >, >)
          beginBinaryExpression(>)
            handleIdentifier(e, expression)
            handleNoTypeArguments())
            handleNoArguments())
            handleSend(e, ))
          endBinaryExpression(>)
        endArguments(2, (, ))
        handleSend(f, ;)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration(var)
  beginMetadataStar(var)
  endMetadataStar(0)
  beginTopLevelMember(var)
    beginFields(;)
      handleNoType(var)
      handleIdentifier(operators_openBracket_unambiguous, topLevelVariableDeclaration)
      beginFieldInitializer(=)
        handleIdentifier(f, expression)
        handleNoTypeArguments(()
        beginArguments(()
          handleIdentifier(a, expression)
          handleNoTypeArguments(<)
          handleNoArguments(<)
          handleSend(a, <)
          beginBinaryExpression(<)
            handleIdentifier(b, expression)
            handleNoTypeArguments(,)
            handleNoArguments(,)
            handleSend(b, ,)
          endBinaryExpression(<)
          handleIdentifier(c, expression)
          handleNoTypeArguments(>)
          handleNoArguments(>)
          handleSend(c, >)
          beginBinaryExpression(>)
            handleNoTypeArguments([)
            handleIdentifier(d, expression)
            handleNoTypeArguments(,)
            handleNoArguments(,)
            handleSend(d, ,)
            handleIdentifier(e, expression)
            handleNoTypeArguments(])
            handleNoArguments(])
            handleSend(e, ])
            handleLiteralList(2, [, null, ])
          endBinaryExpression(>)
        endArguments(2, (, ))
        handleSend(f, ;)
      endFieldInitializer(=, ;)
    endTopLevelFields(null, null, null, null, var, 1, var, ;)
  endTopLevelDeclaration()
endCompilationUnit(34, )
