(command.CommandList
  children: [
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '$#')} {<-ne>} {<1>} 
                      {<Id.Lit_RBracket ']'>}
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_span_id: 40
                      stdin_parts: [
                        <'Usage: '>
                        ($ Id.VSub_Number '$0')
                        <' <VERSION_NUMBER>\n'>
                        <'\n'>
                        <'Example:\n'>
                        <'  '>
                        <Id.Lit_Dollar '$'>
                        <' '>
                        ($ Id.VSub_Number '$0')
                        <' 3.0.0\n'>
                        <'\n'>
                        <
'This script will download pre-built protoc binaries from maven repository and\n'
                        >
                        <
'create the Google.Protobuf.Tools package. Well-known type .proto files will also\n'
                        >
                        <'be included.\n'>
                      ]
                    )
                )
              ]
              do_fork: T
            )
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          spids: [4 17]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:VERSION_NUMBER)
          op: assign_op.Equal
          rhs: {($ Id.VSub_Number '$1')}
          spids: [49]
        )
      ]
    )
    (C {<declare>} {<-a>} 
      {<Id.Lit_VarLike 'FILE_NAMES='> 
        (sh_array_literal
          left: <Id.Op_LParen _>
          words: [
            {<windows_x86>}
            {<windows-x86_32.exe>}
            {<windows_x64>}
            {<windows-x86_64.exe>}
            {<macosx_x86>}
            {<osx-x86_32.exe>}
            {<macosx_x64>}
            {<osx-x86_64.exe>}
            {<linux_x86>}
            {<linux-x86_32.exe>}
            {<linux_x64>}
            {<linux-x86_64.exe>}
          ]
        )
      }
    )
    (C {<set>} {<-e>})
    (C {<mkdir>} {<-p>} {<protoc>})
    (command.ForExpr
      init: 
        (arith_expr.BinaryAssign
          op_id: Id.Arith_Equal
          left: <Id.Lit_ArithVarLike i>
          right: {<Id.Lit_Digits 0>}
        )
      cond: 
        (arith_expr.Binary
          op_id: Id.Arith_Less
          left: <Id.Lit_ArithVarLike i>
          right: 
            {
              (braced_var_sub
                token: <Id.VSub_Name FILE_NAMES>
                prefix_op: (Id.VSub_Pound)
                bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
              )
            }
        )
      update: 
        (arith_expr.BinaryAssign
          op_id: Id.Arith_PlusEqual
          left: <Id.Lit_ArithVarLike i>
          right: {<Id.Lit_Digits 2>}
        )
      body: 
        (command.DoGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:DIR_NAME)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (braced_var_sub
                        token: <Id.VSub_Name FILE_NAMES>
                        bracket_op: (bracket_op.ArrayIndex expr:{($ Id.VSub_DollarName '$i')})
                      )
                    }
                  spids: [141]
                )
              ]
            )
            (C {<mkdir>} {<-p>} {<'protoc/'> ($ Id.VSub_DollarName '$DIR_NAME')})
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} 
                              {
                                (braced_var_sub
                                  token: <Id.VSub_Name DIR_NAME>
                                  suffix_op: 
                                    (suffix_op.Slice
                                      begin: {<Id.Lit_Digits 0>}
                                      length: {<Id.Lit_Digits 3>}
                                    )
                                )
                              } {<Id.Lit_Equals '='>} {(DQ <win>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:TARGET_BINARY)
                          op: assign_op.Equal
                          rhs: {(DQ <protoc.exe>)}
                          spids: [183]
                        )
                      ]
                    )
                  ]
                  spids: [159 180]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:TARGET_BINARY)
                      op: assign_op.Equal
                      rhs: {(DQ <protoc>)}
                      spids: [192]
                    )
                  ]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:BINARY_NAME)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (braced_var_sub
                        token: <Id.VSub_Name FILE_NAMES>
                        bracket_op: 
                          (bracket_op.ArrayIndex
                            expr: 
                              {
                                (word_part.ArithSub
                                  anode: 
                                    (arith_expr.Binary
                                      op_id: Id.Arith_Plus
                                      left: {($ Id.VSub_DollarName '$i')}
                                      right: {<Id.Lit_Digits 1>}
                                    )
                                )
                              }
                          )
                      )
                    }
                  spids: [202]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:BINARY_URL)
                  op: assign_op.Equal
                  rhs: 
                    {<http> <Id.Lit_Colon ':'> 
                      <'//repo1.maven.org/maven2/com/google/protobuf/protoc/'> (${ Id.VSub_Name VERSION_NUMBER) <'/protoc-'> (${ Id.VSub_Name VERSION_NUMBER) <-> 
                      (${ Id.VSub_Name BINARY_NAME)
                    }
                  spids: [216]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Pipeline
                              children: [
                                (command.Simple
                                  words: [
                                    {<wget>}
                                    {(${ Id.VSub_Name BINARY_URL)}
                                    {<-O>}
                                    {<'protoc/'> ($ Id.VSub_DollarName '$DIR_NAME') <'/'> 
                                      ($ Id.VSub_DollarName '$TARGET_BINARY')
                                    }
                                  ]
                                  redirects: [
                                    (redir
                                      op: <Id.Redir_AndGreat '&>'>
                                      loc: (redir_loc.Fd fd:1)
                                      arg: {<'/dev/null'>}
                                    )
                                  ]
                                  do_fork: T
                                )
                              ]
                              negated: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.Simple
                      words: [
                        {<echo>}
                        {(DQ <'[ERROR] Failed to download '> (${ Id.VSub_Name BINARY_URL))}
                      ]
                      redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
                      do_fork: T
                    )
                    (command.Simple
                      words: [
                        {<echo>}
                        {
                          (DQ <'[ERROR] Skipped '> ($ Id.VSub_DollarName '$protoc') <-> 
                            (${ Id.VSub_Name VERSION_NAME) <-> (${ Id.VSub_Name DIR_NAME)
                          )
                        }
                      ]
                      redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
                      do_fork: T
                    )
                    (command.ControlFlow token:<Id.ControlFlow_Continue continue>)
                  ]
                  spids: [234 256]
                )
              ]
            )
          ]
        )
    )
    (C {<nuget>} {<pack>} {<Google.Protobuf.Tools.nuspec>})
  ]
)