beginCompilationUnit(@)
  beginMetadataStar(@)
    beginMetadata(@)
      handleIdentifier(abstract, metadataReference)
      handleNoTypeArguments(@)
      handleNoArguments(@)
    endMetadata(@, null, abstract)
    beginMetadata(@)
      handleIdentifier(foo, metadataReference)
      handleIdentifier(abstract, metadataContinuation)
      handleQualified(.)
      handleNoTypeArguments(@)
      handleNoArguments(@)
    endMetadata(@, null, abstract)
    beginMetadata(@)
      handleIdentifier(foo, metadataReference)
      handleIdentifier(bar, metadataContinuation)
      handleQualified(.)
      handleNoTypeArguments(.)
      handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
      handleNoArguments(@)
    endMetadata(@, ., abstract)
    beginMetadata(@)
      handleIdentifier(foo, metadataReference)
      handleNoTypeArguments(()
      beginArguments(()
        beginLiteralString("hello")
        endLiteralString(0, ))
      endArguments(1, (, ))
    endMetadata(@, null, ))
    beginMetadata(@)
      handleIdentifier(foo, metadataReference)
      handleIdentifier(abstract, metadataContinuation)
      handleQualified(.)
      handleNoTypeArguments(()
      beginArguments(()
        beginLiteralString("hello")
        endLiteralString(0, ))
      endArguments(1, (, ))
    endMetadata(@, null, ))
    beginMetadata(@)
      handleIdentifier(foo, metadataReference)
      handleIdentifier(bar, metadataContinuation)
      handleQualified(.)
      handleNoTypeArguments(.)
      handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
      beginArguments(()
        beginLiteralString("hello")
        endLiteralString(0, ))
      endArguments(1, (, ))
    endMetadata(@, ., ))
    beginMetadata(@)
      handleIdentifier(foo, metadataReference)
      beginTypeArguments(<)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(>)
        handleType(int, null)
      endTypeArguments(1, <, >)
      beginArguments(()
        beginLiteralString("hello")
        endLiteralString(0, ))
      endArguments(1, (, ))
    endMetadata(@, null, ))
    beginMetadata(@)
      handleIdentifier(foo, metadataReference)
      beginTypeArguments(<)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(>)
        handleType(int, null)
      endTypeArguments(1, <, >)
      handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
      beginArguments(()
        beginLiteralString("hello")
        endLiteralString(0, ))
      endArguments(1, (, ))
    endMetadata(@, ., ))
    beginMetadata(@)
      handleIdentifier(foo, metadataReference)
      handleIdentifier(bar, metadataContinuation)
      handleQualified(.)
      beginTypeArguments(<)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(>)
        handleType(int, null)
      endTypeArguments(1, <, >)
      beginArguments(()
        beginLiteralString("hello")
        endLiteralString(0, ))
      endArguments(1, (, ))
    endMetadata(@, null, ))
    beginMetadata(@)
      handleIdentifier(foo, metadataReference)
      handleIdentifier(bar, metadataContinuation)
      handleQualified(.)
      beginTypeArguments(<)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(>)
        handleType(int, null)
      endTypeArguments(1, <, >)
      handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
      beginArguments(()
        beginLiteralString("hello")
        endLiteralString(0, ))
      endArguments(1, (, ))
    endMetadata(@, ., ))
  endMetadataStar(10)
  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
    handleIdentifier(X, classOrMixinDeclaration)
    handleNoTypeVariables({)
    beginClassDeclaration(class, null, null, null, null, null, null, null, null, X)
      handleNoType(X)
      handleClassExtends(null, 1)
      handleClassNoWithClause()
      handleImplements(null, 0)
      handleClassHeader(class, class, null)
      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
    endClassDeclaration(class, })
  endTopLevelDeclaration(})
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(F, typedefDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(@)
          beginMetadata(@)
            handleIdentifier(abstract, metadataReference)
            handleNoTypeArguments(T)
            handleNoArguments(T)
          endMetadata(@, null, abstract)
        endMetadataStar(1)
        handleIdentifier(T, typeVariableDeclaration)
        beginTypeVariable(T)
          handleTypeVariablesDefined(T, 1)
          handleNoType(T)
        endTypeVariable(>, 0, null, null)
      endTypeVariables(<, >)
      beginFunctionType(int)
        beginTypeVariables(<)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(abstract, metadataReference)
              handleNoTypeArguments(X)
              handleNoArguments(X)
            endMetadata(@, null, abstract)
          endMetadataStar(1)
          handleIdentifier(X, typeVariableDeclaration)
          beginTypeVariable(X)
            handleTypeVariablesDefined(X, 1)
            handleNoType(X)
          endTypeVariable(>, 0, null, null)
        endTypeVariables(<, >)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(Function)
        handleType(int, null)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(abstract, metadataReference)
              handleNoTypeArguments(int)
              handleNoArguments(int)
            endMetadata(@, null, abstract)
          endMetadataStar(1)
          beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
            handleIdentifier(int, typeReference)
            handleNoTypeArguments())
            handleType(int, null)
            handleNoName())
            handleFormalParameterWithoutValue())
          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(null, typedef, =, ;)
  endTopLevelDeclaration(;)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(F, typedefDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(@)
          beginMetadata(@)
            handleIdentifier(foo, metadataReference)
            handleIdentifier(abstract, metadataContinuation)
            handleQualified(.)
            handleNoTypeArguments(T)
            handleNoArguments(T)
          endMetadata(@, null, abstract)
        endMetadataStar(1)
        handleIdentifier(T, typeVariableDeclaration)
        beginTypeVariable(T)
          handleTypeVariablesDefined(T, 1)
          handleNoType(T)
        endTypeVariable(>, 0, null, null)
      endTypeVariables(<, >)
      beginFunctionType(int)
        beginTypeVariables(<)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              handleIdentifier(abstract, metadataContinuation)
              handleQualified(.)
              handleNoTypeArguments(X)
              handleNoArguments(X)
            endMetadata(@, null, abstract)
          endMetadataStar(1)
          handleIdentifier(X, typeVariableDeclaration)
          beginTypeVariable(X)
            handleTypeVariablesDefined(X, 1)
            handleNoType(X)
          endTypeVariable(>, 0, null, null)
        endTypeVariables(<, >)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(Function)
        handleType(int, null)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              handleIdentifier(abstract, metadataContinuation)
              handleQualified(.)
              handleNoTypeArguments(int)
              handleNoArguments(int)
            endMetadata(@, null, abstract)
          endMetadataStar(1)
          beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
            handleIdentifier(int, typeReference)
            handleNoTypeArguments())
            handleType(int, null)
            handleNoName())
            handleFormalParameterWithoutValue())
          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(null, typedef, =, ;)
  endTopLevelDeclaration(;)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(F, typedefDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(@)
          beginMetadata(@)
            handleIdentifier(foo, metadataReference)
            handleIdentifier(bar, metadataContinuation)
            handleQualified(.)
            handleNoTypeArguments(.)
            handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
            handleNoArguments(T)
          endMetadata(@, ., abstract)
        endMetadataStar(1)
        handleIdentifier(T, typeVariableDeclaration)
        beginTypeVariable(T)
          handleTypeVariablesDefined(T, 1)
          handleNoType(T)
        endTypeVariable(>, 0, null, null)
      endTypeVariables(<, >)
      beginFunctionType(int)
        beginTypeVariables(<)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              handleIdentifier(bar, metadataContinuation)
              handleQualified(.)
              handleNoTypeArguments(.)
              handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
              handleNoArguments(X)
            endMetadata(@, ., abstract)
          endMetadataStar(1)
          handleIdentifier(X, typeVariableDeclaration)
          beginTypeVariable(X)
            handleTypeVariablesDefined(X, 1)
            handleNoType(X)
          endTypeVariable(>, 0, null, null)
        endTypeVariables(<, >)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(Function)
        handleType(int, null)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              handleIdentifier(bar, metadataContinuation)
              handleQualified(.)
              handleNoTypeArguments(.)
              handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
              handleNoArguments(int)
            endMetadata(@, ., abstract)
          endMetadataStar(1)
          beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
            handleIdentifier(int, typeReference)
            handleNoTypeArguments())
            handleType(int, null)
            handleNoName())
            handleFormalParameterWithoutValue())
          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(null, typedef, =, ;)
  endTopLevelDeclaration(;)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(F, typedefDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(@)
          beginMetadata(@)
            handleIdentifier(foo, metadataReference)
            handleNoTypeArguments(()
            beginArguments(()
              beginLiteralString("hello")
              endLiteralString(0, ))
            endArguments(1, (, ))
          endMetadata(@, null, ))
        endMetadataStar(1)
        handleIdentifier(T, typeVariableDeclaration)
        beginTypeVariable(T)
          handleTypeVariablesDefined(T, 1)
          handleNoType(T)
        endTypeVariable(>, 0, null, null)
      endTypeVariables(<, >)
      beginFunctionType(int)
        beginTypeVariables(<)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              handleNoTypeArguments(()
              beginArguments(()
                beginLiteralString("hello")
                endLiteralString(0, ))
              endArguments(1, (, ))
            endMetadata(@, null, ))
          endMetadataStar(1)
          handleIdentifier(X, typeVariableDeclaration)
          beginTypeVariable(X)
            handleTypeVariablesDefined(X, 1)
            handleNoType(X)
          endTypeVariable(>, 0, null, null)
        endTypeVariables(<, >)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(Function)
        handleType(int, null)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              handleNoTypeArguments(()
              beginArguments(()
                beginLiteralString("hello")
                endLiteralString(0, ))
              endArguments(1, (, ))
            endMetadata(@, null, ))
          endMetadataStar(1)
          beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
            handleIdentifier(int, typeReference)
            handleNoTypeArguments())
            handleType(int, null)
            handleNoName())
            handleFormalParameterWithoutValue())
          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(null, typedef, =, ;)
  endTopLevelDeclaration(;)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(F, typedefDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(@)
          beginMetadata(@)
            handleIdentifier(foo, metadataReference)
            handleIdentifier(abstract, metadataContinuation)
            handleQualified(.)
            handleNoTypeArguments(()
            beginArguments(()
              beginLiteralString("hello")
              endLiteralString(0, ))
            endArguments(1, (, ))
          endMetadata(@, null, ))
        endMetadataStar(1)
        handleIdentifier(T, typeVariableDeclaration)
        beginTypeVariable(T)
          handleTypeVariablesDefined(T, 1)
          handleNoType(T)
        endTypeVariable(>, 0, null, null)
      endTypeVariables(<, >)
      beginFunctionType(int)
        beginTypeVariables(<)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              handleIdentifier(abstract, metadataContinuation)
              handleQualified(.)
              handleNoTypeArguments(()
              beginArguments(()
                beginLiteralString("hello")
                endLiteralString(0, ))
              endArguments(1, (, ))
            endMetadata(@, null, ))
          endMetadataStar(1)
          handleIdentifier(X, typeVariableDeclaration)
          beginTypeVariable(X)
            handleTypeVariablesDefined(X, 1)
            handleNoType(X)
          endTypeVariable(>, 0, null, null)
        endTypeVariables(<, >)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(Function)
        handleType(int, null)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              handleIdentifier(abstract, metadataContinuation)
              handleQualified(.)
              handleNoTypeArguments(()
              beginArguments(()
                beginLiteralString("hello")
                endLiteralString(0, ))
              endArguments(1, (, ))
            endMetadata(@, null, ))
          endMetadataStar(1)
          beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
            handleIdentifier(int, typeReference)
            handleNoTypeArguments())
            handleType(int, null)
            handleNoName())
            handleFormalParameterWithoutValue())
          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(null, typedef, =, ;)
  endTopLevelDeclaration(;)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(F, typedefDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(@)
          beginMetadata(@)
            handleIdentifier(foo, metadataReference)
            handleIdentifier(bar, metadataContinuation)
            handleQualified(.)
            handleNoTypeArguments(.)
            handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
            beginArguments(()
              beginLiteralString("hello")
              endLiteralString(0, ))
            endArguments(1, (, ))
          endMetadata(@, ., ))
        endMetadataStar(1)
        handleIdentifier(T, typeVariableDeclaration)
        beginTypeVariable(T)
          handleTypeVariablesDefined(T, 1)
          handleNoType(T)
        endTypeVariable(>, 0, null, null)
      endTypeVariables(<, >)
      beginFunctionType(int)
        beginTypeVariables(<)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              handleIdentifier(bar, metadataContinuation)
              handleQualified(.)
              handleNoTypeArguments(.)
              handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
              beginArguments(()
                beginLiteralString("hello")
                endLiteralString(0, ))
              endArguments(1, (, ))
            endMetadata(@, ., ))
          endMetadataStar(1)
          handleIdentifier(X, typeVariableDeclaration)
          beginTypeVariable(X)
            handleTypeVariablesDefined(X, 1)
            handleNoType(X)
          endTypeVariable(>, 0, null, null)
        endTypeVariables(<, >)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(Function)
        handleType(int, null)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              handleIdentifier(bar, metadataContinuation)
              handleQualified(.)
              handleNoTypeArguments(.)
              handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
              beginArguments(()
                beginLiteralString("hello")
                endLiteralString(0, ))
              endArguments(1, (, ))
            endMetadata(@, ., ))
          endMetadataStar(1)
          beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
            handleIdentifier(int, typeReference)
            handleNoTypeArguments())
            handleType(int, null)
            handleNoName())
            handleFormalParameterWithoutValue())
          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(null, typedef, =, ;)
  endTopLevelDeclaration(;)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(F, typedefDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(@)
          beginMetadata(@)
            handleIdentifier(foo, metadataReference)
            beginTypeArguments(<)
              handleIdentifier(int, typeReference)
              handleNoTypeArguments(>)
              handleType(int, null)
            endTypeArguments(1, <, >)
            beginArguments(()
              beginLiteralString("hello")
              endLiteralString(0, ))
            endArguments(1, (, ))
          endMetadata(@, null, ))
        endMetadataStar(1)
        handleIdentifier(T, typeVariableDeclaration)
        beginTypeVariable(T)
          handleTypeVariablesDefined(T, 1)
          handleNoType(T)
        endTypeVariable(>, 0, null, null)
      endTypeVariables(<, >)
      beginFunctionType(int)
        beginTypeVariables(<)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              beginTypeArguments(<)
                handleIdentifier(int, typeReference)
                handleNoTypeArguments(>)
                handleType(int, null)
              endTypeArguments(1, <, >)
              beginArguments(()
                beginLiteralString("hello")
                endLiteralString(0, ))
              endArguments(1, (, ))
            endMetadata(@, null, ))
          endMetadataStar(1)
          handleIdentifier(X, typeVariableDeclaration)
          beginTypeVariable(X)
            handleTypeVariablesDefined(X, 1)
            handleNoType(X)
          endTypeVariable(>, 0, null, null)
        endTypeVariables(<, >)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(Function)
        handleType(int, null)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              beginTypeArguments(<)
                handleIdentifier(int, typeReference)
                handleNoTypeArguments(>)
                handleType(int, null)
              endTypeArguments(1, <, >)
              beginArguments(()
                beginLiteralString("hello")
                endLiteralString(0, ))
              endArguments(1, (, ))
            endMetadata(@, null, ))
          endMetadataStar(1)
          beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
            handleIdentifier(int, typeReference)
            handleNoTypeArguments())
            handleType(int, null)
            handleNoName())
            handleFormalParameterWithoutValue())
          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(null, typedef, =, ;)
  endTopLevelDeclaration(;)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(F, typedefDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(@)
          beginMetadata(@)
            handleIdentifier(foo, metadataReference)
            beginTypeArguments(<)
              handleIdentifier(int, typeReference)
              handleNoTypeArguments(>)
              handleType(int, null)
            endTypeArguments(1, <, >)
            handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
            beginArguments(()
              beginLiteralString("hello")
              endLiteralString(0, ))
            endArguments(1, (, ))
          endMetadata(@, ., ))
        endMetadataStar(1)
        handleIdentifier(T, typeVariableDeclaration)
        beginTypeVariable(T)
          handleTypeVariablesDefined(T, 1)
          handleNoType(T)
        endTypeVariable(>, 0, null, null)
      endTypeVariables(<, >)
      beginFunctionType(int)
        beginTypeVariables(<)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              beginTypeArguments(<)
                handleIdentifier(int, typeReference)
                handleNoTypeArguments(>)
                handleType(int, null)
              endTypeArguments(1, <, >)
              handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
              beginArguments(()
                beginLiteralString("hello")
                endLiteralString(0, ))
              endArguments(1, (, ))
            endMetadata(@, ., ))
          endMetadataStar(1)
          handleIdentifier(X, typeVariableDeclaration)
          beginTypeVariable(X)
            handleTypeVariablesDefined(X, 1)
            handleNoType(X)
          endTypeVariable(>, 0, null, null)
        endTypeVariables(<, >)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(Function)
        handleType(int, null)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              beginTypeArguments(<)
                handleIdentifier(int, typeReference)
                handleNoTypeArguments(>)
                handleType(int, null)
              endTypeArguments(1, <, >)
              handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
              beginArguments(()
                beginLiteralString("hello")
                endLiteralString(0, ))
              endArguments(1, (, ))
            endMetadata(@, ., ))
          endMetadataStar(1)
          beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
            handleIdentifier(int, typeReference)
            handleNoTypeArguments())
            handleType(int, null)
            handleNoName())
            handleFormalParameterWithoutValue())
          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(null, typedef, =, ;)
  endTopLevelDeclaration(;)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(F, typedefDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(@)
          beginMetadata(@)
            handleIdentifier(foo, metadataReference)
            handleIdentifier(bar, metadataContinuation)
            handleQualified(.)
            beginTypeArguments(<)
              handleIdentifier(int, typeReference)
              handleNoTypeArguments(>)
              handleType(int, null)
            endTypeArguments(1, <, >)
            beginArguments(()
              beginLiteralString("hello")
              endLiteralString(0, ))
            endArguments(1, (, ))
          endMetadata(@, null, ))
        endMetadataStar(1)
        handleIdentifier(T, typeVariableDeclaration)
        beginTypeVariable(T)
          handleTypeVariablesDefined(T, 1)
          handleNoType(T)
        endTypeVariable(>, 0, null, null)
      endTypeVariables(<, >)
      beginFunctionType(int)
        beginTypeVariables(<)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              handleIdentifier(bar, metadataContinuation)
              handleQualified(.)
              beginTypeArguments(<)
                handleIdentifier(int, typeReference)
                handleNoTypeArguments(>)
                handleType(int, null)
              endTypeArguments(1, <, >)
              beginArguments(()
                beginLiteralString("hello")
                endLiteralString(0, ))
              endArguments(1, (, ))
            endMetadata(@, null, ))
          endMetadataStar(1)
          handleIdentifier(X, typeVariableDeclaration)
          beginTypeVariable(X)
            handleTypeVariablesDefined(X, 1)
            handleNoType(X)
          endTypeVariable(>, 0, null, null)
        endTypeVariables(<, >)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(Function)
        handleType(int, null)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              handleIdentifier(bar, metadataContinuation)
              handleQualified(.)
              beginTypeArguments(<)
                handleIdentifier(int, typeReference)
                handleNoTypeArguments(>)
                handleType(int, null)
              endTypeArguments(1, <, >)
              beginArguments(()
                beginLiteralString("hello")
                endLiteralString(0, ))
              endArguments(1, (, ))
            endMetadata(@, null, ))
          endMetadataStar(1)
          beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
            handleIdentifier(int, typeReference)
            handleNoTypeArguments())
            handleType(int, null)
            handleNoName())
            handleFormalParameterWithoutValue())
          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(null, typedef, =, ;)
  endTopLevelDeclaration(;)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(F, typedefDeclaration)
      beginTypeVariables(<)
        beginMetadataStar(@)
          beginMetadata(@)
            handleIdentifier(foo, metadataReference)
            handleIdentifier(bar, metadataContinuation)
            handleQualified(.)
            beginTypeArguments(<)
              handleIdentifier(int, typeReference)
              handleNoTypeArguments(>)
              handleType(int, null)
            endTypeArguments(1, <, >)
            handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
            beginArguments(()
              beginLiteralString("hello")
              endLiteralString(0, ))
            endArguments(1, (, ))
          endMetadata(@, ., ))
        endMetadataStar(1)
        handleIdentifier(T, typeVariableDeclaration)
        beginTypeVariable(T)
          handleTypeVariablesDefined(T, 1)
          handleNoType(T)
        endTypeVariable(>, 0, null, null)
      endTypeVariables(<, >)
      beginFunctionType(int)
        beginTypeVariables(<)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              handleIdentifier(bar, metadataContinuation)
              handleQualified(.)
              beginTypeArguments(<)
                handleIdentifier(int, typeReference)
                handleNoTypeArguments(>)
                handleType(int, null)
              endTypeArguments(1, <, >)
              handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
              beginArguments(()
                beginLiteralString("hello")
                endLiteralString(0, ))
              endArguments(1, (, ))
            endMetadata(@, ., ))
          endMetadataStar(1)
          handleIdentifier(X, typeVariableDeclaration)
          beginTypeVariable(X)
            handleTypeVariablesDefined(X, 1)
            handleNoType(X)
          endTypeVariable(>, 0, null, null)
        endTypeVariables(<, >)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(Function)
        handleType(int, null)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
          beginMetadataStar(@)
            beginMetadata(@)
              handleIdentifier(foo, metadataReference)
              handleIdentifier(bar, metadataContinuation)
              handleQualified(.)
              beginTypeArguments(<)
                handleIdentifier(int, typeReference)
                handleNoTypeArguments(>)
                handleType(int, null)
              endTypeArguments(1, <, >)
              handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
              beginArguments(()
                beginLiteralString("hello")
                endLiteralString(0, ))
              endArguments(1, (, ))
            endMetadata(@, ., ))
          endMetadataStar(1)
          beginFormalParameter(int, MemberKind.GeneralizedFunctionType, null, null, null)
            handleIdentifier(int, typeReference)
            handleNoTypeArguments())
            handleType(int, null)
            handleNoName())
            handleFormalParameterWithoutValue())
          endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
        endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(null, typedef, =, ;)
  endTopLevelDeclaration(;)
  beginMetadataStar(@)
    beginMetadata(@)
      handleIdentifier(abstract, metadataReference)
      handleIdentifier(abstract, metadataContinuation)
      handleQualified(.)
      handleNoTypeArguments(@)
      handleNoArguments(@)
    endMetadata(@, null, abstract)
    beginMetadata(@)
      handleIdentifier(abstract, metadataReference)
      handleIdentifier(bar, metadataContinuation)
      handleQualified(.)
      handleNoTypeArguments(.)
      handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
      handleNoArguments(@)
    endMetadata(@, ., abstract)
    beginMetadata(@)
      handleIdentifier(abstract, metadataReference)
      handleNoTypeArguments(()
      beginArguments(()
        beginLiteralString("hello")
        endLiteralString(0, ))
      endArguments(1, (, ))
    endMetadata(@, null, ))
    beginMetadata(@)
      handleIdentifier(abstract, metadataReference)
      handleIdentifier(abstract, metadataContinuation)
      handleQualified(.)
      handleNoTypeArguments(()
      beginArguments(()
        beginLiteralString("hello")
        endLiteralString(0, ))
      endArguments(1, (, ))
    endMetadata(@, null, ))
    beginMetadata(@)
      handleIdentifier(abstract, metadataReference)
      handleIdentifier(bar, metadataContinuation)
      handleQualified(.)
      handleNoTypeArguments(.)
      handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
      beginArguments(()
        beginLiteralString("hello")
        endLiteralString(0, ))
      endArguments(1, (, ))
    endMetadata(@, ., ))
    beginMetadata(@)
      handleIdentifier(abstract, metadataReference)
      beginTypeArguments(<)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(>)
        handleType(int, null)
      endTypeArguments(1, <, >)
      beginArguments(()
        beginLiteralString("hello")
        endLiteralString(0, ))
      endArguments(1, (, ))
    endMetadata(@, null, ))
    beginMetadata(@)
      handleIdentifier(abstract, metadataReference)
      beginTypeArguments(<)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(>)
        handleType(int, null)
      endTypeArguments(1, <, >)
      handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
      beginArguments(()
        beginLiteralString("hello")
        endLiteralString(0, ))
      endArguments(1, (, ))
    endMetadata(@, ., ))
    beginMetadata(@)
      handleIdentifier(abstract, metadataReference)
      handleIdentifier(bar, metadataContinuation)
      handleQualified(.)
      beginTypeArguments(<)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(>)
        handleType(int, null)
      endTypeArguments(1, <, >)
      beginArguments(()
        beginLiteralString("hello")
        endLiteralString(0, ))
      endArguments(1, (, ))
    endMetadata(@, null, ))
    beginMetadata(@)
      handleIdentifier(abstract, metadataReference)
      handleIdentifier(bar, metadataContinuation)
      handleQualified(.)
      beginTypeArguments(<)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(>)
        handleType(int, null)
      endTypeArguments(1, <, >)
      handleIdentifier(abstract, metadataContinuationAfterTypeArguments)
      beginArguments(()
        beginLiteralString("hello")
        endLiteralString(0, ))
      endArguments(1, (, ))
    endMetadata(@, ., ))
  endMetadataStar(9)
  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
    handleIdentifier(Y, classOrMixinDeclaration)
    handleNoTypeVariables({)
    beginClassDeclaration(class, null, null, null, null, null, null, null, null, Y)
      handleNoType(Y)
      handleClassExtends(null, 1)
      handleClassNoWithClause()
      handleImplements(null, 0)
      handleClassHeader(class, class, null)
      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
    endClassDeclaration(class, })
  endTopLevelDeclaration(})
endCompilationUnit(12, )
