beginCompilationUnit(main)
  beginMetadataStar(main)
  endMetadataStar(0)
  beginTopLevelMember(main)
    beginTopLevelMethod(, null)
      handleNoType()
      handleIdentifier(main, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
        beginTryStatement(try)
          beginBlock({, BlockKind(try statement))
          endBlock(0, {, }, BlockKind(try statement))
          beginBlock({, BlockKind(finally clause))
          endBlock(0, {, }, BlockKind(finally clause))
          handleFinallyBlock(finally)
        endTryStatement(0, try, finally)
      endBlockFunctionBody(1, {, })
    endTopLevelMethod(main, null, })
  endTopLevelDeclaration()
endCompilationUnit(1, )
