beginCompilationUnit(void)
  beginMetadataStar(void)
  endMetadataStar(0)
  beginTopLevelMember(void)
    beginTopLevelMethod(, null, null)
      handleVoidKeyword(void)
      handleIdentifier(f, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
        beginMetadataStar(x)
        endMetadataStar(0)
        beginFormalParameter(x, MemberKind.TopLevelMethod, null, null, null)
          handleNoType(()
          handleIdentifier(x, formalParameterDeclaration)
          handleFormalParameterWithoutValue())
        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
        beginSwitchStatement(switch)
          handleIdentifier(x, expression)
          handleNoTypeArguments())
          handleNoArguments())
          handleSend(x, x)
          handleParenthesizedCondition((, null, null)
          beginSwitchBlock({)
            beginCaseExpression(case)
              beginPattern(case)
                handleNoTypeArguments([)
                beginPattern(...)
                  handleLiteralNull(null)
                  handleRelationalPattern(==)
                endPattern(null)
                handleRestPattern(..., true)
                handleListPattern(1, [, ])
              endPattern(])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              beginPattern(case)
                handleNoTypeArguments([)
                beginPattern(...)
                  handleLiteralNull(null)
                  handleRelationalPattern(!=)
                endPattern(null)
                handleRestPattern(..., true)
                handleListPattern(1, [, ])
              endPattern(])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              beginPattern(case)
                handleNoTypeArguments([)
                beginPattern(...)
                  handleLiteralInt(0)
                  handleRelationalPattern(<)
                endPattern(0)
                handleRestPattern(..., true)
                handleListPattern(1, [, ])
              endPattern(])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              beginPattern(case)
                handleNoTypeArguments([)
                beginPattern(...)
                  handleLiteralInt(0)
                  handleRelationalPattern(>)
                endPattern(0)
                handleRestPattern(..., true)
                handleListPattern(1, [, ])
              endPattern(])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              beginPattern(case)
                handleNoTypeArguments([)
                beginPattern(...)
                  handleLiteralInt(0)
                  handleRelationalPattern(<=)
                endPattern(0)
                handleRestPattern(..., true)
                handleListPattern(1, [, ])
              endPattern(])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              beginPattern(case)
                handleNoTypeArguments([)
                beginPattern(...)
                  handleLiteralInt(0)
                  handleRelationalPattern(>=)
                endPattern(0)
                handleRestPattern(..., true)
                handleListPattern(1, [, ])
              endPattern(])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              beginPattern(case)
                handleNoTypeArguments([)
                beginPattern(...)
                  beginConstantPattern(null)
                    handleLiteralInt(0)
                  endConstantPattern(null)
                endPattern(0)
                handleRestPattern(..., true)
                handleListPattern(1, [, ])
              endPattern(])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              beginPattern(case)
                handleNoTypeArguments([)
                beginPattern(...)
                  beginConstantPattern(null)
                    handleLiteralDouble(0.0)
                  endConstantPattern(null)
                endPattern(0.0)
                handleRestPattern(..., true)
                handleListPattern(1, [, ])
              endPattern(])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              beginPattern(case)
                handleNoTypeArguments([)
                beginPattern(...)
                  beginConstantPattern(null)
                    handleLiteralInt(0x0)
                  endConstantPattern(null)
                endPattern(0x0)
                handleRestPattern(..., true)
                handleListPattern(1, [, ])
              endPattern(])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              beginPattern(case)
                handleNoTypeArguments([)
                beginPattern(...)
                  beginConstantPattern(null)
                    handleLiteralNull(null)
                  endConstantPattern(null)
                endPattern(null)
                handleRestPattern(..., true)
                handleListPattern(1, [, ])
              endPattern(])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              beginPattern(case)
                handleNoTypeArguments([)
                beginPattern(...)
                  beginConstantPattern(null)
                    handleLiteralBool(false)
                  endConstantPattern(null)
                endPattern(false)
                handleRestPattern(..., true)
                handleListPattern(1, [, ])
              endPattern(])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              beginPattern(case)
                handleNoTypeArguments([)
                beginPattern(...)
                  beginConstantPattern(null)
                    handleLiteralBool(true)
                  endConstantPattern(null)
                endPattern(true)
                handleRestPattern(..., true)
                handleListPattern(1, [, ])
              endPattern(])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              beginPattern(case)
                handleNoTypeArguments([)
                beginPattern(...)
                  beginConstantPattern(null)
                    beginLiteralString('foo')
                    endLiteralString(0, ])
                  endConstantPattern(null)
                endPattern('foo')
                handleRestPattern(..., true)
                handleListPattern(1, [, ])
              endPattern(])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              beginPattern(case)
                handleNoTypeArguments([)
                beginPattern(...)
                  beginConstantPattern(null)
                    handleIdentifier(x, expression)
                    handleNoTypeArguments(])
                    handleNoArguments(])
                    handleSend(x, x)
                  endConstantPattern(null)
                endPattern(x)
                handleRestPattern(..., true)
                handleListPattern(1, [, ])
              endPattern(])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              beginPattern(case)
                handleNoTypeArguments([)
                beginPattern(...)
                  beginConstantPattern(const)
                    handleIdentifier(List, expression)
                    handleNoTypeArguments(()
                    beginArguments(()
                    endArguments(0, (, ))
                    handleSend(List, ))
                  endConstantPattern(const)
                endPattern())
                handleRestPattern(..., true)
                handleListPattern(1, [, ])
              endPattern(])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              beginPattern(case)
                handleNoTypeArguments([)
                beginPattern(...)
                  handleNoType(var)
                  handleDeclaredVariablePattern(var, x, false)
                endPattern(x)
                handleRestPattern(..., true)
                handleListPattern(1, [, ])
              endPattern(])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              beginPattern(case)
                handleNoTypeArguments([)
                beginPattern(...)
                  handleNoType(final)
                  handleDeclaredVariablePattern(final, x, false)
                endPattern(x)
                handleRestPattern(..., true)
                handleListPattern(1, [, ])
              endPattern(])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              beginPattern(case)
                handleNoTypeArguments([)
                beginPattern(...)
                  handleIdentifier(List, typeReference)
                  handleNoTypeArguments(x)
                  handleType(List, null)
                  handleDeclaredVariablePattern(null, x, false)
                endPattern(x)
                handleRestPattern(..., true)
                handleListPattern(1, [, ])
              endPattern(])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              beginPattern(case)
                handleNoTypeArguments([)
                beginPattern(...)
                  handleNoType(_)
                  handleWildcardPattern(null, _)
                endPattern(_)
                handleRestPattern(..., true)
                handleListPattern(1, [, ])
              endPattern(])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              beginPattern(case)
                handleNoTypeArguments([)
                beginPattern(...)
                  beginPattern(()
                    handleNoType(_)
                    handleWildcardPattern(null, _)
                  endPattern(_)
                  handleParenthesizedPattern(()
                endPattern())
                handleRestPattern(..., true)
                handleListPattern(1, [, ])
              endPattern(])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              beginPattern(case)
                handleNoTypeArguments([)
                beginPattern(...)
                  handleNoTypeArguments([)
                  beginPattern([)
                    handleNoType(_)
                    handleWildcardPattern(null, _)
                  endPattern(_)
                  handleListPattern(1, [, ])
                endPattern(])
                handleRestPattern(..., true)
                handleListPattern(1, [, ])
              endPattern(])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              beginPattern(case)
                handleNoTypeArguments([)
                beginPattern(...)
                  handleNoTypeArguments([])
                  handleListPattern(0, [, ])
                endPattern(])
                handleRestPattern(..., true)
                handleListPattern(1, [, ])
              endPattern(])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              beginPattern(case)
                handleNoTypeArguments([)
                beginPattern(...)
                  beginTypeArguments(<)
                    handleIdentifier(int, typeReference)
                    handleNoTypeArguments(>)
                    handleType(int, null)
                  endTypeArguments(1, <, >)
                  handleListPattern(0, [, ])
                endPattern(])
                handleRestPattern(..., true)
                handleListPattern(1, [, ])
              endPattern(])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              beginPattern(case)
                handleNoTypeArguments([)
                beginPattern(...)
                  handleNoTypeArguments({)
                  handleMapPattern(0, {, })
                endPattern(})
                handleRestPattern(..., true)
                handleListPattern(1, [, ])
              endPattern(])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginCaseExpression(case)
              beginPattern(case)
                handleNoTypeArguments([)
                beginPattern(...)
                  handleNoTypeArguments(()
                  handleObjectPatternFields(0, (, ))
                  handleObjectPattern(List, null, null)
                endPattern())
                handleRestPattern(..., true)
                handleListPattern(1, [, ])
              endPattern(])
              handleSwitchCaseNoWhenClause(])
            endCaseExpression(case, null, :)
            beginSwitchCase(0, 25, case)
              handleBreakStatement(false, break, ;)
            endSwitchCase(0, 25, null, null, 1, case, ;)
          endSwitchBlock(1, {, })
        endSwitchStatement(switch, })
      endBlockFunctionBody(1, {, })
    endTopLevelMethod(void, null, })
  endTopLevelDeclaration(})
endCompilationUnit(1, )
