(CommandList
  children: [
    (AndOr
      ops: [Op_DPipe]
      children: [
        (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$FORK'))} {(Lit_Other ']')})
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:TIMEOUT)
              op: Equal
              rhs: 
                {
                  (BracedVarSub
                    token: <VSub_Name TIMEOUT>
                    suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(180)})
                    spids: [25 29]
                  )
                }
              spids: [24]
            )
          ]
          spids: [24]
        )
      ]
    )
    (AndOr
      ops: [Op_DPipe]
      children: [
        (C {(.)} {(sources/utility_functions.sh)})
        (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
      ]
    )
    (FuncDef
      name: dotest
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$FORK'))} {(Lit_Other ']')})
                (C {(echo)} {(-n)} {(DQ ('Testing ') ($ VSub_Number '$1') (':'))})
              ]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(Lit_Other '[')} {(KW_Bang '!')} {(-z)} {(DQ ($ VSub_Name '$VERBOSE'))} 
                  {(Lit_Other ']')}
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:VERBOSITY)
                      op: Equal
                      rhs: {(DQ ('tee >(cat >&2) |'))}
                      spids: [89]
                    )
                  ]
                  spids: [89]
                )
              ]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:RESULT)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (Pipeline
                                  children: [
                                    (SimpleCommand
                                      words: [{(more/smoketest.sh)} {(DQ ($ VSub_Number '$1'))}]
                                      redirects: [(Redir op:<Redir_GreatAnd '2>&'> fd:2 arg_word:{(1)})]
                                    )
                                    (C {(eval)} 
                                      {(DQ ($ VSub_Name '$VERBOSITY') (" grep 'Hello world!'"))}
                                    )
                                  ]
                                  negated: F
                                )
                              ]
                            )
                          left_token: <Left_CommandSub '$('>
                          spids: [97 115]
                        )
                      )
                    }
                  spids: [95]
                )
              ]
              spids: [95]
            )
            (AndOr
              ops: [Op_DAmp Op_DPipe]
              children: [
                (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$RESULT'))} {(Lit_Other ']')})
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:RESULT)
                      op: Equal
                      rhs: {(DQ (FAIL))}
                      spids: [131]
                    )
                  ]
                  spids: [131]
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:RESULT)
                      op: Equal
                      rhs: {(DQ (PASS))}
                      spids: [138]
                    )
                  ]
                  spids: [138]
                )
              ]
            )
            (AndOr
              ops: [Op_DAmp Op_DPipe]
              children: [
                (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$FORK'))} {(Lit_Other ']')})
                (C {(echo)} {(DQ ($ VSub_Name '$RESULT'))})
                (C {(echo)} {(DQ ('Testing ') ($ VSub_Number '$1') (':') ($ VSub_Name '$RESULT'))})
              ]
            )
            (SimpleCommand
              words: [{(rm)} {(-f)} {(build/system-image-) (DQ ($ VSub_Number '$1')) (/hdb.img)}]
              redirects: [(Redir op:<Redir_Great '2>'> fd:2 arg_word:{(/dev/null)})]
            )
          ]
          spids: [49]
        )
      spids: [43 48]
    )
    (ForEach
      iter_name: i
      iter_words: [
        {
          (CommandSubPart
            command_list: 
              (CommandList
                children: [
                  (Pipeline
                    children: [
                      (C {(ls)} {(-d)} {(sources/targets/) (Lit_Other '*')})
                      (C {(sed)} {(SQ <'s@.*/@@'>)})
                      (C {(grep)} {(-v)} {(DQ ('^hw-'))})
                    ]
                    negated: F
                  )
                ]
              )
            left_token: <Left_CommandSub '$('>
            spids: [203 228]
          )
        }
      ]
      do_arg_iter: F
      body: 
        (DoGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (C {(Lit_Other '[')} {(-e)} {(DQ (build/system-image-) ($ VSub_Name '$i'))} 
                      {(Lit_Other ']')}
                    )
                  ]
                  action: [(C {(maybe_fork)} {(DQ ('dotest ') ($ VSub_Name '$i'))})]
                  spids: [16777215 247]
                )
              ]
              else_action: [(C {(echo)} {(DQ ('Testing ') ($ VSub_Name '$i') (':NONE'))})]
              spids: [258 270]
            )
          ]
          spids: [230 272]
        )
      spids: [202 16777215]
    )
    (C {(wait)})
  ]
)