(command.CommandList
  children: [
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_Number '$1'))} 
                  {(Id.Lit_Equals '=') (Id.Lit_Equals '=')} {(DQ )} {(Id.Lit_RBracket ']')}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:62)
            )
          ]
          action: [
            (command.Simple
              words: [{(echo)} {(DQ ('USAGE:  ') ($ Id.VSub_Number '$0') (' DISTFILE'))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:75)
                  fd: -1
                  arg_word: {(2)}
                )
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Exit val:exit span_id:79)
              arg_word: {(1)}
            )
          ]
          spids: [47 64]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-e)} {($ Id.VSub_Number '$1')} 
                  {(Id.Lit_RBracket ']')}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:97)
            )
          ]
          action: [
            (command.Simple
              words: [{(echo)} {($ Id.VSub_Number '$1') (DQ (': File not found.'))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:109)
                  fd: -1
                  arg_word: {(2)}
                )
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Exit val:exit span_id:113)
              arg_word: {(1)}
            )
          ]
          spids: [86 99]
        )
      ]
    )
    (C {(Id.KW_Set set)} {(-ex)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:LANGUAGES)
          op: assign_op.Equal
          rhs: {(DQ ('cpp csharp java javanano js objectivec python ruby php'))}
          spids: [125]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:BASENAME)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_Backtick val:'`' span_id:131)
                command_list: 
                  (command.CommandList
                    children: [(C {(basename)} {($ Id.VSub_Number '$1')} {(.tar.gz)})]
                  )
              )
            }
          spids: [130]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:VERSION)
          op: assign_op.Equal
          rhs: 
            {
              (braced_var_sub
                token: (Token id:Id.VSub_Name val:BASENAME span_id:143)
                suffix_op: (suffix_op.Slice begin:(arith_expr.ArithWord w:{(Id.Lit_Digits 9)}))
              )
            }
          spids: [141]
        )
      ]
    )
    (C {(mkdir)} {(dist)})
    (C {(cp)} {($ Id.VSub_Number '$1')} {(dist)})
    (C {(cd)} {(dist)})
    (C {(tar)} {(zxvf)} {($ Id.VSub_DollarName '$BASENAME') (.tar.gz)})
    (C {(rm)} {($ Id.VSub_DollarName '$BASENAME') (.tar.gz)})
    (C {(chmod)} {(-R)} {(u) (Id.Lit_Other '+') (w)} {($ Id.VSub_DollarName '$BASENAME')})
    (C {(cd)} {($ Id.VSub_DollarName '$BASENAME')})
    (command.ForEach
      iter_name: LANG
      iter_words: [{($ Id.VSub_DollarName '$LANGUAGES')}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (C {(./configure)} {(Id.Lit_VarLike 'DIST_LANG=') ($ Id.VSub_DollarName '$LANG')})
            (C {(make)} {(dist-gzip)})
            (C {(mv)} {($ Id.VSub_DollarName '$BASENAME') (.tar.gz)} 
              {(../protobuf-) ($ Id.VSub_DollarName '$LANG') (-) ($ Id.VSub_DollarName '$VERSION') 
                (.tar.gz)
              }
            )
          ]
        )
    )
    (C {(todos)} {(Id.Lit_Star '*') (.txt)} {(Id.Lit_Star '*') (/) (Id.Lit_Star '*') (.txt)})
    (command.ForEach
      iter_name: LANG
      iter_words: [{($ Id.VSub_DollarName '$LANGUAGES')}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (C {(./configure)} {(Id.Lit_VarLike 'DIST_LANG=') ($ Id.VSub_DollarName '$LANG')})
            (C {(make)} {(dist-zip)})
            (C {(mv)} {($ Id.VSub_DollarName '$BASENAME') (.zip)} 
              {(../protobuf-) ($ Id.VSub_DollarName '$LANG') (-) ($ Id.VSub_DollarName '$VERSION') 
                (.zip)
              }
            )
          ]
        )
    )
    (C {(cd)} {(..)})
    (C {(rm)} {(-rf)} {($ Id.VSub_DollarName '$BASENAME')})
  ]
)