(command.CommandList
  children: [
    (command.AndOr
      ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
      children: [
        (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-z)} {(DQ ($ Id.VSub_Number '$2'))} 
          {(Id.Lit_RBracket ']')}
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:REBUILD)
              op: assign_op.Equal
              rhs: {(DQ ($ Id.VSub_Number '$2'))}
              spids: [77]
            )
          ]
        )
        (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-e)} {(DQ ($ Id.VSub_Number '$2')) (.sh)} 
          {(Id.Lit_RBracket ']')}
        )
        (C {(echo)} {(DQ ('no stage ') ($ Id.VSub_Number '$2'))})
        (command.ControlFlow
          token: (Token id:Id.ControlFlow_Exit val:exit span_id:109)
          arg_word: {(1)}
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.AndOr
              ops: [Id.Op_DPipe Id.Op_DPipe]
              children: [
                (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-lt)} {(1)} {(Id.Lit_RBracket ']')})
                (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-gt)} {(2)} {(Id.Lit_RBracket ']')})
                (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-e)} 
                  {(sources/targets/) (DQ ($ Id.VSub_Number '$1'))} {(Id.Lit_RBracket ']')}
                )
              ]
            )
          ]
          action: [
            (C {(echo)})
            (C {(echo)} {(DQ ('Usage: ') ($ Id.VSub_Number '$0') (' TARGET [REBUILD_FROM_STAGE]'))})
            (C {(echo)})
            (C {(echo)} {(DQ ('Supported architectures:'))})
            (C {(ls)} {(sources/targets)})
            (C {(echo)})
            (C {(echo)} {(DQ ('Build stages:'))})
            (command.Pipeline
              children: [
                (C {(sed)} {(-n)} 
                  {
                    (SQ 
                      (Token
                        id: Id.Lit_Chars
                        val: 's/#.*//;s@.*[.]/\\([^.]*\\)[.]sh.*@\\1@p'
                        span_id: 198
                      )
                    )
                  } {(DQ ($ Id.VSub_Number '$0'))}
                )
                (C {(uniq)})
                (C {(xargs)} {(echo)})
              ]
              negated: F
            )
            (C {(echo)})
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Exit val:exit span_id:220)
              arg_word: {(1)}
            )
          ]
          spids: [114 153]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ARCH)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_Number '$1'))}
          spids: [226]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {(Id.Lit_LBracket '[')} {(-e)} {(config)} {(Id.Lit_RBracket ']')})
        (C {(source)} {(config)})
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$BUILD'))} {(Id.Lit_RBracket ']')})
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:BUILD)
              op: assign_op.Equal
              rhs: {(DQ (build))}
              spids: [270]
            )
          ]
        )
      ]
    )
    (command.ShFunction
      name: not_already
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$AGAIN'))} 
                  {(Id.Lit_Equals '=') (Id.Lit_Equals '=')} {(DQ ($ Id.VSub_Number '$1'))} {(Id.Lit_RBracket ']')}
                )
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:314)
                  arg_word: {(0)}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$REBUILD'))} 
                  {(Id.Lit_Equals '=') (Id.Lit_Equals '=')} {(DQ ($ Id.VSub_Number '$1'))} {(Id.Lit_RBracket ']')}
                )
                (C {(zap)} {(DQ ($ Id.VSub_Number '$1'))})
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (C {(Id.Lit_LBracket '[')} {(-f)} 
                      {
                        (DQ ($ Id.VSub_DollarName '$BUILD') (/) ($ Id.VSub_Number '$1') (-) 
                          ($ Id.VSub_DollarName '$ARCH') (.tar.gz)
                        )
                      } {(Id.Lit_RBracket ']')}
                    )
                  ]
                  action: [
                    (C {(echo)} 
                      {
                        (DQ ('=== Skipping ') ($ Id.VSub_Number '$1') (-) ($ Id.VSub_DollarName '$ARCH') 
                          (' (already there)')
                        )
                      }
                    )
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:376)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [344 362]
                )
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:385)
              arg_word: {(0)}
            )
          ]
        )
    )
    (command.ShFunction
      name: zap
      body: 
        (command.BraceGroup
          children: [
            (command.ForEach
              iter_name: i
              iter_words: [{(DQ ($ Id.VSub_At '$@'))}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (C {(rm)} {(-f)} 
                      {
                        (DQ ($ Id.VSub_DollarName '$BUILD') (/) ($ Id.VSub_DollarName '$i') (-) 
                          ($ Id.VSub_DollarName '$ARCH') (.tar.gz)
                        )
                      }
                    )
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: do_stage
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:STAGE)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$1'))}
                  spids: [442]
                )
              ]
            )
            (C {(shift)})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$AFTER'))} 
                      {(Id.Lit_Equals '=') (Id.Lit_Equals '=')} {(DQ ($ Id.VSub_DollarName '$STAGE'))} {(Id.Lit_RBracket ']')}
                    )
                  ]
                  action: [(C {(unset)} {(AFTER)})]
                  spids: [452 470]
                )
              ]
              else_action: [
                (command.AndOr
                  ops: [Id.Op_DPipe]
                  children: [
                    (command.TimeBlock
                      pipeline: 
                        (C {(./) (DQ ($ Id.VSub_DollarName '$STAGE')) (.sh)} {(DQ ($ Id.VSub_At '$@'))})
                    )
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:495)
                      arg_word: {(1)}
                    )
                  ]
                )
              ]
            )
          ]
        )
    )
    (C {(do_stage)} {(download)})
    (command.If
      arms: [
        (if_arm
          cond: [
            (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$NO_HOST_TOOLS'))} 
              {(Id.Lit_RBracket ']')}
            )
          ]
          action: [(C {(do_stage)} {(host-tools)})]
          spids: [537 549]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$MY_CROSS_PATH'))} 
                  {(Id.Lit_RBracket ']')}
                )
                (C {(not_already)} {(simple-cross-compiler)})
              ]
            )
          ]
          action: [
            (C {(zap)} {(root-filesystem)} {(cross-compiler)} {(native-compiler)})
            (C {(do_stage)} {(simple-cross-compiler)} {(DQ ($ Id.VSub_DollarName '$ARCH'))})
          ]
          spids: [563 581]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$MY_CROSS_PATH'))} 
                  {(Id.Lit_RBracket ']')}
                )
                (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-z)} 
                  {(DQ ($ Id.VSub_DollarName '$CROSS_COMPILER_HOST'))} {(Id.Lit_RBracket ']')}
                )
                (C {(not_already)} {(cross-compiler)})
              ]
            )
          ]
          action: [
            (C {(zap)} {(root-filesystem)} {(native-compiler)})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Simple
                      words: [{(not_already)} {(simple-cross-compiler)}]
                      more_env: [
                        (env_pair
                          name: ARCH
                          val: {(DQ ($ Id.VSub_DollarName '$CROSS_COMPILER_HOST'))}
                          spids: [671]
                        )
                      ]
                    )
                  ]
                  action: [
                    (C {(do_stage)} {(simple-cross-compiler)} 
                      {(DQ ($ Id.VSub_DollarName '$CROSS_COMPILER_HOST'))}
                    )
                  ]
                  spids: [669 681]
                )
              ]
            )
            (C {(do_stage)} {(cross-compiler)} {(DQ ($ Id.VSub_DollarName '$ARCH'))})
          ]
          spids: [620 653]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Pipeline
              children: [
                (C {(grep)} {(-q)} {(Id.Lit_VarLike 'KARCH=')} 
                  {(sources/targets/) (DQ ($ Id.VSub_DollarName '$ARCH'))}
                )
              ]
              negated: T
            )
          ]
          action: [
            (C {(echo)} {(no)} {(KARCH)} {(Id.KW_In in)} {($ Id.VSub_Number '$1') (Id.Lit_Comma ',')} 
              {(stopping)} {(here)}
            )
          ]
          spids: [708 723]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [(C {(not_already)} {(root-filesystem)})]
          action: [(C {(do_stage)} {(root-filesystem)} {(DQ ($ Id.VSub_DollarName '$ARCH'))})]
          spids: [748 754]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$MY_CROSS_PATH'))} 
                  {(Id.Lit_RBracket ']')}
                )
                (command.Pipeline
                  children: [
                    (C {(grep)} {(-q)} {(ELF2FLT)} 
                      {(sources/targets/) (DQ ($ Id.VSub_DollarName '$ARCH'))}
                    )
                  ]
                  negated: T
                )
                (C {(not_already)} {(native-compiler)})
              ]
            )
          ]
          action: [(C {(do_stage)} {(native-compiler)} {(DQ ($ Id.VSub_DollarName '$ARCH'))})]
          spids: [779 813]
        )
      ]
    )
    (C {(do_stage)} {(system-image)} {(DQ ($ Id.VSub_DollarName '$ARCH'))})
  ]
)