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, 'foo')
                  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, )
