(command.CommandList
  children: [
    (C {<INCLUDE>} {<unique-port.sh>})
    (C {<INCLUDE>} {<make-hdb.sh>})
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (C {<source>} {<'./run-emulator.sh'>} {<--norun>})
        (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$QEMU_MEMORY'))} 
          {<Id.Lit_RBracket ']'>}
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:QEMU_MEMORY)
              op: assign_op.Equal
              rhs: {<256>}
              spids: [78]
            )
          ]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:QEMU_EXTRA)
          op: assign_op.Equal
          rhs: 
            {
              (DQ <'-m '> ($ Id.VSub_DollarName '$QEMU_MEMORY') <' '> 
                ($ Id.VSub_DollarName '$QEMU_EXTRA')
              )
            }
          spids: [81]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$HDA'))} {<Id.Lit_RBracket ']'>})
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:HDA)
              op: assign_op.Equal
              rhs: {<toolchain.sqf>}
              spids: [102]
            )
          ]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$HDBMEGS'))} 
                  {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <0>)} {<Id.Lit_RBracket ']'>}
                )
              ]
            )
          action: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$HDB'))} 
                  {<Id.Lit_RBracket ']'>}
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:HDB)
                      op: assign_op.Equal
                      rhs: {<hdb.img>}
                      spids: [142]
                    )
                  ]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-e>} 
                          {(DQ ($ Id.VSub_DollarName '$HDB'))} {<Id.Lit_RBracket ']'>}
                        )
                      ]
                    )
                  action: [
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$HDBMEGS'))} 
                          {<Id.Lit_RBracket ']'>}
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:HDBMEGS)
                              op: assign_op.Equal
                              rhs: {<2048>}
                              spids: [186]
                            )
                          ]
                        )
                      ]
                    )
                    (C {<make_hdb>})
                  ]
                  spids: [146 161]
                )
              ]
            )
          ]
          spids: [110 127]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:DISTCC_PATH)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  child: 
                    (command.Pipeline
                      children: [
                        (command.Simple
                          words: [{<which>} {($ Id.VSub_DollarName '$ARCH') <-cc>}]
                          redirects: [
                            (redir
                              op: <Id.Redir_Great '2>'>
                              loc: (redir_loc.Fd fd:2)
                              arg: {<'/dev/null'>}
                            )
                          ]
                          do_fork: T
                        )
                        (C {<sed>} {(SQ <'s@\\(.*\\)/.*@\\1@'>)})
                      ]
                      negated: F
                    )
                )
              )
            }
          spids: [210]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$DISTCC_PATH'))} 
                  {<Id.Lit_RBracket ']'>}
                )
              ]
            )
          action: [
            (command.ForEach
              iter_name: i
              iter_words: [
                (word.BracedTree
                  parts: [
                    (word_part.BracedTuple
                      words: [
                        {
                          (DQ (command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<pwd>})) 
                            <'/'>
                          )
                        }
                        {
                          (DQ (command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<pwd>})) 
                            <'/../'>
                          )
                        }
                        {(DQ ($ Id.VSub_DollarName '$HOME')) <'/'>}
                      ]
                    )
                    (word_part.BracedTuple words:[{} {<simple->}])
                    <cross-compiler->
                    (DQ ($ Id.VSub_DollarName '$ARCH'))
                    <'/bin'>
                  ]
                )
              ]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.AndOr
                      ops: [Id.Op_DAmp Id.Op_DAmp]
                      children: [
                        (C {<Id.Lit_LBracket '['>} {<-f>} 
                          {
                            (DQ ($ Id.VSub_DollarName '$i') <'/'> ($ Id.VSub_DollarName '$ARCH') <-cc>)
                          } {<Id.Lit_RBracket ']'>}
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:DISTCC_PATH)
                              op: assign_op.Equal
                              rhs: {(DQ ($ Id.VSub_DollarName '$i'))}
                              spids: [302]
                            )
                          ]
                        )
                        (command.ControlFlow
                          token: <Id.ControlFlow_Break break>
                        )
                      ]
                    )
                  ]
                )
            )
          ]
          spids: [232 244]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp Id.Op_DAmp]
      children: [
        (C {<Id.Lit_LBracket '['>} {<-z>} 
          {(DQ (command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<which>} {<distccd>})))} {<Id.Lit_RBracket ']'>}
        )
        (C {<Id.Lit_LBracket '['>} {<-e>} {<'../host/distccd'>} {<Id.Lit_RBracket ']'>})
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:PATH)
              op: assign_op.Equal
              rhs: 
                {
                  (DQ ($ Id.VSub_DollarName '$PATH') <':'> 
                    (command_sub
                      left_token: <Id.Left_DollarParen '$('>
                      child: (C {<pwd>})
                    ) <'/../host'>
                  )
                }
              spids: [344]
            )
          ]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (C {<Id.Lit_LBracket '['>} {<-z>} 
                  {
                    (DQ 
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: (C {<which>} {<distccd>})
                      )
                    )
                  } {<Id.Lit_RBracket ']'>}
                )
              ]
            )
          action: [(C {<echo>} {(SQ <'No distccd in $PATH, acceleration disabled.'>)})]
          spids: [355 371]
        )
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$DISTCC_PATH'))} 
                  {<Id.Lit_RBracket ']'>}
                )
              ]
            )
          action: [
            (C {<echo>} 
              {(DQ <'No '> ($ Id.VSub_DollarName '$ARCH') <'-cc in '>) (SQ <'$PATH'>) 
                (DQ <', acceleration disabled.'>)
              }
            )
          ]
          spids: [380 392]
        )
      ]
      else_action: [
        (command.AndOr
          ops: [Id.Op_DAmp]
          children: [
            (C {<mkdir>} {<-p>} {(DQ <distcc_links>)})
            (command.ForEach
              iter_name: i
              iter_words: [
                {
                  (command_sub
                    left_token: <Id.Left_DollarParen '$('>
                    child: 
                      (command.CommandList
                        children: [
                          (command.Sentence
                            child: (C {<cd>} {(DQ ($ Id.VSub_DollarName '$DISTCC_PATH'))})
                            terminator: <Id.Op_Semi _>
                          )
                          (command.Pipeline
                            children: [
                              (C {<ls>} {($ Id.VSub_DollarName '$ARCH') <-> <Id.Lit_Star '*'>})
                              (C {<sed>} {(DQ <'s/^'> ($ Id.VSub_DollarName '$ARCH') <'-//'>)})
                            ]
                            negated: F
                          )
                        ]
                      )
                  )
                }
              ]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (C {<ln>} {<-sf>} 
                      {
                        (DQ ($ Id.VSub_DollarName '$DISTCC_PATH') <'/'> ($ Id.VSub_DollarName '$ARCH') 
                          <-> ($ Id.VSub_DollarName '$i')
                        )
                      } {(DQ <'distcc_links/'> ($ Id.VSub_DollarName '$i'))}
                    )
                  ]
                )
            )
          ]
        )
        (command.If
          arms: [
            (if_arm
              cond: 
                (condition.Shell
                  commands: [
                    (C {<Id.Lit_LBracket '['>} {<-e>} 
                      {
                        (DQ ($ Id.VSub_DollarName '$DISTCC_PATH') <'/'> ($ Id.VSub_DollarName '$ARCH') 
                          <-rawgcc>
                        )
                      } {<Id.Lit_RBracket ']'>}
                    )
                  ]
                )
              action: [
                (command.ForEach
                  iter_name: i
                  iter_words: [
                    {<cc>}
                    {<gcc>}
                    {<g> <Id.Lit_Other '+'> <Id.Lit_Other '+'>}
                    {<c> <Id.Lit_Other '+'> <Id.Lit_Other '+'>}
                  ]
                  do_arg_iter: F
                  body: 
                    (command.DoGroup
                      children: [
                        (C {<ln>} {<-sf>} 
                          {
                            (DQ ($ Id.VSub_DollarName '$DISTCC_PATH') <'/'> 
                              ($ Id.VSub_DollarName '$ARCH') <-rawgcc>
                            )
                          } {<'distcc_links/'> ($ Id.VSub_DollarName '$i')}
                        )
                      ]
                    )
                )
              ]
              spids: [490 506]
            )
          ]
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:PORT)
              op: assign_op.Equal
              rhs: {(command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<unique_port>}))}
              spids: [571]
            )
          ]
        )
        (command.If
          arms: [
            (if_arm
              cond: 
                (condition.Shell
                  commands: [
                    (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$CPUS'))} 
                      {<Id.Lit_RBracket ']'>}
                    )
                  ]
                )
              action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:CPUS)
                      op: assign_op.Equal
                      rhs: {<3>}
                      spids: [621]
                    )
                  ]
                )
              ]
              spids: [577 590]
            )
          ]
        )
        (command.Sentence
          child: 
            (command.Simple
              words: [
                {
                  (DQ 
                    (command_sub
                      left_token: <Id.Left_DollarParen '$('>
                      child: (C {<which>} {<distccd>})
                    )
                  )
                }
                {<--no-detach>}
                {<--daemon>}
                {<--listen>}
                {<127.0.0.1>}
                {<-a>}
                {<127.0.0.1>}
                {<-p>}
                {($ Id.VSub_DollarName '$PORT')}
                {<--jobs>}
                {($ Id.VSub_DollarName '$CPUS')}
                {<--log-stderr>}
                {<--verbose>}
              ]
              redirects: [(redir op:<Id.Redir_Great '2>'> loc:(redir_loc.Fd fd:2) arg:{<distccd.log>})]
              more_env: [
                (env_pair
                  name: PATH
                  val: 
                    {
                      (DQ (command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<pwd>})) 
                        <'/distcc_links'>
                      )
                    }
                  spids: [628]
                )
              ]
              do_fork: T
            )
          terminator: <Id.Op_Amp _>
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:DISTCC_PID)
              op: assign_op.Equal
              rhs: {(DQ (command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<jobs>} {<-p>})))}
              spids: [679]
            )
          ]
        )
        (C {<trap>} {(DQ <'kill '> ($ Id.VSub_DollarName '$DISTCC_PID'))} {<EXIT>})
        (C {<disown>} {($ Id.VSub_DollarName '$DISTCC_PID')})
        (C {<echo>} 
          {
            (DQ <'distccd pid '> ($ Id.VSub_DollarName '$DISTCC_PID') <' port '> 
              ($ Id.VSub_DollarName '$PORT')
            )
          }
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:KERNEL_EXTRA)
              op: assign_op.Equal
              rhs: 
                {
                  (DQ <'DISTCC_HOSTS=10.0.2.2:'> ($ Id.VSub_DollarName '$PORT') <'/'> 
                    ($ Id.VSub_DollarName '$CPUS') <' '> ($ Id.VSub_DollarName '$KERNEL_EXTRA')
                  )
                }
              spids: [729]
            )
          ]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$CPUS'))} {<Id.Lit_RBracket ']'>})
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:CPUS)
              op: assign_op.Equal
              rhs: {<1>}
              spids: [754]
            )
          ]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:KERNEL_EXTRA)
          op: assign_op.Equal
          rhs: 
            {
              (DQ <'CPUS='> ($ Id.VSub_DollarName '$CPUS') <' '> ($ Id.VSub_DollarName '$KERNEL_EXTRA'))
            }
          spids: [757]
        )
      ]
    )
    (C {<trap>} {(DQ <'pkill -P'> ($ Id.VSub_Dollar '$$'))} {<EXIT>})
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-z>} {(DQ ($ Id.VSub_DollarName '$HDC'))} 
          {<Id.Lit_RBracket ']'>}
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:QEMU_EXTRA)
              op: assign_op.Equal
              rhs: 
                {
                  (DQ <'-hdc '> ($ Id.VSub_DollarName '$HDC') <' '> ($ Id.VSub_DollarName '$QEMU_EXTRA'))
                }
              spids: [798]
            )
          ]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-z>} {(DQ ($ Id.VSub_DollarName '$HDB'))} 
          {<Id.Lit_RBracket ']'>}
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:QEMU_EXTRA)
              op: assign_op.Equal
              rhs: 
                {
                  (DQ <'-hdb '> ($ Id.VSub_DollarName '$HDB') <' '> ($ Id.VSub_DollarName '$QEMU_EXTRA'))
                }
              spids: [820]
            )
          ]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-z>} {(DQ ($ Id.VSub_DollarName '$HDA'))} 
          {<Id.Lit_RBracket ']'>}
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:QEMU_EXTRA)
              op: assign_op.Equal
              rhs: 
                {
                  (DQ <'-hda '> ($ Id.VSub_DollarName '$HDA') <' '> ($ Id.VSub_DollarName '$QEMU_EXTRA'))
                }
              spids: [842]
            )
          ]
        )
      ]
    )
    (C {<run_emulator>})
  ]
)