(command.CommandList
  children: [
    (command.FuncDef
      name: on_travis
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Lit_Other '[')} {(DQ ($ VSub_DollarName '$TRAVIS'))} 
                          {(Lit_Other '=') (Lit_Other '=')} {(DQ (true))} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(C {(DQ ($ VSub_At '$@'))})]
                )
              ]
            )
          ]
        )
    )
    (command.FuncDef
      name: internal_build_cpp
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: (C {(Lit_Other '[')} {(-f)} {(src/protoc)} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(command.ControlFlow token:<ControlFlow_Return return>)]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DBracket
                          expr: 
                            (bool_expr.LogicalAnd
                              left: 
                                (bool_expr.BoolBinary
                                  op_id: BoolBinary_GlobDEqual
                                  left: 
                                    {
                                      (word_part.CommandSubPart
                                        command_list: 
                                          (command.CommandList
                                            children: [(C {(uname)} {(-s)})]
                                          )
                                        left_token: <Left_DollarParen '$('>
                                      )
                                    }
                                  right: {(DQ (Linux))}
                                )
                              right: 
                                (bool_expr.BoolBinary
                                  op_id: BoolBinary_GlobDEqual
                                  left: {(DQ ($ VSub_DollarName '$TRAVIS'))}
                                  right: {(DQ (true))}
                                )
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(sudo)} {(add-apt-repository)} {(ppa) (Lit_Other ':') (ubuntu-toolchain-r/test)} 
                      {(-y)}
                    )
                    (C {(sudo)} {(apt-get)} {(update)} {(-qq)})
                    (C {(sudo)} {(apt-get)} {(install)} {(-qq)} 
                      {(g) (Lit_Other '+') (Lit_Other '+') (-4.8)}
                    )
                    (C {(export)} {(Lit_VarLike 'CXX=') (DQ ('g++-4.8'))} 
                      {(Lit_VarLike 'CC=') (DQ (gcc-4.8))}
                    )
                  ]
                )
              ]
            )
            (C {(./autogen.sh)})
            (C {(./configure)} {(Lit_VarLike 'CXXFLAGS=') (DQ (-fPIC))})
            (C {(make)} {(-j2)})
          ]
        )
    )
    (command.FuncDef
      name: build_cpp
      body: 
        (command.BraceGroup
          children: [
            (C {(internal_build_cpp)})
            (C {(make)} {(check)} {(-j2)})
            (command.AndOr
              ops: [Op_DAmp Op_DAmp]
              children: [(C {(cd)} {(conformance)}) (C {(make)} {(test_cpp)}) (C {(cd)} {(..)})]
            )
            (C {(git)} {(submodule)} {(init)})
            (C {(git)} {(submodule)} {(update)})
            (command.AndOr
              ops: [Op_DAmp Op_DAmp Op_DAmp]
              children: [
                (C {(cd)} {(third_party/benchmark)})
                (C {(cmake)} {(-DCMAKE_BUILD_TYPE) (Lit_Other '=') (Release)})
                (C {(make)})
                (C {(cd)} {(../..)})
              ]
            )
            (command.AndOr
              ops: [Op_DAmp Op_DAmp Op_DAmp]
              children: [
                (C {(cd)} {(benchmarks)})
                (C {(make)})
                (C {(./generate-datasets)})
                (C {(cd)} {(..)})
              ]
            )
          ]
        )
    )
    (command.FuncDef
      name: build_cpp_distcheck
      body: 
        (command.BraceGroup
          children: [
            (C {(./autogen.sh)})
            (C {(./configure)})
            (C {(make)} {(dist)})
            (command.Pipeline
              children: [
                (C {(git)} {(ls-files)})
                (C {(grep)} 
                  {
                    (DQ ('^') (Lit_Other '\\') ('(java') (Lit_Other '\\') ('|python') (Lit_Other '\\') 
                      ('|objectivec') (Lit_Other '\\') ('|csharp') (Lit_Other '\\') ('|js') (Lit_Other '\\') ('|ruby') (Lit_Other '\\') ('|cmake') 
                      (Lit_Other '\\') ('|examples') (Lit_Other '\\') (')')
                    )
                  }
                )
                (C {(grep)} {(-v)} {(DQ (.gitignore))})
                (command.SimpleCommand
                  words: [{(grep)} {(-v)} {(DQ (java/compatibility_tests))}]
                  redirects: [(redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(dist.lst)})]
                )
              ]
              negated: F
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:DIST)
                  op: Equal
                  rhs: 
                    {
                      (word_part.CommandSubPart
                        command_list: 
                          (command.CommandList
                            children: [(C {(ls)} {(Lit_Other '*') (.tar.gz)})]
                          )
                        left_token: <Left_Backtick '`'>
                      )
                    }
                )
              ]
            )
            (C {(tar)} {(-xf)} {($ VSub_DollarName '$DIST')})
            (C {(cd)} 
              {
                (word_part.BracedVarSub
                  token: <VSub_Name DIST>
                  suffix_op: (suffix_op.PatSub pat:{(.tar.gz)} replace_mode:Lit_Slash)
                )
              }
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(lhs_expr.LhsName name:FILES_MISSING) op:Equal rhs:{(DQ )})]
            )
            (command.ForEach
              iter_name: FILE
              iter_words: [
                {
                  (word_part.CommandSubPart
                    command_list: 
                      (command.CommandList
                        children: [
                          (command.SimpleCommand
                            redirects: [
                              (redir.Redir
                                op: <Redir_Less '<'>
                                fd: 16777215
                                arg_word: {(../dist.lst)}
                              )
                            ]
                          )
                        ]
                      )
                    left_token: <Left_DollarParen '$('>
                  )
                }
              ]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.Pipeline
                                  children: [
                                    (command.SimpleCommand
                                      words: [{(file)} {($ VSub_DollarName '$FILE')}]
                                      redirects: [
                                        (redir.Redir
                                          op: <Redir_AndGreat '&>'>
                                          fd: 16777215
                                          arg_word: {(/dev/null)}
                                        )
                                      ]
                                    )
                                  ]
                                  negated: T
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C {(echo)} {(DQ ($ VSub_DollarName '$FILE') (' is not found!'))})
                            (command.Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (lhs_expr.LhsName name:FILES_MISSING)
                                  op: Equal
                                  rhs: 
                                    {
                                      (DQ ($ VSub_DollarName '$FILE') (' ') 
                                        ($ VSub_DollarName '$FILES_MISSING')
                                      )
                                    }
                                )
                              ]
                            )
                          ]
                        )
                      ]
                    )
                  ]
                )
            )
            (C {(cd)} {(..)})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Lit_Other '[')} {(KW_Bang '!')} {(-z)} 
                          {(DQ ($ VSub_DollarName '$FILES_MISSING'))} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(echo)} 
                      {(DQ ('Missing files in EXTRA_DIST: ') ($ VSub_DollarName '$FILES_MISSING'))}
                    )
                    (command.ControlFlow
                      token: <ControlFlow_Exit exit>
                      arg_word: {(1)}
                    )
                  ]
                )
              ]
            )
            (C {(make)} {(distcheck)} {(-j2)})
          ]
        )
    )
    (command.FuncDef
      name: build_csharp
      body: 
        (command.BraceGroup
          children: [
            (C {(internal_build_cpp)})
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:NUGET)
                  op: Equal
                  rhs: {(/usr/local/bin/nuget.exe)}
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Lit_Other '[')} {(DQ ($ VSub_DollarName '$TRAVIS'))} 
                          {(Lit_Other '=') (Lit_Other '=')} {(DQ (true))} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(sudo)} {(apt-key)} {(adv)} {(--keyserver)} {(keyserver.ubuntu.com)} 
                      {(--recv-keys)} {(3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF)}
                    )
                    (C {(sudo)} {(apt-key)} {(adv)} {(--keyserver)} {(keyserver.ubuntu.com)} 
                      {(--recv-keys)} {(1397BC53640DB551)}
                    )
                    (command.Pipeline
                      children: [
                        (C {(echo)} 
                          {(DQ ('deb http://download.mono-project.com/repo/debian wheezy main'))}
                        )
                        (C {(sudo)} {(tee)} {(/etc/apt/sources.list.d/mono-xamarin.list)})
                      ]
                      negated: F
                    )
                    (C {(sudo)} {(apt-get)} {(update)} {(-qq)})
                    (C {(sudo)} {(apt-get)} {(install)} {(-qq)} {(mono-devel)} {(referenceassemblies-pcl)} 
                      {(nunit)}
                    )
                    (C {(sudo)} {(sh)} {(-c)} 
                      {
                        (SQ 
                          <
'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet-release/ trusty main" > /etc/apt/sources.list.d/dotnetdev.list'
                          >
                        )
                      }
                    )
                    (C {(sudo)} {(apt-key)} {(adv)} {(--keyserver)} {(apt-mo.trafficmanager.net)} 
                      {(--recv-keys)} {(417A0893)}
                    )
                    (C {(sudo)} {(apt-get)} {(update)} {(-qq)})
                    (C {(sudo)} {(apt-get)} {(install)} {(-qq)} {(dotnet-dev-1.0.0-preview2-003121)})
                  ]
                )
              ]
            )
            (C {(mkdir)} {(dotnettmp)})
            (command.Subshell
              command_list: 
                (command.CommandList
                  children: [
                    (command.Sentence
                      child: (C {(cd)} {(dotnettmp)})
                      terminator: <Op_Semi ';'>
                    )
                    (command.SimpleCommand
                      words: [{(dotnet)} {(new)}]
                      redirects: [(redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(/dev/null)})]
                    )
                  ]
                )
            )
            (C {(rm)} {(-rf)} {(dotnettmp)})
            (command.Subshell
              command_list: 
                (command.CommandList
                  children: [
                    (command.Sentence
                      child: (C {(cd)} {(csharp/src)})
                      terminator: <Op_Semi ';'>
                    )
                    (C {(dotnet)} {(restore)})
                  ]
                )
            )
            (C {(csharp/buildall.sh)})
            (command.AndOr
              ops: [Op_DAmp Op_DAmp]
              children: [(C {(cd)} {(conformance)}) (C {(make)} {(test_csharp)}) (C {(cd)} {(..)})]
            )
          ]
        )
    )
    (command.FuncDef
      name: build_golang
      body: 
        (command.BraceGroup
          children: [
            (C {(internal_build_cpp)})
            (C {(export)} 
              {(Lit_VarLike 'PATH=') 
                (DQ 
                  (word_part.CommandSubPart
                    command_list: (command.CommandList children:[(C {(pwd)})])
                    left_token: <Left_Backtick '`'>
                  ) ('/src:') ($ VSub_DollarName '$PATH')
                )
              }
            )
            (C {(on_travis)} {(sudo)} {(apt-get)} {(update)} {(-qq)})
            (C {(on_travis)} {(sudo)} {(apt-get)} {(install)} {(-qq)} {(golang)})
            (C {(export)} {(Lit_VarLike 'GOPATH=') (DQ ($ VSub_DollarName '$HOME') (/gocode))})
            (C {(mkdir)} {(-p)} {(DQ ($ VSub_DollarName '$GOPATH') (/src/github.com/google))})
            (C {(rm)} {(-f)} {(DQ ($ VSub_DollarName '$GOPATH') (/src/github.com/google/protobuf))})
            (C {(ln)} {(-s)} 
              {
                (DQ 
                  (word_part.CommandSubPart
                    command_list: (command.CommandList children:[(C {(pwd)})])
                    left_token: <Left_Backtick '`'>
                  )
                )
              } {(DQ ($ VSub_DollarName '$GOPATH') (/src/github.com/google/protobuf))}
            )
            (C {(export)} 
              {(Lit_VarLike 'PATH=') 
                (DQ ($ VSub_DollarName '$GOPATH') ('/bin:') ($ VSub_DollarName '$PATH'))
              }
            )
            (C {(go)} {(get)} {(github.com/golang/protobuf/protoc-gen-go)})
            (command.AndOr
              ops: [Op_DAmp Op_DAmp]
              children: [(C {(cd)} {(examples)}) (C {(make)} {(gotest)}) (C {(cd)} {(..)})]
            )
          ]
        )
    )
    (command.FuncDef
      name: use_java
      body: 
        (command.BraceGroup
          children: [
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:version)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                )
              ]
            )
            (command.Case
              to_match: {(DQ ($ VSub_DollarName '$version'))}
              arms: [
                (case_arm
                  pat_list: [{(jdk7)}]
                  action: [
                    (C {(on_travis)} {(sudo)} {(apt-get)} {(install)} {(openjdk-7-jdk)})
                    (C {(export)} 
                      {(Lit_VarLike 'PATH=') (/usr/lib/jvm/java-7-openjdk-amd64/bin) (Lit_Other ':') 
                        ($ VSub_DollarName '$PATH')
                      }
                    )
                    (C {(export)} {(Lit_VarLike 'JAVA_HOME=') (/usr/lib/jvm/java-7-openjdk-amd64)})
                  ]
                )
                (case_arm
                  pat_list: [{(oracle7)}]
                  action: [
                    (command.Sentence
                      child: 
                        (command.If
                          arms: [
                            (if_arm
                              cond: [
                                (command.Sentence
                                  child: 
                                    (C {(Lit_Other '[')} {(DQ ($ VSub_DollarName '$TRAVIS'))} 
                                      {(Lit_Other '=') (Lit_Other '=')} {(DQ (true))} {(Lit_Other ']')}
                                    )
                                  terminator: <Op_Semi ';'>
                                )
                              ]
                              action: [
                                (C {(sudo)} {(apt-get)} {(install)} {(python-software-properties)})
                                (command.Pipeline
                                  children: [
                                    (C {(echo)} 
                                      {
                                        (DQ 
                                          (
'oracle-java7-installer shared/accepted-oracle-license-v1-1 select true'
                                          )
                                        )
                                      }
                                    )
                                    (C {(sudo)} {(debconf-set-selections)})
                                  ]
                                  negated: F
                                )
                                (command.Pipeline
                                  children: [
                                    (C {(yes)})
                                    (C {(sudo)} {(apt-add-repository)} 
                                      {(ppa) (Lit_Other ':') (webupd8team/java)}
                                    )
                                  ]
                                  negated: F
                                )
                                (command.Pipeline
                                  children: [
                                    (C {(yes)})
                                    (C {(sudo)} {(apt-get)} {(install)} {(oracle-java7-installer)})
                                  ]
                                  negated: F
                                )
                              ]
                            )
                          ]
                        )
                      terminator: <Op_Semi ';'>
                    )
                    (C {(export)} 
                      {(Lit_VarLike 'PATH=') (/usr/lib/jvm/java-7-oracle/bin) (Lit_Other ':') 
                        ($ VSub_DollarName '$PATH')
                      }
                    )
                    (C {(export)} {(Lit_VarLike 'JAVA_HOME=') (/usr/lib/jvm/java-7-openjdk-amd64)})
                  ]
                )
              ]
            )
            (command.Sentence
              child: 
                (command.If
                  arms: [
                    (if_arm
                      cond: [
                        (command.Sentence
                          child: 
                            (C {(Lit_Other '[')} {(DQ ($ VSub_DollarName '$TRAVIS'))} 
                              {(KW_Bang '!') (Lit_Other '=')} {(DQ (true))} {(Lit_Other ']')}
                            )
                          terminator: <Op_Semi ';'>
                        )
                      ]
                      action: [
                        (command.Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (lhs_expr.LhsName name:MAVEN_LOCAL_REPOSITORY)
                              op: Equal
                              rhs: {(/var/maven_local_repository)}
                            )
                          ]
                        )
                        (command.Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (lhs_expr.LhsName name:MVN)
                              op: Equal
                              rhs: 
                                {
                                  (DQ ($ VSub_DollarName '$MVN') 
                                    (' -e -X --offline -Dmaven.repo.local=') ($ VSub_DollarName '$MAVEN_LOCAL_REPOSITORY')
                                  )
                                }
                            )
                          ]
                        )
                      ]
                    )
                  ]
                )
              terminator: <Op_Semi ';'>
            )
            (C {(which)} {(java)})
            (C {(java)} {(-version)})
            (C {($ VSub_DollarName '$MVN')} {(-version)})
          ]
        )
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(lhs_expr.LhsName name:MVN) op:Equal rhs:{(DQ ('mvn --batch-mode'))})]
    )
    (command.FuncDef
      name: build_java
      body: 
        (command.BraceGroup
          children: [
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:version)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                )
              ]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:dir)
                  op: Equal
                  rhs: {(java_) ($ VSub_DollarName '$version')}
                )
              ]
            )
            (C {(internal_build_cpp)})
            (C {(cp)} {(-r)} {(java)} {($ VSub_DollarName '$dir')})
            (command.AndOr
              ops: [Op_DAmp Op_DAmp]
              children: [
                (C {(cd)} {($ VSub_DollarName '$dir')})
                (C {($ VSub_DollarName '$MVN')} {(clean)})
                (C {($ VSub_DollarName '$MVN')} {(test)})
              ]
            )
            (C {(cd)} {(../..)})
          ]
        )
    )
    (command.FuncDef
      name: build_java_with_conformance_tests
      body: 
        (command.BraceGroup
          children: [
            (C {(internal_build_cpp)})
            (command.AndOr
              ops: [Op_DAmp Op_DAmp]
              children: [
                (C {(cd)} {(java)})
                (C {($ VSub_DollarName '$MVN')} {(test)})
                (C {($ VSub_DollarName '$MVN')} {(install)})
              ]
            )
            (command.AndOr
              ops: [Op_DAmp]
              children: [
                (C {(cd)} {(util)})
                (C {($ VSub_DollarName '$MVN')} {(package)} {(assembly) (Lit_Other ':') (single)})
              ]
            )
            (C {(cd)} {(../..)})
            (command.AndOr
              ops: [Op_DAmp Op_DAmp]
              children: [(C {(cd)} {(conformance)}) (C {(make)} {(test_java)}) (C {(cd)} {(..)})]
            )
          ]
        )
    )
    (command.FuncDef
      name: build_javanano
      body: 
        (command.BraceGroup
          children: [
            (C {(internal_build_cpp)})
            (command.AndOr
              ops: [Op_DAmp Op_DAmp]
              children: [
                (C {(cd)} {(javanano)})
                (C {($ VSub_DollarName '$MVN')} {(test)})
                (C {(cd)} {(..)})
              ]
            )
          ]
        )
    )
    (command.FuncDef
      name: build_java_jdk7
      body: 
        (command.BraceGroup
          children: [(C {(use_java)} {(jdk7)}) (C {(build_java_with_conformance_tests)})]
        )
    )
    (command.FuncDef
      name: build_java_oracle7
      body: 
        (command.BraceGroup
          children: [(C {(use_java)} {(oracle7)}) (C {(build_java)} {(oracle7)})]
        )
    )
    (command.FuncDef
      name: build_java_compatibility
      body: 
        (command.BraceGroup
          children: [
            (C {(use_java)} {(jdk7)})
            (C {(internal_build_cpp)})
            (C {(cd)} {(java/compatibility_tests/v2.5.0)})
            (C {(./test.sh)} {(3.0.0-beta-4)})
          ]
        )
    )
    (command.FuncDef
      name: build_javanano_jdk7
      body: (command.BraceGroup children:[(C {(use_java)} {(jdk7)}) (C {(build_javanano)})])
    )
    (command.FuncDef
      name: build_javanano_oracle7
      body: (command.BraceGroup children:[(C {(use_java)} {(oracle7)}) (C {(build_javanano)})])
    )
    (command.FuncDef
      name: internal_install_python_deps
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Lit_Other '[')} {(DQ ($ VSub_DollarName '$TRAVIS'))} 
                          {(KW_Bang '!') (Lit_Other '=')} {(DQ (true))} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (command.Sentence
                      child: (command.ControlFlow token:<ControlFlow_Return return>)
                      terminator: <Op_Semi ';'>
                    )
                  ]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Lit_Other '[')} 
                          {
                            (word_part.CommandSubPart
                              command_list: (command.CommandList children:[(C {(uname)} {(-s)})])
                              left_token: <Left_DollarParen '$('>
                            )
                          } {(Lit_Other '=') (Lit_Other '=')} {(DQ (Darwin))} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(C {(sudo)} {(easy_install)} {(tox)})]
                )
              ]
              else_action: [(C {(sudo)} {(pip)} {(install)} {(tox)})]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Lit_Other '[')} 
                          {
                            (word_part.CommandSubPart
                              command_list: (command.CommandList children:[(C {(uname)} {(-s)})])
                              left_token: <Left_DollarParen '$('>
                            )
                          } {(Lit_Other '=') (Lit_Other '=')} {(DQ (Linux))} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(sudo)} {(apt-get)} {(install)} {(-y)} {(python-software-properties)})
                    (C {(sudo)} {(apt-add-repository)} {(-y)} {(ppa) (Lit_Other ':') (fkrull/deadsnakes)})
                    (C {(sudo)} {(apt-get)} {(update)} {(-qq)})
                    (C {(sudo)} {(apt-get)} {(install)} {(-y)} {(python2.6)} {(python2.6-dev)})
                    (C {(sudo)} {(apt-get)} {(install)} {(-y)} {(python3.3)} {(python3.3-dev)})
                    (C {(sudo)} {(apt-get)} {(install)} {(-y)} {(python3.4)} {(python3.4-dev)})
                  ]
                )
              ]
            )
          ]
        )
    )
    (command.FuncDef
      name: build_objectivec_ios
      body: 
        (command.BraceGroup
          children: [
            (C {(objectivec/DevTools/full_mac_build.sh)} {(--core-only)} {(--skip-xcode-osx)} 
              {(--skip-objc-conformance)} {(DQ ($ VSub_At '$@'))}
            )
          ]
        )
    )
    (command.FuncDef
      name: build_objectivec_ios_debug
      body: (command.BraceGroup children:[(C {(build_objectivec_ios)} {(--skip-xcode-release)})])
    )
    (command.FuncDef
      name: build_objectivec_ios_release
      body: (command.BraceGroup children:[(C {(build_objectivec_ios)} {(--skip-xcode-debug)})])
    )
    (command.FuncDef
      name: build_objectivec_osx
      body: 
        (command.BraceGroup
          children: [(C {(objectivec/DevTools/full_mac_build.sh)} {(--core-only)} {(--skip-xcode-ios)})]
        )
    )
    (command.FuncDef
      name: build_objectivec_cocoapods_integration
      body: 
        (command.BraceGroup
          children: [
            (C {(source)} {(word_part.TildeSubPart token:<Lit_TildeLike '~'>) (/.rvm/scripts/rvm)})
            (C {(rvm)} {(get)} {(head)})
            (C {(rvm)} {(use)} {(2.2.3)} {(--install)} {(--binary)} {(--fuzzy)})
            (C {(gem)} {(install)} {(cocoapods)} {(--no-ri)} {(--no-rdoc)})
            (C {(objectivec/Tests/CocoaPods/run_tests.sh)})
          ]
        )
    )
    (command.FuncDef
      name: build_python
      body: 
        (command.BraceGroup
          children: [
            (C {(internal_build_cpp)})
            (C {(internal_install_python_deps)})
            (C {(cd)} {(python)})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Lit_Other '[')} 
                          {
                            (word_part.CommandSubPart
                              command_list: (command.CommandList children:[(C {(uname)} {(-s)})])
                              left_token: <Left_DollarParen '$('>
                            )
                          } {(Lit_Other '=') (Lit_Other '=')} {(DQ (Linux))} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (command.Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (lhs_expr.LhsName name:envlist)
                          op: Equal
                          rhs: 
                            {(py) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\{'>) (26) 
                              (Lit_Comma ',') (27) (Lit_Comma ',') (33) (Lit_Comma ',') (34) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\}'>) 
                              (-python)
                            }
                        )
                      ]
                    )
                  ]
                )
              ]
              else_action: [
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:envlist)
                      op: Equal
                      rhs: {(py27-python)}
                    )
                  ]
                )
              ]
            )
            (C {(tox)} {(-e)} {($ VSub_DollarName '$envlist')})
            (C {(cd)} {(..)})
          ]
        )
    )
    (command.FuncDef
      name: build_python_cpp
      body: 
        (command.BraceGroup
          children: [
            (C {(internal_build_cpp)})
            (C {(internal_install_python_deps)})
            (C {(export)} {(Lit_VarLike 'LD_LIBRARY_PATH=') (../src/.libs)})
            (C {(export)} {(Lit_VarLike 'DYLD_LIBRARY_PATH=') (../src/.libs)})
            (C {(cd)} {(python)})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Lit_Other '[')} 
                          {
                            (word_part.CommandSubPart
                              command_list: (command.CommandList children:[(C {(uname)} {(-s)})])
                              left_token: <Left_DollarParen '$('>
                            )
                          } {(Lit_Other '=') (Lit_Other '=')} {(DQ (Linux))} {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (command.Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (lhs_expr.LhsName name:envlist)
                          op: Equal
                          rhs: 
                            {(py) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\{'>) (27) 
                              (Lit_Comma ',') (33) (Lit_Comma ',') (34) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\}'>) (-cpp)
                            }
                        )
                      ]
                    )
                  ]
                )
              ]
              else_action: [
                (command.Assignment
                  keyword: Assign_None
                  pairs: [(assign_pair lhs:(lhs_expr.LhsName name:envlist) op:Equal rhs:{(py27-cpp)})]
                )
              ]
            )
            (C {(tox)} {(-e)} {($ VSub_DollarName '$envlist')})
            (C {(cd)} {(..)})
          ]
        )
    )
    (command.FuncDef
      name: build_ruby21
      body: 
        (command.BraceGroup
          children: [
            (C {(internal_build_cpp)})
            (command.AndOr
              ops: [Op_DAmp Op_DAmp]
              children: [
                (C {(cd)} {(ruby)})
                (C {(bash)} {(travis-test.sh)} {(ruby-2.1)})
                (C {(cd)} {(..)})
              ]
            )
          ]
        )
    )
    (command.FuncDef
      name: build_ruby22
      body: 
        (command.BraceGroup
          children: [
            (C {(internal_build_cpp)})
            (command.AndOr
              ops: [Op_DAmp Op_DAmp]
              children: [
                (C {(cd)} {(ruby)})
                (C {(bash)} {(travis-test.sh)} {(ruby-2.2)})
                (C {(cd)} {(..)})
              ]
            )
          ]
        )
    )
    (command.FuncDef
      name: build_jruby
      body: 
        (command.BraceGroup
          children: [
            (C {(internal_build_cpp)})
            (command.AndOr
              ops: [Op_DAmp Op_DAmp]
              children: [
                (C {(cd)} {(ruby)})
                (C {(bash)} {(travis-test.sh)} {(jruby-1.7)})
                (C {(cd)} {(..)})
              ]
            )
          ]
        )
    )
    (command.FuncDef
      name: build_ruby_all
      body: 
        (command.BraceGroup
          children: [(C {(build_ruby21)}) (C {(build_ruby22)}) (C {(build_jruby)})]
        )
    )
    (command.FuncDef
      name: build_javascript
      body: 
        (command.BraceGroup
          children: [
            (C {(internal_build_cpp)})
            (command.AndOr
              ops: [Op_DAmp Op_DAmp Op_DAmp]
              children: [(C {(cd)} {(js)}) (C {(npm)} {(install)}) (C {(npm)} {(test)}) (C {(cd)} {(..)})]
            )
          ]
        )
    )
    (command.FuncDef
      name: use_php
      body: 
        (command.BraceGroup
          children: [
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:VERSION)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                )
              ]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:PHP)
                  op: Equal
                  rhs: 
                    {
                      (word_part.CommandSubPart
                        command_list: (command.CommandList children:[(C {(which)} {(php)})])
                        left_token: <Left_Backtick '`'>
                      )
                    }
                )
              ]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:PHP_CONFIG)
                  op: Equal
                  rhs: 
                    {
                      (word_part.CommandSubPart
                        command_list: (command.CommandList children:[(C {(which)} {(php-config)})])
                        left_token: <Left_Backtick '`'>
                      )
                    }
                )
              ]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:PHPIZE)
                  op: Equal
                  rhs: 
                    {
                      (word_part.CommandSubPart
                        command_list: (command.CommandList children:[(C {(which)} {(phpize)})])
                        left_token: <Left_Backtick '`'>
                      )
                    }
                )
              ]
            )
            (C {(rm)} {($ VSub_DollarName '$PHP')})
            (C {(rm)} {($ VSub_DollarName '$PHP_CONFIG')})
            (C {(rm)} {($ VSub_DollarName '$PHPIZE')})
            (C {(cp)} {(DQ (/usr/bin/php) ($ VSub_DollarName '$VERSION'))} {($ VSub_DollarName '$PHP')})
            (C {(cp)} {(DQ (/usr/bin/php-config) ($ VSub_DollarName '$VERSION'))} 
              {($ VSub_DollarName '$PHP_CONFIG')}
            )
            (C {(cp)} {(DQ (/usr/bin/phpize) ($ VSub_DollarName '$VERSION'))} 
              {($ VSub_DollarName '$PHPIZE')}
            )
          ]
        )
    )
    (command.FuncDef
      name: use_php_zts
      body: 
        (command.BraceGroup
          children: [
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:VERSION)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                )
              ]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:PHP)
                  op: Equal
                  rhs: 
                    {
                      (word_part.CommandSubPart
                        command_list: (command.CommandList children:[(C {(which)} {(php)})])
                        left_token: <Left_Backtick '`'>
                      )
                    }
                )
              ]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:PHP_CONFIG)
                  op: Equal
                  rhs: 
                    {
                      (word_part.CommandSubPart
                        command_list: (command.CommandList children:[(C {(which)} {(php-config)})])
                        left_token: <Left_Backtick '`'>
                      )
                    }
                )
              ]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:PHPIZE)
                  op: Equal
                  rhs: 
                    {
                      (word_part.CommandSubPart
                        command_list: (command.CommandList children:[(C {(which)} {(phpize)})])
                        left_token: <Left_Backtick '`'>
                      )
                    }
                )
              ]
            )
            (C {(ln)} {(-sfn)} {(DQ (/usr/local/php-) (${ VSub_Name VERSION) (-zts/bin/php))} 
              {($ VSub_DollarName '$PHP')}
            )
            (C {(ln)} {(-sfn)} {(DQ (/usr/local/php-) (${ VSub_Name VERSION) (-zts/bin/php-config))} 
              {($ VSub_DollarName '$PHP_CONFIG')}
            )
            (C {(ln)} {(-sfn)} {(DQ (/usr/local/php-) (${ VSub_Name VERSION) (-zts/bin/phpize))} 
              {($ VSub_DollarName '$PHPIZE')}
            )
          ]
        )
    )
    (command.FuncDef
      name: use_php_bc
      body: 
        (command.BraceGroup
          children: [
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:VERSION)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                )
              ]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:PHP)
                  op: Equal
                  rhs: 
                    {
                      (word_part.CommandSubPart
                        command_list: (command.CommandList children:[(C {(which)} {(php)})])
                        left_token: <Left_Backtick '`'>
                      )
                    }
                )
              ]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:PHP_CONFIG)
                  op: Equal
                  rhs: 
                    {
                      (word_part.CommandSubPart
                        command_list: (command.CommandList children:[(C {(which)} {(php-config)})])
                        left_token: <Left_Backtick '`'>
                      )
                    }
                )
              ]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:PHPIZE)
                  op: Equal
                  rhs: 
                    {
                      (word_part.CommandSubPart
                        command_list: (command.CommandList children:[(C {(which)} {(phpize)})])
                        left_token: <Left_Backtick '`'>
                      )
                    }
                )
              ]
            )
            (C {(ln)} {(-sfn)} {(DQ (/usr/local/php-) (${ VSub_Name VERSION) (-bc/bin/php))} 
              {($ VSub_DollarName '$PHP')}
            )
            (C {(ln)} {(-sfn)} {(DQ (/usr/local/php-) (${ VSub_Name VERSION) (-bc/bin/php-config))} 
              {($ VSub_DollarName '$PHP_CONFIG')}
            )
            (C {(ln)} {(-sfn)} {(DQ (/usr/local/php-) (${ VSub_Name VERSION) (-bc/bin/phpize))} 
              {($ VSub_DollarName '$PHPIZE')}
            )
          ]
        )
    )
    (command.FuncDef
      name: build_php5.5
      body: 
        (command.BraceGroup
          children: [
            (C {(use_php)} {(5.5)})
            (C {(rm)} {(-rf)} {(vendor)})
            (C {(cp)} {(-r)} {(/usr/local/vendor-5.5)} {(vendor)})
            (C {(./vendor/bin/phpunit)})
          ]
        )
    )
    (command.FuncDef
      name: build_php5.5_c
      body: 
        (command.BraceGroup
          children: [
            (C {(use_php)} {(5.5)})
            (command.AndOr
              ops: [Op_DAmp Op_DAmp]
              children: [(C {(cd)} {(php/tests)}) (C {(/bin/bash)} {(./test.sh)}) (C {(cd)} {(../..)})]
            )
          ]
        )
    )
    (command.FuncDef
      name: build_php5.5_zts_c
      body: 
        (command.BraceGroup
          children: [
            (C {(use_php_zts)} {(5.5)})
            (C {(wget)} {(https) (Lit_Other ':') (//phar.phpunit.de/phpunit-old.phar)} {(-O)} 
              {(/usr/bin/phpunit)}
            )
            (command.AndOr
              ops: [Op_DAmp Op_DAmp]
              children: [(C {(cd)} {(php/tests)}) (C {(/bin/bash)} {(./test.sh)}) (C {(cd)} {(../..)})]
            )
          ]
        )
    )
    (command.FuncDef
      name: build_php5.5_32
      body: 
        (command.BraceGroup
          children: [
            (C {(use_php_bc)} {(5.5)})
            (C {(rm)} {(-rf)} {(vendor)})
            (C {(cp)} {(-r)} {(/usr/local/vendor-5.5)} {(vendor)})
            (C {(./vendor/bin/phpunit)})
          ]
        )
    )
    (command.FuncDef
      name: build_php5.6
      body: 
        (command.BraceGroup
          children: [
            (C {(use_php)} {(5.6)})
            (C {(rm)} {(-rf)} {(vendor)})
            (C {(cp)} {(-r)} {(/usr/local/vendor-5.6)} {(vendor)})
            (C {(./vendor/bin/phpunit)})
          ]
        )
    )
    (command.FuncDef
      name: build_php5.6_c
      body: 
        (command.BraceGroup
          children: [
            (C {(use_php)} {(5.6)})
            (command.AndOr
              ops: [Op_DAmp Op_DAmp]
              children: [(C {(cd)} {(php/tests)}) (C {(/bin/bash)} {(./test.sh)}) (C {(cd)} {(../..)})]
            )
          ]
        )
    )
    (command.FuncDef
      name: build_php5.6_mac
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {(curl)} {(-s)} {(https) (Lit_Other ':') (//php-osx.liip.ch/install.sh)})
                (C {(bash)} {(-s)} {(5.6)})
              ]
              negated: F
            )
            (C {(export)} 
              {(Lit_VarLike 'PATH=') 
                (DQ ('/usr/local/php5-5.6.25-20160831-101628/bin:') ($ VSub_DollarName '$PATH'))
              }
            )
            (C {(curl)} {(https) (Lit_Other ':') (//phar.phpunit.de/phpunit.phar)} {(-L)} {(-o)} 
              {(phpunit.phar)}
            )
            (C {(chmod)} {(Lit_Other '+') (x)} {(phpunit.phar)})
            (C {(sudo)} {(mv)} {(phpunit.phar)} {(/usr/local/bin/phpunit)})
            (command.SimpleCommand
              words: [{(echo)} {(DQ ('#! /bin/bash'))}]
              redirects: [(redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(valgrind)})]
            )
            (C {(chmod)} {(ug) (Lit_Other '+') (x)} {(valgrind)})
            (C {(sudo)} {(mv)} {(valgrind)} {(/usr/local/bin/valgrind)})
            (command.AndOr
              ops: [Op_DAmp Op_DAmp]
              children: [(C {(cd)} {(php/tests)}) (C {(/bin/bash)} {(./test.sh)}) (C {(cd)} {(../..)})]
            )
          ]
        )
    )
    (command.FuncDef
      name: build_php7.0
      body: 
        (command.BraceGroup
          children: [
            (C {(use_php)} {(7.0)})
            (C {(rm)} {(-rf)} {(vendor)})
            (C {(cp)} {(-r)} {(/usr/local/vendor-7.0)} {(vendor)})
            (C {(./vendor/bin/phpunit)})
          ]
        )
    )
    (command.FuncDef
      name: build_php7.0_c
      body: 
        (command.BraceGroup
          children: [
            (C {(use_php)} {(7.0)})
            (command.AndOr
              ops: [Op_DAmp Op_DAmp]
              children: [(C {(cd)} {(php/tests)}) (C {(/bin/bash)} {(./test.sh)}) (C {(cd)} {(../..)})]
            )
          ]
        )
    )
    (command.FuncDef
      name: build_php_all
      body: 
        (command.BraceGroup
          children: [
            (C {(build_php5.5)})
            (C {(build_php5.6)})
            (C {(build_php7.0)})
            (C {(build_php5.5_c)})
            (C {(build_php5.6_c)})
            (C {(build_php5.5_zts_c)})
          ]
        )
    )
    (command.FuncDef
      name: build_php_all_32
      body: (command.BraceGroup children:[(C {(build_php5.5_32)})])
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(Lit_Other '[')} {(DQ ($ VSub_Pound '$#'))} {(-ne)} {(1)} {(Lit_Other ']')})
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (C {(echo)} 
              {
                (DQ ('\n') ('Usage: ') ($ VSub_Number '$0') (' { cpp |\n') 
                  ('            cpp_distcheck |\n') ('            csharp |\n') ('            java_jdk7 |\n') ('            java_oracle7 |\n') 
                  ('            java_compatibility |\n') ('            javanano_jdk7 |\n') ('            javanano_oracle7 |\n') 
                  ('            objectivec_ios |\n') ('            objectivec_ios_debug |\n') ('            objectivec_ios_release |\n') 
                  ('            objectivec_osx |\n') ('            objectivec_cocoapods_integration |\n') ('            python |\n') 
                  ('            python_cpp |\n') ('            ruby21 |\n') ('            ruby22 |\n') ('            jruby |\n') 
                  ('            ruby_all |\n') ('            php5.5   |\n') ('            php5.5_c |\n') ('            php5.6   |\n') 
                  ('            php5.6_c |\n') ('            php7.0   |\n') ('            php7.0_c |\n') ('            php_all)\n')
                )
              }
            )
            (command.ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
          ]
        )
      ]
    )
    (C {(set)} {(-e)})
    (C {(set)} {(-x)})
    (C {(eval)} {(DQ (build_) ($ VSub_Number '$1'))})
  ]
)