beginCompilationUnit(class)
  beginMetadataStar(class)
  endMetadataStar(0)
  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
    handleIdentifier(Foo, classOrMixinDeclaration)
    handleNoTypeVariables({)
    beginClassDeclaration(class, null, null, null, Foo)
      handleNoType(Foo)
      handleClassExtends(null, 1)
      handleClassNoWithClause()
      handleImplements(null, 0)
      handleClassHeader(class, class, null)
      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
        beginMetadataStar(Foo)
        endMetadataStar(0)
        beginMember()
          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
            handleNoType({)
            handleIdentifier(Foo, methodDeclaration)
            handleIdentifier(foo1, methodDeclarationContinuation)
            handleQualified(.)
            handleNoTypeVariables(()
            beginFormalParameters((, MemberKind.NonStaticMethod)
              beginMetadataStar(dynamic)
              endMetadataStar(0)
              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
                handleIdentifier(dynamic, typeReference)
                handleNoTypeArguments(a)
                handleType(dynamic, null)
                handleIdentifier(a, formalParameterDeclaration)
                handleFormalParameterWithoutValue(,)
              endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
              beginMetadataStar(dynamic)
              endMetadataStar(0)
              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
                handleIdentifier(dynamic, typeReference)
                handleNoTypeArguments(b)
                handleType(dynamic, null)
                handleIdentifier(b, formalParameterDeclaration)
                handleFormalParameterWithoutValue())
              endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
            endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
            beginInitializers(:)
              beginInitializer(x)
                handleIdentifier(x, expression)
                handleNoTypeArguments(=)
                handleNoArguments(=)
                handleSend(x, =)
                handleIdentifier(a, expression)
                handleNoTypeArguments(as)
                handleNoArguments(as)
                handleSend(a, as)
                beginAsOperatorType(as)
                  handleIdentifier(int, typeReference)
                  handleNoTypeArguments())
                  handleType(int, null)
                endAsOperatorType(as)
                handleAsOperator(as)
                handleParenthesizedExpression(()
                handleAssignmentExpression(=)
              endInitializer(,)
              beginInitializer(y)
                handleIdentifier(y, expression)
                handleNoTypeArguments(=)
                handleNoArguments(=)
                handleSend(y, =)
                handleIdentifier(b, expression)
                handleNoTypeArguments(as)
                handleNoArguments(as)
                handleSend(b, as)
                beginAsOperatorType(as)
                  handleIdentifier(int, typeReference)
                  handleNoTypeArguments(?)
                  handleType(int, ?)
                endAsOperatorType(as)
                handleAsOperator(as)
                handleParenthesizedExpression(()
                handleAssignmentExpression(=)
              endInitializer(;)
            endInitializers(2, :, ;)
            handleAsyncModifier(null, null)
            handleEmptyFunctionBody(;)
          endClassConstructor(null, Foo, (, :, ;)
        endMember()
        beginMetadataStar(Foo)
        endMetadataStar(0)
        beginMember()
          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
            handleNoType(;)
            handleIdentifier(Foo, methodDeclaration)
            handleIdentifier(foo2, methodDeclarationContinuation)
            handleQualified(.)
            handleNoTypeVariables(()
            beginFormalParameters((, MemberKind.NonStaticMethod)
              beginMetadataStar(dynamic)
              endMetadataStar(0)
              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
                handleIdentifier(dynamic, typeReference)
                handleNoTypeArguments(a)
                handleType(dynamic, null)
                handleIdentifier(a, formalParameterDeclaration)
                handleFormalParameterWithoutValue(,)
              endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
              beginMetadataStar(dynamic)
              endMetadataStar(0)
              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
                handleIdentifier(dynamic, typeReference)
                handleNoTypeArguments(b)
                handleType(dynamic, null)
                handleIdentifier(b, formalParameterDeclaration)
                handleFormalParameterWithoutValue())
              endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
            endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
            beginInitializers(:)
              beginInitializer(x)
                handleIdentifier(x, expression)
                handleNoTypeArguments(=)
                handleNoArguments(=)
                handleSend(x, =)
                handleIdentifier(a, expression)
                handleNoTypeArguments(is)
                handleNoArguments(is)
                handleSend(a, is)
                beginIsOperatorType(is)
                  handleIdentifier(int, typeReference)
                  handleNoTypeArguments())
                  handleType(int, null)
                endIsOperatorType(is)
                handleIsOperator(is, null)
                handleParenthesizedExpression(()
                handleAssignmentExpression(=)
              endInitializer(,)
              beginInitializer(y)
                handleIdentifier(y, expression)
                handleNoTypeArguments(=)
                handleNoArguments(=)
                handleSend(y, =)
                handleIdentifier(b, expression)
                handleNoTypeArguments(is)
                handleNoArguments(is)
                handleSend(b, is)
                beginIsOperatorType(is)
                  handleIdentifier(int, typeReference)
                  handleNoTypeArguments(?)
                  handleType(int, ?)
                endIsOperatorType(is)
                handleIsOperator(is, null)
                handleParenthesizedExpression(()
                handleAssignmentExpression(=)
              endInitializer(;)
            endInitializers(2, :, ;)
            handleAsyncModifier(null, null)
            handleEmptyFunctionBody(;)
          endClassConstructor(null, Foo, (, :, ;)
        endMember()
        beginMetadataStar(Foo)
        endMetadataStar(0)
        beginMember()
          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
            handleNoType(;)
            handleIdentifier(Foo, methodDeclaration)
            handleIdentifier(foo3, methodDeclarationContinuation)
            handleQualified(.)
            handleNoTypeVariables(()
            beginFormalParameters((, MemberKind.NonStaticMethod)
              beginMetadataStar(dynamic)
              endMetadataStar(0)
              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
                handleIdentifier(dynamic, typeReference)
                handleNoTypeArguments(a)
                handleType(dynamic, null)
                handleIdentifier(a, formalParameterDeclaration)
                handleFormalParameterWithoutValue(,)
              endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
              beginMetadataStar(dynamic)
              endMetadataStar(0)
              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
                handleIdentifier(dynamic, typeReference)
                handleNoTypeArguments(b)
                handleType(dynamic, null)
                handleIdentifier(b, formalParameterDeclaration)
                handleFormalParameterWithoutValue())
              endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
            endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
            beginInitializers(:)
              beginInitializer(x)
                handleIdentifier(x, expression)
                handleNoTypeArguments(=)
                handleNoArguments(=)
                handleSend(x, =)
                handleIdentifier(a, expression)
                handleNoTypeArguments(as)
                handleNoArguments(as)
                handleSend(a, as)
                beginAsOperatorType(as)
                  handleIdentifier(int, typeReference)
                  handleNoTypeArguments(?)
                  handleType(int, ?)
                endAsOperatorType(as)
                handleAsOperator(as)
                handleParenthesizedExpression(()
                handleAssignmentExpression(=)
              endInitializer(,)
              beginInitializer(y)
                handleIdentifier(y, expression)
                handleNoTypeArguments(=)
                handleNoArguments(=)
                handleSend(y, =)
                handleIdentifier(b, expression)
                handleNoTypeArguments(as)
                handleNoArguments(as)
                handleSend(b, as)
                beginAsOperatorType(as)
                  handleIdentifier(int, typeReference)
                  handleNoTypeArguments())
                  handleType(int, null)
                endAsOperatorType(as)
                handleAsOperator(as)
                handleParenthesizedExpression(()
                handleAssignmentExpression(=)
              endInitializer(;)
            endInitializers(2, :, ;)
            handleAsyncModifier(null, null)
            handleEmptyFunctionBody(;)
          endClassConstructor(null, Foo, (, :, ;)
        endMember()
        beginMetadataStar(Foo)
        endMetadataStar(0)
        beginMember()
          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
            handleNoType(;)
            handleIdentifier(Foo, methodDeclaration)
            handleIdentifier(foo4, methodDeclarationContinuation)
            handleQualified(.)
            handleNoTypeVariables(()
            beginFormalParameters((, MemberKind.NonStaticMethod)
              beginMetadataStar(dynamic)
              endMetadataStar(0)
              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
                handleIdentifier(dynamic, typeReference)
                handleNoTypeArguments(a)
                handleType(dynamic, null)
                handleIdentifier(a, formalParameterDeclaration)
                handleFormalParameterWithoutValue(,)
              endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
              beginMetadataStar(dynamic)
              endMetadataStar(0)
              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
                handleIdentifier(dynamic, typeReference)
                handleNoTypeArguments(b)
                handleType(dynamic, null)
                handleIdentifier(b, formalParameterDeclaration)
                handleFormalParameterWithoutValue())
              endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
            endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
            beginInitializers(:)
              beginInitializer(x)
                handleIdentifier(x, expression)
                handleNoTypeArguments(=)
                handleNoArguments(=)
                handleSend(x, =)
                handleIdentifier(a, expression)
                handleNoTypeArguments(is)
                handleNoArguments(is)
                handleSend(a, is)
                beginIsOperatorType(is)
                  handleIdentifier(int, typeReference)
                  handleNoTypeArguments(?)
                  handleType(int, ?)
                endIsOperatorType(is)
                handleIsOperator(is, null)
                handleParenthesizedExpression(()
                handleAssignmentExpression(=)
              endInitializer(,)
              beginInitializer(y)
                handleIdentifier(y, expression)
                handleNoTypeArguments(=)
                handleNoArguments(=)
                handleSend(y, =)
                handleIdentifier(b, expression)
                handleNoTypeArguments(is)
                handleNoArguments(is)
                handleSend(b, is)
                beginIsOperatorType(is)
                  handleIdentifier(int, typeReference)
                  handleNoTypeArguments())
                  handleType(int, null)
                endIsOperatorType(is)
                handleIsOperator(is, null)
                handleParenthesizedExpression(()
                handleAssignmentExpression(=)
              endInitializer(;)
            endInitializers(2, :, ;)
            handleAsyncModifier(null, null)
            handleEmptyFunctionBody(;)
          endClassConstructor(null, Foo, (, :, ;)
        endMember()
        beginMetadataStar(Foo)
        endMetadataStar(0)
        beginMember()
          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
            handleNoType(;)
            handleIdentifier(Foo, methodDeclaration)
            handleIdentifier(bar1, methodDeclarationContinuation)
            handleQualified(.)
            handleNoTypeVariables(()
            beginFormalParameters((, MemberKind.NonStaticMethod)
              beginMetadataStar(dynamic)
              endMetadataStar(0)
              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
                handleIdentifier(dynamic, typeReference)
                handleNoTypeArguments(a)
                handleType(dynamic, null)
                handleIdentifier(a, formalParameterDeclaration)
                handleFormalParameterWithoutValue(,)
              endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
              beginMetadataStar(dynamic)
              endMetadataStar(0)
              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
                handleIdentifier(dynamic, typeReference)
                handleNoTypeArguments(b)
                handleType(dynamic, null)
                handleIdentifier(b, formalParameterDeclaration)
                handleFormalParameterWithoutValue())
              endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
            endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
            beginInitializers(:)
              beginInitializer(x)
                handleIdentifier(x, expression)
                handleNoTypeArguments(=)
                handleNoArguments(=)
                handleSend(x, =)
                handleIdentifier(a, expression)
                handleNoTypeArguments(as)
                handleNoArguments(as)
                handleSend(a, as)
                beginAsOperatorType(as)
                  handleIdentifier(int, typeReference)
                  handleNoTypeArguments())
                  handleType(int, null)
                endAsOperatorType(as)
                handleAsOperator(as)
                handleParenthesizedExpression(()
                handleAssignmentExpression(=)
              endInitializer(,)
              beginInitializer(y)
                handleIdentifier(y, expression)
                handleNoTypeArguments(=)
                handleNoArguments(=)
                handleSend(y, =)
                handleIdentifier(b, expression)
                handleNoTypeArguments(as)
                handleNoArguments(as)
                handleSend(b, as)
                beginAsOperatorType(as)
                  handleIdentifier(int, typeReference)
                  handleNoTypeArguments(?)
                  handleType(int, ?)
                endAsOperatorType(as)
                handleAsOperator(as)
                handleParenthesizedExpression(()
                handleAssignmentExpression(=)
              endInitializer({)
            endInitializers(2, :, {)
            handleAsyncModifier(null, null)
            beginBlockFunctionBody({)
            endBlockFunctionBody(0, {, })
          endClassConstructor(null, Foo, (, :, })
        endMember()
        beginMetadataStar(Foo)
        endMetadataStar(0)
        beginMember()
          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
            handleNoType(})
            handleIdentifier(Foo, methodDeclaration)
            handleIdentifier(bar2, methodDeclarationContinuation)
            handleQualified(.)
            handleNoTypeVariables(()
            beginFormalParameters((, MemberKind.NonStaticMethod)
              beginMetadataStar(dynamic)
              endMetadataStar(0)
              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
                handleIdentifier(dynamic, typeReference)
                handleNoTypeArguments(a)
                handleType(dynamic, null)
                handleIdentifier(a, formalParameterDeclaration)
                handleFormalParameterWithoutValue(,)
              endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
              beginMetadataStar(dynamic)
              endMetadataStar(0)
              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
                handleIdentifier(dynamic, typeReference)
                handleNoTypeArguments(b)
                handleType(dynamic, null)
                handleIdentifier(b, formalParameterDeclaration)
                handleFormalParameterWithoutValue())
              endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
            endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
            beginInitializers(:)
              beginInitializer(x)
                handleIdentifier(x, expression)
                handleNoTypeArguments(=)
                handleNoArguments(=)
                handleSend(x, =)
                handleIdentifier(a, expression)
                handleNoTypeArguments(is)
                handleNoArguments(is)
                handleSend(a, is)
                beginIsOperatorType(is)
                  handleIdentifier(int, typeReference)
                  handleNoTypeArguments())
                  handleType(int, null)
                endIsOperatorType(is)
                handleIsOperator(is, null)
                handleParenthesizedExpression(()
                handleAssignmentExpression(=)
              endInitializer(,)
              beginInitializer(y)
                handleIdentifier(y, expression)
                handleNoTypeArguments(=)
                handleNoArguments(=)
                handleSend(y, =)
                handleIdentifier(b, expression)
                handleNoTypeArguments(is)
                handleNoArguments(is)
                handleSend(b, is)
                beginIsOperatorType(is)
                  handleIdentifier(int, typeReference)
                  handleNoTypeArguments(?)
                  handleType(int, ?)
                endIsOperatorType(is)
                handleIsOperator(is, null)
                handleParenthesizedExpression(()
                handleAssignmentExpression(=)
              endInitializer({)
            endInitializers(2, :, {)
            handleAsyncModifier(null, null)
            beginBlockFunctionBody({)
            endBlockFunctionBody(0, {, })
          endClassConstructor(null, Foo, (, :, })
        endMember()
        beginMetadataStar(Foo)
        endMetadataStar(0)
        beginMember()
          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
            handleNoType(})
            handleIdentifier(Foo, methodDeclaration)
            handleIdentifier(bar3, methodDeclarationContinuation)
            handleQualified(.)
            handleNoTypeVariables(()
            beginFormalParameters((, MemberKind.NonStaticMethod)
              beginMetadataStar(dynamic)
              endMetadataStar(0)
              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
                handleIdentifier(dynamic, typeReference)
                handleNoTypeArguments(a)
                handleType(dynamic, null)
                handleIdentifier(a, formalParameterDeclaration)
                handleFormalParameterWithoutValue(,)
              endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
              beginMetadataStar(dynamic)
              endMetadataStar(0)
              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
                handleIdentifier(dynamic, typeReference)
                handleNoTypeArguments(b)
                handleType(dynamic, null)
                handleIdentifier(b, formalParameterDeclaration)
                handleFormalParameterWithoutValue())
              endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
            endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
            beginInitializers(:)
              beginInitializer(x)
                handleIdentifier(x, expression)
                handleNoTypeArguments(=)
                handleNoArguments(=)
                handleSend(x, =)
                handleIdentifier(a, expression)
                handleNoTypeArguments(as)
                handleNoArguments(as)
                handleSend(a, as)
                beginAsOperatorType(as)
                  handleIdentifier(int, typeReference)
                  handleNoTypeArguments(?)
                  handleType(int, ?)
                endAsOperatorType(as)
                handleAsOperator(as)
                handleParenthesizedExpression(()
                handleAssignmentExpression(=)
              endInitializer(,)
              beginInitializer(y)
                handleIdentifier(y, expression)
                handleNoTypeArguments(=)
                handleNoArguments(=)
                handleSend(y, =)
                handleIdentifier(b, expression)
                handleNoTypeArguments(as)
                handleNoArguments(as)
                handleSend(b, as)
                beginAsOperatorType(as)
                  handleIdentifier(int, typeReference)
                  handleNoTypeArguments())
                  handleType(int, null)
                endAsOperatorType(as)
                handleAsOperator(as)
                handleParenthesizedExpression(()
                handleAssignmentExpression(=)
              endInitializer({)
            endInitializers(2, :, {)
            handleAsyncModifier(null, null)
            beginBlockFunctionBody({)
            endBlockFunctionBody(0, {, })
          endClassConstructor(null, Foo, (, :, })
        endMember()
        beginMetadataStar(Foo)
        endMetadataStar(0)
        beginMember()
          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo)
            handleNoType(})
            handleIdentifier(Foo, methodDeclaration)
            handleIdentifier(bar4, methodDeclarationContinuation)
            handleQualified(.)
            handleNoTypeVariables(()
            beginFormalParameters((, MemberKind.NonStaticMethod)
              beginMetadataStar(dynamic)
              endMetadataStar(0)
              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
                handleIdentifier(dynamic, typeReference)
                handleNoTypeArguments(a)
                handleType(dynamic, null)
                handleIdentifier(a, formalParameterDeclaration)
                handleFormalParameterWithoutValue(,)
              endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
              beginMetadataStar(dynamic)
              endMetadataStar(0)
              beginFormalParameter(dynamic, MemberKind.NonStaticMethod, null, null, null)
                handleIdentifier(dynamic, typeReference)
                handleNoTypeArguments(b)
                handleType(dynamic, null)
                handleIdentifier(b, formalParameterDeclaration)
                handleFormalParameterWithoutValue())
              endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
            endFormalParameters(2, (, ), MemberKind.NonStaticMethod)
            beginInitializers(:)
              beginInitializer(x)
                handleIdentifier(x, expression)
                handleNoTypeArguments(=)
                handleNoArguments(=)
                handleSend(x, =)
                handleIdentifier(a, expression)
                handleNoTypeArguments(is)
                handleNoArguments(is)
                handleSend(a, is)
                beginIsOperatorType(is)
                  handleIdentifier(int, typeReference)
                  handleNoTypeArguments(?)
                  handleType(int, ?)
                endIsOperatorType(is)
                handleIsOperator(is, null)
                handleParenthesizedExpression(()
                handleAssignmentExpression(=)
              endInitializer(,)
              beginInitializer(y)
                handleIdentifier(y, expression)
                handleNoTypeArguments(=)
                handleNoArguments(=)
                handleSend(y, =)
                handleIdentifier(b, expression)
                handleNoTypeArguments(is)
                handleNoArguments(is)
                handleSend(b, is)
                beginIsOperatorType(is)
                  handleIdentifier(int, typeReference)
                  handleNoTypeArguments())
                  handleType(int, null)
                endIsOperatorType(is)
                handleIsOperator(is, null)
                handleParenthesizedExpression(()
                handleAssignmentExpression(=)
              endInitializer({)
            endInitializers(2, :, {)
            handleAsyncModifier(null, null)
            beginBlockFunctionBody({)
            endBlockFunctionBody(0, {, })
          endClassConstructor(null, Foo, (, :, })
        endMember()
      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 8, {, })
    endClassDeclaration(class, })
  endTopLevelDeclaration()
endCompilationUnit(1, )
