(command.CommandList
  children: [
    (command.ShAssignment
      left: <Id.Lit_VarLike 'USAGE='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'USAGE='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'USAGE='> name:USAGE)
          op: assign_op.Equal
          rhs: {(SQ <'[help|start|bad|good|new|old|terms|skip|next|reset|visualize|replay|log|run]'>)}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'LONG_USAGE='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'LONG_USAGE='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'LONG_USAGE='> name:LONG_USAGE)
          op: assign_op.Equal
          rhs: 
            {
              (SQ <'git bisect help\n'> <'\tprint this long help message.\n'> 
                <'git bisect start [--term-{old,good}=<term> --term-{new,bad}=<term>]\n'> <'\t\t [--no-checkout] [<bad> [<good>...]] [--] [<pathspec>...]\n'> 
                <'\treset bisect state and start bisection.\n'> <'git bisect (bad|new) [<rev>]\n'> <'\tmark <rev> a known-bad revision/\n'> 
                <'\t\ta revision after change in a given property.\n'> <'git bisect (good|old) [<rev>...]\n'> <'\tmark <rev>... known-good revisions/\n'> 
                <'\t\trevisions before change in a given property.\n'> <'git bisect terms [--term-good | --term-bad]\n'> 
                <'\tshow the terms used for old and new commits (default: bad, good)\n'> <'git bisect skip [(<rev>|<range>)...]\n'> <'\tmark <rev>... untestable revisions.\n'> 
                <'git bisect next\n'> <'\tfind next bisection to test and check it out.\n'> <'git bisect reset [<commit>]\n'> 
                <'\tfinish bisection search and go back to commit.\n'> <'git bisect visualize\n'> <'\tshow bisect status in gitk.\n'> <'git bisect replay <logfile>\n'> 
                <'\treplay bisection log.\n'> <'git bisect log\n'> <'\tshow bisect log.\n'> <'git bisect run <cmd>...\n'> 
                <'\tuse <cmd>... to automatically bisect.\n'> <'\n'> <'Please use "git help bisect" to get the full man page.'>
              )
            }
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'OPTIONS_SPEC='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'OPTIONS_SPEC='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OPTIONS_SPEC='> name:OPTIONS_SPEC)
          op: assign_op.Equal
          rhs: (rhs_word__Empty)
        )
      ]
      redirects: []
    )
    (command.Simple
      blame_tok: <.>
      more_env: []
      words: [{<.>} {<git-sh-setup>}]
      redirects: []
      do_fork: T
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike '_x40='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike '_x40='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike '_x40='> name:_x40)
          op: assign_op.Equal
          rhs: {(SQ <'[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]'>)}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike '_x40='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike '_x40='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike '_x40='> name:_x40)
          op: assign_op.Equal
          rhs: 
            {
              (DQ ($ Id.VSub_DollarName _x40) ($ Id.VSub_DollarName _x40) ($ Id.VSub_DollarName _x40) 
                ($ Id.VSub_DollarName _x40) ($ Id.VSub_DollarName _x40) ($ Id.VSub_DollarName _x40) ($ Id.VSub_DollarName _x40) 
                ($ Id.VSub_DollarName _x40)
              )
            }
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'TERM_BAD='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'TERM_BAD='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TERM_BAD='> name:TERM_BAD)
          op: assign_op.Equal
          rhs: {<bad>}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'TERM_GOOD='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'TERM_GOOD='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TERM_GOOD='> name:TERM_GOOD)
          op: assign_op.Equal
          rhs: {<good>}
        )
      ]
      redirects: []
    )
    (command.ShFunction
      name_tok: <bisect_head>
      name: bisect_head
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Simple
                          blame_tok: <test>
                          more_env: []
                          words: [{<test>} {<-f>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_HEAD'>)}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {<BISECT_HEAD>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [81 93]
                )
              ]
              else_kw: <Id.KW_Else else>
              else_action: [
                (command.Simple
                  blame_tok: <echo>
                  more_env: []
                  words: [{<echo>} {<HEAD>}]
                  redirects: []
                  do_fork: T
                )
              ]
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <bisect_autostart>
      name: bisect_autostart
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {<-s>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_START'>)}]
                  redirects: []
                  do_fork: T
                )
                (BraceGroup
                  left: <Id.Lit_LBrace '{'>
                  children: [
                    (command.Simple
                      blame_tok: <gettextln>
                      more_env: []
                      words: [
                        {<gettextln>}
                        {
                          (DQ <'You need to start by '> 
                            (word_part.EscapedLiteral
                              token: <Id.Lit_EscapedChar '\\"'>
                              ch: '"'
                            ) <'git bisect start'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"')
                          )
                        }
                      ]
                      redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
                      do_fork: T
                    )
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Simple
                                  blame_tok: <test>
                                  more_env: []
                                  words: [{<test>} {<-t>} {<0>}]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <gettext>
                              more_env: []
                              words: [{<gettext>} {(DQ <'Do you want me to do it for you [Y/n]? '>)}]
                              redirects: [
                                (Redir
                                  op: <Id.Redir_GreatAnd '>&'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {<2>}
                                )
                              ]
                              do_fork: T
                            )
                            (command.Simple
                              blame_tok: <read>
                              more_env: []
                              words: [{<read>} {<yesno>}]
                              redirects: []
                              do_fork: T
                            )
                            (command.Case
                              case_kw: <Id.KW_Case case>
                              to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName yesno))})
                              arms_start: <Id.KW_In in>
                              arms: [
                                (CaseArm
                                  left: <Id.Lit_LBracket '['>
                                  pattern: 
                                    (pat.Words
                                      words: [
                                        {<Id.Lit_LBracket '['> <Nn> <Id.Lit_RBracket ']'> 
                                          <Id.Lit_Star '*'>
                                        }
                                      ]
                                    )
                                  middle: <Id.Right_CasePat _>
                                  action: [(command.ControlFlow keyword:<Id.ControlFlow_Exit exit>)]
                                  right: <Id.Op_DSemi _>
                                )
                              ]
                              arms_end: <Id.KW_Esac esac>
                              redirects: []
                            )
                            (command.Simple
                              blame_tok: <bisect_start>
                              more_env: []
                              words: [{<bisect_start>}]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          spids: [148 157]
                        )
                      ]
                      else_kw: <Id.KW_Else else>
                      else_action: [
                        (command.ControlFlow
                          keyword: <Id.ControlFlow_Exit exit>
                          arg_word: {<1>}
                        )
                      ]
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  redirects: []
                  right: <Id.Lit_RBrace '}'>
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <bisect_start>
      name: bisect_start
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'has_double_dash='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'has_double_dash='>
                  lhs: 
                    (sh_lhs_expr.Name
                      left: <Id.Lit_VarLike 'has_double_dash='>
                      name: has_double_dash
                    )
                  op: assign_op.Equal
                  rhs: {<0>}
                )
              ]
              redirects: []
            )
            (command.ForEach
              keyword: <Id.KW_For for>
              iter_names: [arg]
              iterable: (for_iter__Args)
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName arg))})
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <-->
                          pattern: (pat.Words words:[{<-->}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Sentence
                              child: 
                                (command.ShAssignment
                                  left: <Id.Lit_VarLike 'has_double_dash='>
                                  pairs: [
                                    (AssignPair
                                      left: <Id.Lit_VarLike 'has_double_dash='>
                                      lhs: 
                                        (sh_lhs_expr.Name
                                          left: <Id.Lit_VarLike 'has_double_dash='>
                                          name: has_double_dash
                                        )
                                      op: assign_op.Equal
                                      rhs: {<1>}
                                    )
                                  ]
                                  redirects: []
                                )
                              terminator: <Id.Op_Semi _>
                            )
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Break break>
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'orig_args='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'orig_args='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'orig_args='> name:orig_args)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (command.Simple
                            blame_tok: <git>
                            more_env: []
                            words: [{<git>} {<rev-parse>} {<--sq-quote>} {(DQ ($ Id.VSub_At '@'))}]
                            redirects: []
                            do_fork: T
                          )
                        right: <Id.Eof_RParen _>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'bad_seen='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'bad_seen='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'bad_seen='> name:bad_seen)
                  op: assign_op.Equal
                  rhs: {<0>}
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'eval='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'eval='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'eval='> name:eval)
                  op: assign_op.Equal
                  rhs: {(SQ )}
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'must_write_terms='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'must_write_terms='>
                  lhs: 
                    (sh_lhs_expr.Name
                      left: <Id.Lit_VarLike 'must_write_terms='>
                      name: must_write_terms
                    )
                  op: assign_op.Equal
                  rhs: {<0>}
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'revs='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'revs='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'revs='> name:revs)
                  op: assign_op.Equal
                  rhs: {(SQ )}
                )
              ]
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Simple
                          blame_tok: <test>
                          more_env: []
                          words: [
                            {<test>}
                            {
                              (DQ <z> 
                                (CommandSub
                                  left_token: <Id.Left_DollarParen '$('>
                                  child: 
                                    (command.Simple
                                      blame_tok: <git>
                                      more_env: []
                                      words: [{<git>} {<rev-parse>} {<--is-bare-repository>}]
                                      redirects: []
                                      do_fork: T
                                    )
                                  right: <Id.Eof_RParen _>
                                )
                              )
                            }
                            {<Id.KW_Bang '!'> <Id.Lit_Equals '='>}
                            {<zfalse>}
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'mode='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'mode='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'mode='> name:mode)
                          op: assign_op.Equal
                          rhs: {<--no-checkout>}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  spids: [318 339]
                )
              ]
              else_kw: <Id.KW_Else else>
              else_action: [
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'mode='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'mode='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'mode='> name:mode)
                      op: assign_op.Equal
                      rhs: {(SQ )}
                    )
                  ]
                  redirects: []
                )
              ]
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.WhileUntil
              keyword: <Id.KW_While while>
              cond: 
                (condition.Shell
                  commands: [
                    (command.Sentence
                      child: 
                        (command.Simple
                          blame_tok: <Id.Lit_LBracket '['>
                          more_env: []
                          words: [
                            {<Id.Lit_LBracket '['>}
                            {($ Id.VSub_Pound '#')}
                            {<-gt>}
                            {<0>}
                            {<Id.Lit_RBracket ']'>}
                          ]
                          redirects: []
                          do_fork: T
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                )
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'arg='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'arg='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'arg='> name:arg)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_Number 1))}
                        )
                      ]
                      redirects: []
                    )
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName arg))})
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <-->
                          pattern: (pat.Words words:[{<-->}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Simple
                              blame_tok: <shift>
                              more_env: []
                              words: [{<shift>}]
                              redirects: []
                              do_fork: T
                            )
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Break break>
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <--no-checkout>
                          pattern: (pat.Words words:[{<--no-checkout>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'mode='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'mode='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'mode='> name:mode)
                                  op: assign_op.Equal
                                  rhs: {<--no-checkout>}
                                )
                              ]
                              redirects: []
                            )
                            (command.Simple
                              blame_tok: <shift>
                              more_env: []
                              words: [{<shift>}]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <--term-good>
                          pattern: (pat.Words words:[{<--term-good>} {<--term-old>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Simple
                              blame_tok: <shift>
                              more_env: []
                              words: [{<shift>}]
                              redirects: []
                              do_fork: T
                            )
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'must_write_terms='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'must_write_terms='>
                                  lhs: 
                                    (sh_lhs_expr.Name
                                      left: <Id.Lit_VarLike 'must_write_terms='>
                                      name: must_write_terms
                                    )
                                  op: assign_op.Equal
                                  rhs: {<1>}
                                )
                              ]
                              redirects: []
                            )
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'TERM_GOOD='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'TERM_GOOD='>
                                  lhs: 
                                    (sh_lhs_expr.Name
                                      left: <Id.Lit_VarLike 'TERM_GOOD='>
                                      name: TERM_GOOD
                                    )
                                  op: assign_op.Equal
                                  rhs: {($ Id.VSub_Number 1)}
                                )
                              ]
                              redirects: []
                            )
                            (command.Simple
                              blame_tok: <shift>
                              more_env: []
                              words: [{<shift>}]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <--term-good>
                          pattern: 
                            (pat.Words
                              words: [
                                {<--term-good> <Id.Lit_Equals '='> <Id.Lit_Star '*'>}
                                {<--term-old> <Id.Lit_Equals '='> <Id.Lit_Star '*'>}
                              ]
                            )
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'must_write_terms='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'must_write_terms='>
                                  lhs: 
                                    (sh_lhs_expr.Name
                                      left: <Id.Lit_VarLike 'must_write_terms='>
                                      name: must_write_terms
                                    )
                                  op: assign_op.Equal
                                  rhs: {<1>}
                                )
                              ]
                              redirects: []
                            )
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'TERM_GOOD='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'TERM_GOOD='>
                                  lhs: 
                                    (sh_lhs_expr.Name
                                      left: <Id.Lit_VarLike 'TERM_GOOD='>
                                      name: TERM_GOOD
                                    )
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (BracedVarSub
                                        left: <Id.Left_DollarBrace '${'>
                                        token: <Id.VSub_Number 1>
                                        var_name: 1
                                        suffix_op: 
                                          (suffix_op.Unary
                                            op: <Id.VOp1_Pound '#'>
                                            arg_word: {<Id.Lit_Other '*'> <'='>}
                                          )
                                        right: <Id.Right_DollarBrace '}'>
                                      )
                                    }
                                )
                              ]
                              redirects: []
                            )
                            (command.Simple
                              blame_tok: <shift>
                              more_env: []
                              words: [{<shift>}]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <--term-bad>
                          pattern: (pat.Words words:[{<--term-bad>} {<--term-new>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Simple
                              blame_tok: <shift>
                              more_env: []
                              words: [{<shift>}]
                              redirects: []
                              do_fork: T
                            )
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'must_write_terms='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'must_write_terms='>
                                  lhs: 
                                    (sh_lhs_expr.Name
                                      left: <Id.Lit_VarLike 'must_write_terms='>
                                      name: must_write_terms
                                    )
                                  op: assign_op.Equal
                                  rhs: {<1>}
                                )
                              ]
                              redirects: []
                            )
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'TERM_BAD='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'TERM_BAD='>
                                  lhs: 
                                    (sh_lhs_expr.Name
                                      left: <Id.Lit_VarLike 'TERM_BAD='>
                                      name: TERM_BAD
                                    )
                                  op: assign_op.Equal
                                  rhs: {($ Id.VSub_Number 1)}
                                )
                              ]
                              redirects: []
                            )
                            (command.Simple
                              blame_tok: <shift>
                              more_env: []
                              words: [{<shift>}]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <--term-bad>
                          pattern: 
                            (pat.Words
                              words: [
                                {<--term-bad> <Id.Lit_Equals '='> <Id.Lit_Star '*'>}
                                {<--term-new> <Id.Lit_Equals '='> <Id.Lit_Star '*'>}
                              ]
                            )
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'must_write_terms='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'must_write_terms='>
                                  lhs: 
                                    (sh_lhs_expr.Name
                                      left: <Id.Lit_VarLike 'must_write_terms='>
                                      name: must_write_terms
                                    )
                                  op: assign_op.Equal
                                  rhs: {<1>}
                                )
                              ]
                              redirects: []
                            )
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'TERM_BAD='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'TERM_BAD='>
                                  lhs: 
                                    (sh_lhs_expr.Name
                                      left: <Id.Lit_VarLike 'TERM_BAD='>
                                      name: TERM_BAD
                                    )
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (BracedVarSub
                                        left: <Id.Left_DollarBrace '${'>
                                        token: <Id.VSub_Number 1>
                                        var_name: 1
                                        suffix_op: 
                                          (suffix_op.Unary
                                            op: <Id.VOp1_Pound '#'>
                                            arg_word: {<Id.Lit_Other '*'> <'='>}
                                          )
                                        right: <Id.Right_DollarBrace '}'>
                                      )
                                    }
                                )
                              ]
                              redirects: []
                            )
                            (command.Simple
                              blame_tok: <shift>
                              more_env: []
                              words: [{<shift>}]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <-->
                          pattern: (pat.Words words:[{<--> <Id.Lit_Star '*'>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Simple
                              blame_tok: <die>
                              more_env: []
                              words: [
                                {<die>}
                                {
                                  (DQ 
                                    (CommandSub
                                      left_token: <Id.Left_DollarParen '$('>
                                      child: 
                                        (command.Simple
                                          blame_tok: <eval_gettext>
                                          more_env: []
                                          words: [
                                            {<eval_gettext>}
                                            {
                                              (DQ <'unrecognised option: \''> 
                                                (word_part.EscapedLiteral
                                                  token: <Id.Lit_EscapedChar '\\$'>
                                                  ch: '$'
                                                ) <'arg\''>
                                              )
                                            }
                                          ]
                                          redirects: []
                                          do_fork: T
                                        )
                                      right: <Id.Eof_RParen _>
                                    )
                                  )
                                }
                              ]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <Id.Lit_Star '*'>
                          pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.AndOr
                              children: [
                                (command.ShAssignment
                                  left: <Id.Lit_VarLike 'rev='>
                                  pairs: [
                                    (AssignPair
                                      left: <Id.Lit_VarLike 'rev='>
                                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rev='> name:rev)
                                      op: assign_op.Equal
                                      rhs: 
                                        {
                                          (CommandSub
                                            left_token: <Id.Left_DollarParen '$('>
                                            child: 
                                              (command.Simple
                                                blame_tok: <git>
                                                more_env: []
                                                words: [
                                                  {<git>}
                                                  {<rev-parse>}
                                                  {<-q>}
                                                  {<--verify>}
                                                  {(DQ ($ Id.VSub_DollarName arg) <'^{commit}'>)}
                                                ]
                                                redirects: []
                                                do_fork: T
                                              )
                                            right: <Id.Eof_RParen _>
                                          )
                                        }
                                    )
                                  ]
                                  redirects: []
                                )
                                (BraceGroup
                                  left: <Id.Lit_LBrace '{'>
                                  children: [
                                    (command.AndOr
                                      children: [
                                        (command.Simple
                                          blame_tok: <test>
                                          more_env: []
                                          words: [
                                            {<test>}
                                            {($ Id.VSub_DollarName has_double_dash)}
                                            {<-eq>}
                                            {<1>}
                                          ]
                                          redirects: []
                                          do_fork: T
                                        )
                                        (command.Simple
                                          blame_tok: <die>
                                          more_env: []
                                          words: [
                                            {<die>}
                                            {
                                              (DQ 
                                                (CommandSub
                                                  left_token: <Id.Left_DollarParen '$('>
                                                  child: 
                                                    (command.Simple
                                                      blame_tok: <eval_gettext>
                                                      more_env: []
                                                      words: [
                                                        {<eval_gettext>}
                                                        {
                                                          (DQ <'\''> 
                                                            (word_part.EscapedLiteral
                                                              token: <Id.Lit_EscapedChar '\\$'>
                                                              ch: '$'
                                                            ) <'arg\' does not appear to be a valid revision'>
                                                          )
                                                        }
                                                      ]
                                                      redirects: []
                                                      do_fork: T
                                                    )
                                                  right: <Id.Eof_RParen _>
                                                )
                                              )
                                            }
                                          ]
                                          redirects: []
                                          do_fork: T
                                        )
                                      ]
                                      ops: [<Id.Op_DAmp _>]
                                    )
                                    (command.ControlFlow
                                      keyword: <Id.ControlFlow_Break break>
                                    )
                                  ]
                                  redirects: []
                                  right: <Id.Lit_RBrace '}'>
                                )
                              ]
                              ops: [<Id.Op_DPipe _>]
                            )
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'revs='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'revs='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'revs='> name:revs)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ ($ Id.VSub_DollarName revs) <' '> ($ Id.VSub_DollarName rev))
                                    }
                                )
                              ]
                              redirects: []
                            )
                            (command.Simple
                              blame_tok: <shift>
                              more_env: []
                              words: [{<shift>}]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.ForEach
              keyword: <Id.KW_For for>
              iter_names: [rev]
              iterable: (for_iter.Words words:[{($ Id.VSub_DollarName revs)}])
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'must_write_terms='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'must_write_terms='>
                          lhs: 
                            (sh_lhs_expr.Name
                              left: <Id.Lit_VarLike 'must_write_terms='>
                              name: must_write_terms
                            )
                          op: assign_op.Equal
                          rhs: {<1>}
                        )
                      ]
                      redirects: []
                    )
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{($ Id.VSub_DollarName bad_seen)})
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <0>
                          pattern: (pat.Words words:[{<0>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Sentence
                              child: 
                                (command.ShAssignment
                                  left: <Id.Lit_VarLike 'state='>
                                  pairs: [
                                    (AssignPair
                                      left: <Id.Lit_VarLike 'state='>
                                      lhs: 
                                        (sh_lhs_expr.Name
                                          left: <Id.Lit_VarLike 'state='>
                                          name: state
                                        )
                                      op: assign_op.Equal
                                      rhs: {($ Id.VSub_DollarName TERM_BAD)}
                                    )
                                  ]
                                  redirects: []
                                )
                              terminator: <Id.Op_Semi _>
                            )
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'bad_seen='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'bad_seen='>
                                  lhs: 
                                    (sh_lhs_expr.Name
                                      left: <Id.Lit_VarLike 'bad_seen='>
                                      name: bad_seen
                                    )
                                  op: assign_op.Equal
                                  rhs: {<1>}
                                )
                              ]
                              redirects: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <Id.Lit_Star '*'>
                          pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'state='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'state='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'state='> name:state)
                                  op: assign_op.Equal
                                  rhs: {($ Id.VSub_DollarName TERM_GOOD)}
                                )
                              ]
                              redirects: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'eval='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'eval='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'eval='> name:eval)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ ($ Id.VSub_DollarName eval) <' bisect_write \''> 
                                ($ Id.VSub_DollarName state) <'\' \''> ($ Id.VSub_DollarName rev) <'\' \'nolog\' &&'>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.AndOr
              children: [
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'head='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'head='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'head='> name:head)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (CommandSub
                            left_token: <Id.Left_DollarParen '$('>
                            child: 
                              (command.Simple
                                blame_tok: <git>
                                more_env: [
                                  (EnvPair
                                    left: <Id.Lit_VarLike 'GIT_DIR='>
                                    name: GIT_DIR
                                    val: {(DQ ($ Id.VSub_DollarName GIT_DIR))}
                                  )
                                ]
                                words: [{<git>} {<symbolic-ref>} {<-q>} {<HEAD>}]
                                redirects: []
                                do_fork: T
                              )
                            right: <Id.Eof_RParen _>
                          )
                        }
                    )
                  ]
                  redirects: []
                )
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'head='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'head='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'head='> name:head)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (CommandSub
                            left_token: <Id.Left_DollarParen '$('>
                            child: 
                              (command.Simple
                                blame_tok: <git>
                                more_env: [
                                  (EnvPair
                                    left: <Id.Lit_VarLike 'GIT_DIR='>
                                    name: GIT_DIR
                                    val: {(DQ ($ Id.VSub_DollarName GIT_DIR))}
                                  )
                                ]
                                words: [{<git>} {<rev-parse>} {<--verify>} {<HEAD>}]
                                redirects: []
                                do_fork: T
                              )
                            right: <Id.Eof_RParen _>
                          )
                        }
                    )
                  ]
                  redirects: []
                )
                (command.Simple
                  blame_tok: <die>
                  more_env: []
                  words: [
                    {<die>}
                    {
                      (DQ 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <gettext>
                              more_env: []
                              words: [{<gettext>} {(DQ <'Bad HEAD - I need a HEAD'>)}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        )
                      )
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _> <Id.Op_DPipe _>]
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'start_head='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'start_head='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'start_head='> name:start_head)
                  op: assign_op.Equal
                  rhs: {(SQ )}
                )
              ]
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Simple
                          blame_tok: <test>
                          more_env: []
                          words: [{<test>} {<-s>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_START'>)}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'start_head='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'start_head='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'start_head='> name:start_head)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_DollarParen '$('>
                                child: 
                                  (command.Simple
                                    blame_tok: <cat>
                                    more_env: []
                                    words: [
                                      {<cat>}
                                      {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_START'>)}
                                    ]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Eof_RParen _>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Simple
                                  blame_tok: <test>
                                  more_env: []
                                  words: [
                                    {<test>}
                                    {(DQ <z> ($ Id.VSub_DollarName mode))}
                                    {<Id.KW_Bang '!'> <Id.Lit_Equals '='>}
                                    {(DQ <z--no-checkout>)}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.AndOr
                              children: [
                                (command.Simple
                                  blame_tok: <git>
                                  more_env: []
                                  words: [
                                    {<git>}
                                    {<checkout>}
                                    {(DQ ($ Id.VSub_DollarName start_head))}
                                    {<-->}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                                (command.Simple
                                  blame_tok: <die>
                                  more_env: []
                                  words: [
                                    {<die>}
                                    {
                                      (DQ 
                                        (CommandSub
                                          left_token: <Id.Left_DollarParen '$('>
                                          child: 
                                            (command.Simple
                                              blame_tok: <eval_gettext>
                                              more_env: []
                                              words: [
                                                {<eval_gettext>}
                                                {
                                                  (DQ <'Checking out \''> 
                                                    (word_part.EscapedLiteral
                                                      token: <Id.Lit_EscapedChar '\\$'>
                                                      ch: '$'
                                                    ) <'start_head\' failed. Try \'git bisect reset <valid-branch>\'.'>
                                                  )
                                                }
                                              ]
                                              redirects: []
                                              do_fork: T
                                            )
                                          right: <Id.Eof_RParen _>
                                        )
                                      )
                                    }
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              ops: [<Id.Op_DPipe _>]
                            )
                          ]
                          spids: [809 826]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  spids: [779 791]
                )
              ]
              else_kw: <Id.KW_Else else>
              else_action: [
                (command.Case
                  case_kw: <Id.KW_Case case>
                  to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName head))})
                  arms_start: <Id.KW_In in>
                  arms: [
                    (CaseArm
                      left: <'refs/heads/'>
                      pattern: 
                        (pat.Words
                          words: [{<'refs/heads/'> <Id.Lit_Star '*'>} {($ Id.VSub_DollarName _x40)}]
                        )
                      middle: <Id.Right_CasePat _>
                      action: [
                        (command.AndOr
                          children: [
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-s>}
                                {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/head-name'>)}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                            (command.Simple
                              blame_tok: <die>
                              more_env: []
                              words: [
                                {<die>}
                                {
                                  (DQ 
                                    (CommandSub
                                      left_token: <Id.Left_DollarParen '$('>
                                      child: 
                                        (command.Simple
                                          blame_tok: <gettext>
                                          more_env: []
                                          words: [
                                            {<gettext>}
                                            {(DQ <'won\'t bisect on cg-seek\'ed tree'>)}
                                          ]
                                          redirects: []
                                          do_fork: T
                                        )
                                      right: <Id.Eof_RParen _>
                                    )
                                  )
                                }
                              ]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          ops: [<Id.Op_DAmp _>]
                        )
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 'start_head='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 'start_head='>
                              lhs: 
                                (sh_lhs_expr.Name
                                  left: <Id.Lit_VarLike 'start_head='>
                                  name: start_head
                                )
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ 
                                    (BracedVarSub
                                      left: <Id.Left_DollarBrace '${'>
                                      token: <Id.VSub_Name head>
                                      var_name: head
                                      suffix_op: 
                                        (suffix_op.Unary
                                          op: <Id.VOp1_Pound '#'>
                                          arg_word: 
                                            {<refs> <Id.Lit_Slash '/'> <heads> <Id.Lit_Slash '/'>}
                                        )
                                      right: <Id.Right_DollarBrace '}'>
                                    )
                                  )
                                }
                            )
                          ]
                          redirects: []
                        )
                      ]
                      right: <Id.Op_DSemi _>
                    )
                    (CaseArm
                      left: <Id.Lit_Star '*'>
                      pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                      middle: <Id.Right_CasePat _>
                      action: [
                        (command.Simple
                          blame_tok: <die>
                          more_env: []
                          words: [
                            {<die>}
                            {
                              (DQ 
                                (CommandSub
                                  left_token: <Id.Left_DollarParen '$('>
                                  child: 
                                    (command.Simple
                                      blame_tok: <gettext>
                                      more_env: []
                                      words: [{<gettext>} {(DQ <'Bad HEAD - strange symbolic ref'>)}]
                                      redirects: []
                                      do_fork: T
                                    )
                                  right: <Id.Eof_RParen _>
                                )
                              )
                            }
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      right: <Id.Op_DSemi _>
                    )
                  ]
                  arms_end: <Id.KW_Esac esac>
                  redirects: []
                )
              ]
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <bisect_clean_state>
                  more_env: []
                  words: [{<bisect_clean_state>}]
                  redirects: []
                  do_fork: T
                )
                (command.ControlFlow keyword:<Id.ControlFlow_Exit exit>)
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.Simple
              blame_tok: <trap>
              more_env: []
              words: [{<trap>} {(SQ <bisect_clean_state>)} {<0>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <trap>
              more_env: []
              words: [{<trap>} {(SQ <'exit 255'>)} {<1>} {<2>} {<3>} {<15>}]
              redirects: []
              do_fork: T
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <echo>
                  more_env: []
                  words: [{<echo>} {(DQ ($ Id.VSub_DollarName start_head))}]
                  redirects: [
                    (Redir
                      op: <Id.Redir_Great '>'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_START'>)}
                    )
                  ]
                  do_fork: T
                )
                (BraceGroup
                  left: <Id.Lit_LBrace '{'>
                  children: [
                    (command.AndOr
                      children: [
                        (command.Simple
                          blame_tok: <test>
                          more_env: []
                          words: [
                            {<test>}
                            {(DQ <z> ($ Id.VSub_DollarName mode))}
                            {<Id.KW_Bang '!'> <Id.Lit_Equals '='>}
                            {(DQ <z--no-checkout>)}
                          ]
                          redirects: []
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <git>
                          more_env: []
                          words: [
                            {<git>}
                            {<update-ref>}
                            {<--no-deref>}
                            {<BISECT_HEAD>}
                            {(DQ ($ Id.VSub_DollarName start_head))}
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      ops: [<Id.Op_DPipe _>]
                    )
                  ]
                  redirects: []
                  right: <Id.Lit_RBrace '}'>
                )
                (command.Simple
                  blame_tok: <git>
                  more_env: []
                  words: [{<git>} {<rev-parse>} {<--sq-quote>} {(DQ ($ Id.VSub_At '@'))}]
                  redirects: [
                    (Redir
                      op: <Id.Redir_Great '>'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_NAMES'>)}
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <eval>
                  more_env: []
                  words: [{<eval>} {(DQ ($ Id.VSub_DollarName eval) <' true'>)}]
                  redirects: []
                  do_fork: T
                )
                (command.If
                  if_kw: <Id.KW_If if>
                  arms: [
                    (IfArm
                      keyword: <Id.KW_If if>
                      cond: 
                        (condition.Shell
                          commands: [
                            (command.Simple
                              blame_tok: <test>
                              more_env: []
                              words: [{<test>} {($ Id.VSub_DollarName must_write_terms)} {<-eq>} {<1>}]
                              redirects: []
                              do_fork: T
                            )
                          ]
                        )
                      then_kw: <Id.KW_Then then>
                      action: [
                        (command.Simple
                          blame_tok: <write_terms>
                          more_env: []
                          words: [
                            {<write_terms>}
                            {(DQ ($ Id.VSub_DollarName TERM_BAD))}
                            {(DQ ($ Id.VSub_DollarName TERM_GOOD))}
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      spids: [1131 1142]
                    )
                  ]
                  else_action: []
                  fi_kw: <Id.KW_Fi fi>
                  redirects: []
                )
                (command.Simple
                  blame_tok: <echo>
                  more_env: []
                  words: [{<echo>} {(DQ <'git bisect start'> ($ Id.VSub_DollarName orig_args))}]
                  redirects: [
                    (Redir
                      op: <Id.Redir_DGreat '>>'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_LOG'>)}
                    )
                  ]
                  do_fork: T
                )
                (command.ControlFlow keyword:<Id.ControlFlow_Exit exit>)
              ]
              ops: [
                <Id.Op_DAmp _>
                <Id.Op_DAmp _>
                <Id.Op_DAmp _>
                <Id.Op_DAmp _>
                <Id.Op_DAmp _>
                <Id.Op_DPipe _>
              ]
            )
            (command.Simple
              blame_tok: <bisect_auto_next>
              more_env: []
              words: [{<bisect_auto_next>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <trap>
              more_env: []
              words: [{<trap>} {(SQ <->)} {<0>}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <bisect_write>
      name: bisect_write
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'state='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'state='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'state='> name:state)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number 1))}
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'rev='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'rev='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rev='> name:rev)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number 2))}
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'nolog='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'nolog='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'nolog='> name:nolog)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number 3))}
                )
              ]
              redirects: []
            )
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName state))})
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <Id.Left_DoubleQuote '"'>
                  pattern: (pat.Words words:[{(DQ ($ Id.VSub_DollarName TERM_BAD))}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'tag='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'tag='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'tag='> name:tag)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName state))}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.Left_DoubleQuote '"'>
                  pattern: (pat.Words words:[{(DQ ($ Id.VSub_DollarName TERM_GOOD))} {<skip>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'tag='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'tag='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'tag='> name:tag)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName state)) <-> (DQ ($ Id.VSub_DollarName rev))}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.Lit_Star '*'>
                  pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <die>
                      more_env: []
                      words: [
                        {<die>}
                        {
                          (DQ 
                            (CommandSub
                              left_token: <Id.Left_DollarParen '$('>
                              child: 
                                (command.Simple
                                  blame_tok: <eval_gettext>
                                  more_env: []
                                  words: [
                                    {<eval_gettext>}
                                    {
                                      (DQ <'Bad bisect_write argument: '> 
                                        (word_part.EscapedLiteral
                                          token: <Id.Lit_EscapedChar '\\$'>
                                          ch: '$'
                                        ) <state>
                                      )
                                    }
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              right: <Id.Eof_RParen _>
                            )
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <git>
                  more_env: []
                  words: [
                    {<git>}
                    {<update-ref>}
                    {(DQ <'refs/bisect/'> ($ Id.VSub_DollarName tag))}
                    {(DQ ($ Id.VSub_DollarName rev))}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.ControlFlow keyword:<Id.ControlFlow_Exit exit>)
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [
                {<echo>}
                {
                  (DQ <'# '> ($ Id.VSub_DollarName state) <': '> 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Simple
                          blame_tok: <git>
                          more_env: []
                          words: [{<git>} {<show-branch>} {($ Id.VSub_DollarName rev)}]
                          redirects: []
                          do_fork: T
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
              ]
              redirects: [
                (Redir
                  op: <Id.Redir_DGreat '>>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_LOG'>)}
                )
              ]
              do_fork: T
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {<-n>} {(DQ ($ Id.VSub_DollarName nolog))}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <echo>
                  more_env: []
                  words: [
                    {<echo>}
                    {
                      (DQ <'git bisect '> ($ Id.VSub_DollarName state) <' '> ($ Id.VSub_DollarName rev))
                    }
                  ]
                  redirects: [
                    (Redir
                      op: <Id.Redir_DGreat '>>'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_LOG'>)}
                    )
                  ]
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <is_expected_rev>
      name: is_expected_rev
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {<-f>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_EXPECTED_REV'>)}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [
                    {<test>}
                    {(DQ ($ Id.VSub_Number 1))}
                    {<Id.Lit_Equals '='>}
                    {
                      (CommandSub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (command.Simple
                            blame_tok: <cat>
                            more_env: []
                            words: [
                              {<cat>}
                              {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_EXPECTED_REV'>)}
                            ]
                            redirects: []
                            do_fork: T
                          )
                        right: <Id.Eof_RParen _>
                      )
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DAmp _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <check_expected_revs>
      name: check_expected_revs
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ForEach
              keyword: <Id.KW_For for>
              iter_names: [_rev]
              iterable: (for_iter.Words words:[{(DQ ($ Id.VSub_At '@'))}])
              semi_tok: <Id.Op_Semi _>
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Pipeline
                                  negated: <Id.KW_Bang '!'>
                                  children: [
                                    (command.Simple
                                      blame_tok: <is_expected_rev>
                                      more_env: []
                                      words: [{<is_expected_rev>} {(DQ ($ Id.VSub_DollarName _rev))}]
                                      redirects: []
                                      do_fork: T
                                    )
                                  ]
                                  ops: []
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <rm>
                              more_env: []
                              words: [
                                {<rm>}
                                {<-f>}
                                {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_ANCESTORS_OK'>)}
                              ]
                              redirects: []
                              do_fork: T
                            )
                            (command.Simple
                              blame_tok: <rm>
                              more_env: []
                              words: [
                                {<rm>}
                                {<-f>}
                                {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_EXPECTED_REV'>)}
                              ]
                              redirects: []
                              do_fork: T
                            )
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Return return>
                            )
                          ]
                          spids: [1426 1437]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <bisect_skip>
      name: bisect_skip
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'all='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'all='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'all='> name:all)
                  op: assign_op.Equal
                  rhs: {(SQ )}
                )
              ]
              redirects: []
            )
            (command.ForEach
              keyword: <Id.KW_For for>
              iter_names: [arg]
              iterable: (for_iter.Words words:[{(DQ ($ Id.VSub_At '@'))}])
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName arg))})
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <Id.Lit_Star '*'>
                          pattern: (pat.Words words:[{<Id.Lit_Star '*'> <..> <Id.Lit_Star '*'>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.AndOr
                              children: [
                                (command.ShAssignment
                                  left: <Id.Lit_VarLike 'revs='>
                                  pairs: [
                                    (AssignPair
                                      left: <Id.Lit_VarLike 'revs='>
                                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'revs='> name:revs)
                                      op: assign_op.Equal
                                      rhs: 
                                        {
                                          (CommandSub
                                            left_token: <Id.Left_DollarParen '$('>
                                            child: 
                                              (command.Simple
                                                blame_tok: <git>
                                                more_env: []
                                                words: [
                                                  {<git>}
                                                  {<rev-list>}
                                                  {(DQ ($ Id.VSub_DollarName arg))}
                                                ]
                                                redirects: []
                                                do_fork: T
                                              )
                                            right: <Id.Eof_RParen _>
                                          )
                                        }
                                    )
                                  ]
                                  redirects: []
                                )
                                (command.Simple
                                  blame_tok: <die>
                                  more_env: []
                                  words: [
                                    {<die>}
                                    {
                                      (DQ 
                                        (CommandSub
                                          left_token: <Id.Left_DollarParen '$('>
                                          child: 
                                            (command.Simple
                                              blame_tok: <eval_gettext>
                                              more_env: []
                                              words: [
                                                {<eval_gettext>}
                                                {
                                                  (DQ <'Bad rev input: '> 
                                                    (word_part.EscapedLiteral
                                                      token: <Id.Lit_EscapedChar '\\$'>
                                                      ch: '$'
                                                    ) <arg>
                                                  )
                                                }
                                              ]
                                              redirects: []
                                              do_fork: T
                                            )
                                          right: <Id.Eof_RParen _>
                                        )
                                      )
                                    }
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              ops: [<Id.Op_DPipe _>]
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <Id.Lit_Star '*'>
                          pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'revs='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'revs='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'revs='> name:revs)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (CommandSub
                                        left_token: <Id.Left_DollarParen '$('>
                                        child: 
                                          (command.Simple
                                            blame_tok: <git>
                                            more_env: []
                                            words: [
                                              {<git>}
                                              {<rev-parse>}
                                              {<--sq-quote>}
                                              {(DQ ($ Id.VSub_DollarName arg))}
                                            ]
                                            redirects: []
                                            do_fork: T
                                          )
                                        right: <Id.Eof_RParen _>
                                      )
                                    }
                                )
                              ]
                              redirects: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'all='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'all='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'all='> name:all)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName all) <' '> ($ Id.VSub_DollarName revs))}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.Simple
              blame_tok: <eval>
              more_env: []
              words: [{<eval>} {<bisect_state>} {(SQ <skip>)} {($ Id.VSub_DollarName all)}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <bisect_state>
      name: bisect_state
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <bisect_autostart>
              more_env: []
              words: [{<bisect_autostart>}]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'state='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'state='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'state='> name:state)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number 1)}
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <check_and_set_terms>
              more_env: []
              words: [{<check_and_set_terms>} {($ Id.VSub_DollarName state)}]
              redirects: []
              do_fork: T
            )
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: 
                (case_arg.Word
                  w: {(DQ ($ Id.VSub_Pound '#') <','> ($ Id.VSub_DollarName state))}
                )
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <0>
                  pattern: (pat.Words words:[{<0> <Id.Lit_Comma ','> <Id.Lit_Star '*'>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <die>
                      more_env: []
                      words: [
                        {<die>}
                        {(DQ <'Please call \'bisect_state\' with at least one argument.'>)}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <1>
                  pattern: 
                    (pat.Words
                      words: [
                        {<1> <Id.Lit_Comma ','> (DQ ($ Id.VSub_DollarName TERM_BAD))}
                        {<1> <Id.Lit_Comma ','> (DQ ($ Id.VSub_DollarName TERM_GOOD))}
                        {<1> <Id.Lit_Comma ','> <skip>}
                      ]
                    )
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'bisected_head='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'bisected_head='>
                          lhs: 
                            (sh_lhs_expr.Name
                              left: <Id.Lit_VarLike 'bisected_head='>
                              name: bisected_head
                            )
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_DollarParen '$('>
                                child: 
                                  (command.Simple
                                    blame_tok: <bisect_head>
                                    more_env: []
                                    words: [{<bisect_head>}]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Eof_RParen _>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.AndOr
                      children: [
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 'rev='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 'rev='>
                              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rev='> name:rev)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (CommandSub
                                    left_token: <Id.Left_DollarParen '$('>
                                    child: 
                                      (command.Simple
                                        blame_tok: <git>
                                        more_env: []
                                        words: [
                                          {<git>}
                                          {<rev-parse>}
                                          {<--verify>}
                                          {(DQ ($ Id.VSub_DollarName bisected_head))}
                                        ]
                                        redirects: []
                                        do_fork: T
                                      )
                                    right: <Id.Eof_RParen _>
                                  )
                                }
                            )
                          ]
                          redirects: []
                        )
                        (command.Simple
                          blame_tok: <die>
                          more_env: []
                          words: [
                            {<die>}
                            {
                              (DQ 
                                (CommandSub
                                  left_token: <Id.Left_DollarParen '$('>
                                  child: 
                                    (command.Simple
                                      blame_tok: <eval_gettext>
                                      more_env: []
                                      words: [
                                        {<eval_gettext>}
                                        {
                                          (DQ <'Bad rev input: '> 
                                            (word_part.EscapedLiteral
                                              token: <Id.Lit_EscapedChar '\\$'>
                                              ch: '$'
                                            ) <bisected_head>
                                          )
                                        }
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  right: <Id.Eof_RParen _>
                                )
                              )
                            }
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      ops: [<Id.Op_DPipe _>]
                    )
                    (command.Simple
                      blame_tok: <bisect_write>
                      more_env: []
                      words: [
                        {<bisect_write>}
                        {(DQ ($ Id.VSub_DollarName state))}
                        {(DQ ($ Id.VSub_DollarName rev))}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <check_expected_revs>
                      more_env: []
                      words: [{<check_expected_revs>} {(DQ ($ Id.VSub_DollarName rev))}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <2>
                  pattern: 
                    (pat.Words
                      words: [
                        {<2> <Id.Lit_Comma ','> (DQ ($ Id.VSub_DollarName TERM_BAD))}
                        {<Id.Lit_Star '*'> <Id.Lit_Comma ','> (DQ ($ Id.VSub_DollarName TERM_GOOD))}
                        {<Id.Lit_Star '*'> <Id.Lit_Comma ','> <skip>}
                      ]
                    )
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <shift>
                      more_env: []
                      words: [{<shift>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'hash_list='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'hash_list='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'hash_list='> name:hash_list)
                          op: assign_op.Equal
                          rhs: {(SQ )}
                        )
                      ]
                      redirects: []
                    )
                    (command.ForEach
                      keyword: <Id.KW_For for>
                      iter_names: [rev]
                      iterable: (for_iter.Words words:[{(DQ ($ Id.VSub_At '@'))}])
                      body: 
                        (command.DoGroup
                          left: <Id.KW_Do do>
                          children: [
                            (command.AndOr
                              children: [
                                (command.ShAssignment
                                  left: <Id.Lit_VarLike 'sha='>
                                  pairs: [
                                    (AssignPair
                                      left: <Id.Lit_VarLike 'sha='>
                                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'sha='> name:sha)
                                      op: assign_op.Equal
                                      rhs: 
                                        {
                                          (CommandSub
                                            left_token: <Id.Left_DollarParen '$('>
                                            child: 
                                              (command.Simple
                                                blame_tok: <git>
                                                more_env: []
                                                words: [
                                                  {<git>}
                                                  {<rev-parse>}
                                                  {<--verify>}
                                                  {(DQ ($ Id.VSub_DollarName rev) <'^{commit}'>)}
                                                ]
                                                redirects: []
                                                do_fork: T
                                              )
                                            right: <Id.Eof_RParen _>
                                          )
                                        }
                                    )
                                  ]
                                  redirects: []
                                )
                                (command.Simple
                                  blame_tok: <die>
                                  more_env: []
                                  words: [
                                    {<die>}
                                    {
                                      (DQ 
                                        (CommandSub
                                          left_token: <Id.Left_DollarParen '$('>
                                          child: 
                                            (command.Simple
                                              blame_tok: <eval_gettext>
                                              more_env: []
                                              words: [
                                                {<eval_gettext>}
                                                {
                                                  (DQ <'Bad rev input: '> 
                                                    (word_part.EscapedLiteral
                                                      token: <Id.Lit_EscapedChar '\\$'>
                                                      ch: '$'
                                                    ) <rev>
                                                  )
                                                }
                                              ]
                                              redirects: []
                                              do_fork: T
                                            )
                                          right: <Id.Eof_RParen _>
                                        )
                                      )
                                    }
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              ops: [<Id.Op_DPipe _>]
                            )
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'hash_list='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'hash_list='>
                                  lhs: 
                                    (sh_lhs_expr.Name
                                      left: <Id.Lit_VarLike 'hash_list='>
                                      name: hash_list
                                    )
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (DQ ($ Id.VSub_DollarName hash_list) <' '> 
                                        ($ Id.VSub_DollarName sha)
                                      )
                                    }
                                )
                              ]
                              redirects: []
                            )
                          ]
                          right: <Id.KW_Done done>
                        )
                      redirects: []
                    )
                    (command.ForEach
                      keyword: <Id.KW_For for>
                      iter_names: [rev]
                      iterable: (for_iter.Words words:[{($ Id.VSub_DollarName hash_list)}])
                      body: 
                        (command.DoGroup
                          left: <Id.KW_Do do>
                          children: [
                            (command.Simple
                              blame_tok: <bisect_write>
                              more_env: []
                              words: [
                                {<bisect_write>}
                                {(DQ ($ Id.VSub_DollarName state))}
                                {(DQ ($ Id.VSub_DollarName rev))}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          right: <Id.KW_Done done>
                        )
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <check_expected_revs>
                      more_env: []
                      words: [{<check_expected_revs>} {($ Id.VSub_DollarName hash_list)}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.Lit_Star '*'>
                  pattern: 
                    (pat.Words
                      words: [
                        {<Id.Lit_Star '*'> <Id.Lit_Comma ','> (DQ ($ Id.VSub_DollarName TERM_BAD))}
                      ]
                    )
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <die>
                      more_env: []
                      words: [
                        {<die>}
                        {
                          (DQ 
                            (CommandSub
                              left_token: <Id.Left_DollarParen '$('>
                              child: 
                                (command.Simple
                                  blame_tok: <eval_gettext>
                                  more_env: []
                                  words: [
                                    {<eval_gettext>}
                                    {
                                      (DQ <'\'git bisect '> 
                                        (word_part.EscapedLiteral
                                          token: <Id.Lit_EscapedChar '\\$'>
                                          ch: '$'
                                        ) <'TERM_BAD\' can take only one argument.'>
                                      )
                                    }
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              right: <Id.Eof_RParen _>
                            )
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.Lit_Star '*'>
                  pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <usage>
                      more_env: []
                      words: [{<usage>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
            (command.Simple
              blame_tok: <bisect_auto_next>
              more_env: []
              words: [{<bisect_auto_next>}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <bisect_next_check>
      name: bisect_next_check
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'missing_good='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'missing_good='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'missing_good='> name:missing_good)
                  op: assign_op.Equal
                  rhs: (rhs_word__Empty)
                )
                (AssignPair
                  left: <Id.Lit_VarLike 'missing_bad='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'missing_bad='> name:missing_bad)
                  op: assign_op.Equal
                  rhs: (rhs_word__Empty)
                )
              ]
              redirects: []
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <git>
                  more_env: []
                  words: [
                    {<git>}
                    {<show-ref>}
                    {<-q>}
                    {<--verify>}
                    {<'refs/bisect/'> ($ Id.VSub_DollarName TERM_BAD)}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'missing_bad='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'missing_bad='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'missing_bad='> name:missing_bad)
                      op: assign_op.Equal
                      rhs: {<t>}
                    )
                  ]
                  redirects: []
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [
                    {<test>}
                    {<-n>}
                    {
                      (DQ 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <git>
                              more_env: []
                              words: [
                                {<git>}
                                {<for-each-ref>}
                                {(DQ <'refs/bisect/'> ($ Id.VSub_DollarName TERM_GOOD) <'-*'>)}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        )
                      )
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'missing_good='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'missing_good='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'missing_good='> name:missing_good)
                      op: assign_op.Equal
                      rhs: {<t>}
                    )
                  ]
                  redirects: []
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: 
                (case_arg.Word
                  w: 
                    {
                      (DQ ($ Id.VSub_DollarName missing_good) <','> ($ Id.VSub_DollarName missing_bad) 
                        <','> ($ Id.VSub_Number 1)
                      )
                    }
                )
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <Id.Lit_Comma ','>
                  pattern: 
                    (pat.Words
                      words: [{<Id.Lit_Comma ','> <Id.Lit_Comma ','> <Id.Lit_Star '*'>}]
                    )
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <Id.Lit_Colon ':'>
                      more_env: []
                      words: [
                        {<Id.Lit_Colon ':'>}
                        {<have>}
                        {<both>}
                        {($ Id.VSub_DollarName TERM_GOOD)}
                        {<and>}
                        {($ Id.VSub_DollarName TERM_BAD)}
                        {<->}
                        {<ok>}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.Lit_Star '*'>
                  pattern: (pat.Words words:[{<Id.Lit_Star '*'> <Id.Lit_Comma ','>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <false>
                      more_env: []
                      words: [{<false>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <t>
                  pattern: 
                    (pat.Words
                      words: [
                        {<t> <Id.Lit_Comma ','> <Id.Lit_Comma ','> (DQ ($ Id.VSub_DollarName TERM_GOOD))}
                      ]
                    )
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <eval_gettextln>
                      more_env: []
                      words: [
                        {<eval_gettextln>}
                        {
                          (DQ <'Warning: bisecting only with a '> 
                            (word_part.EscapedLiteral
                              token: <Id.Lit_EscapedChar '\\$'>
                              ch: '$'
                            ) <'TERM_BAD commit.'>
                          )
                        }
                      ]
                      redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
                      do_fork: T
                    )
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Simple
                                  blame_tok: <test>
                                  more_env: []
                                  words: [{<test>} {<-t>} {<0>}]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <gettext>
                              more_env: []
                              words: [{<gettext>} {(DQ <'Are you sure [Y/n]? '>)}]
                              redirects: [
                                (Redir
                                  op: <Id.Redir_GreatAnd '>&'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {<2>}
                                )
                              ]
                              do_fork: T
                            )
                            (command.Simple
                              blame_tok: <read>
                              more_env: []
                              words: [{<read>} {<yesno>}]
                              redirects: []
                              do_fork: T
                            )
                            (command.Case
                              case_kw: <Id.KW_Case case>
                              to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName yesno))})
                              arms_start: <Id.KW_In in>
                              arms: [
                                (CaseArm
                                  left: <Id.Lit_LBracket '['>
                                  pattern: 
                                    (pat.Words
                                      words: [
                                        {<Id.Lit_LBracket '['> <Nn> <Id.Lit_RBracket ']'> 
                                          <Id.Lit_Star '*'>
                                        }
                                      ]
                                    )
                                  middle: <Id.Right_CasePat _>
                                  action: [
                                    (command.ControlFlow
                                      keyword: <Id.ControlFlow_Exit exit>
                                      arg_word: {<1>}
                                    )
                                  ]
                                  right: <Id.Op_DSemi _>
                                )
                              ]
                              arms_end: <Id.KW_Esac esac>
                              redirects: []
                            )
                          ]
                          spids: [2004 2013]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <Id.Lit_Colon ':'>
                      more_env: []
                      words: [
                        {<Id.Lit_Colon ':'>}
                        {<bisect>}
                        {<without>}
                        {($ Id.VSub_DollarName TERM_GOOD) <Id.Lit_TDot ...>}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.Lit_Star '*'>
                  pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'bad_syn='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'bad_syn='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'bad_syn='> name:bad_syn)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_DollarParen '$('>
                                child: 
                                  (command.Simple
                                    blame_tok: <bisect_voc>
                                    more_env: []
                                    words: [{<bisect_voc>} {<bad>}]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Eof_RParen _>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'good_syn='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'good_syn='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'good_syn='> name:good_syn)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_DollarParen '$('>
                                child: 
                                  (command.Simple
                                    blame_tok: <bisect_voc>
                                    more_env: []
                                    words: [{<bisect_voc>} {<good>}]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Eof_RParen _>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Simple
                                  blame_tok: <test>
                                  more_env: []
                                  words: [
                                    {<test>}
                                    {<-s>}
                                    {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_START'>)}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <eval_gettextln>
                              more_env: []
                              words: [
                                {<eval_gettextln>}
                                {
                                  (DQ <'You need to give me at least one '> 
                                    (word_part.EscapedLiteral
                                      token: <Id.Lit_EscapedChar '\\$'>
                                      ch: '$'
                                    ) <'bad_syn and one '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') 
                                    <'good_syn revision.\n'> <'(You can use '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <'git bisect '> 
                                    (word_part.EscapedLiteral
                                      token: <Id.Lit_EscapedChar '\\$'>
                                      ch: '$'
                                    ) <bad_syn> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' and '> 
                                    (word_part.EscapedLiteral
                                      token: <Id.Lit_EscapedChar '\\"'>
                                      ch: '"'
                                    ) <'git bisect '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <good_syn> 
                                    (word_part.EscapedLiteral
                                      token: <Id.Lit_EscapedChar '\\"'>
                                      ch: '"'
                                    ) <' for that.)'>
                                  )
                                }
                              ]
                              redirects: [
                                (Redir
                                  op: <Id.Redir_GreatAnd '>&'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {<2>}
                                )
                              ]
                              do_fork: T
                            )
                          ]
                          spids: [2102 2114]
                        )
                      ]
                      else_kw: <Id.KW_Else else>
                      else_action: [
                        (command.Simple
                          blame_tok: <eval_gettextln>
                          more_env: []
                          words: [
                            {<eval_gettextln>}
                            {
                              (DQ <'You need to start by '> 
                                (word_part.EscapedLiteral
                                  token: <Id.Lit_EscapedChar '\\"'>
                                  ch: '"'
                                ) <'git bisect start'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <'.\n'> 
                                <'You then need to give me at least one '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <'good_syn and one '> 
                                (word_part.EscapedLiteral
                                  token: <Id.Lit_EscapedChar '\\$'>
                                  ch: '$'
                                ) <'bad_syn revision.\n'> <'(You can use '> 
                                (word_part.EscapedLiteral
                                  token: <Id.Lit_EscapedChar '\\"'>
                                  ch: '"'
                                ) <'git bisect '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <bad_syn> 
                                (word_part.EscapedLiteral
                                  token: <Id.Lit_EscapedChar '\\"'>
                                  ch: '"'
                                ) <' and '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <'git bisect '> 
                                (word_part.EscapedLiteral
                                  token: <Id.Lit_EscapedChar '\\$'>
                                  ch: '$'
                                ) <good_syn> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' for that.)'>
                              )
                            }
                          ]
                          redirects: [
                            (Redir
                              op: <Id.Redir_GreatAnd '>&'>
                              loc: (redir_loc.Fd fd:1)
                              arg: {<2>}
                            )
                          ]
                          do_fork: T
                        )
                      ]
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <bisect_auto_next>
      name: bisect_auto_next
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <bisect_next_check>
                  more_env: []
                  words: [{<bisect_next_check>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <bisect_next>
                  more_env: []
                  words: [{<bisect_next>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <Id.Lit_Colon ':'>
                  more_env: []
                  words: [{<Id.Lit_Colon ':'>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DAmp _> <Id.Op_DPipe _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <bisect_next>
      name: bisect_next
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Pound '#'))})
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <0>
                  pattern: (pat.Words words:[{<0>}])
                  middle: <Id.Right_CasePat _>
                  action: []
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.Lit_Star '*'>
                  pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <usage>
                      more_env: []
                      words: [{<usage>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
            (command.Simple
              blame_tok: <bisect_autostart>
              more_env: []
              words: [{<bisect_autostart>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <bisect_next_check>
              more_env: []
              words: [{<bisect_next_check>} {($ Id.VSub_DollarName TERM_GOOD)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <git>
              more_env: []
              words: [
                {<git>}
                {<bisect--helper>}
                {<--next-all>}
                {
                  (CommandSub
                    left_token: <Id.Left_DollarParen '$('>
                    child: 
                      (command.AndOr
                        children: [
                          (command.Simple
                            blame_tok: <test>
                            more_env: []
                            words: [
                              {<test>}
                              {<-f>}
                              {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_HEAD'>)}
                            ]
                            redirects: []
                            do_fork: T
                          )
                          (command.Simple
                            blame_tok: <echo>
                            more_env: []
                            words: [{<echo>} {<--no-checkout>}]
                            redirects: []
                            do_fork: T
                          )
                        ]
                        ops: [<Id.Op_DAmp _>]
                      )
                    right: <Id.Eof_RParen _>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'res='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'res='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'res='> name:res)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_QMark '?')}
                )
              ]
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Simple
                          blame_tok: <test>
                          more_env: []
                          words: [{<test>} {($ Id.VSub_DollarName res)} {<-eq>} {<10>}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'bad_rev='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'bad_rev='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'bad_rev='> name:bad_rev)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_DollarParen '$('>
                                child: 
                                  (command.Simple
                                    blame_tok: <git>
                                    more_env: []
                                    words: [
                                      {<git>}
                                      {<show-ref>}
                                      {<--hash>}
                                      {<--verify>}
                                      {<'refs/bisect/'> ($ Id.VSub_DollarName TERM_BAD)}
                                    ]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Eof_RParen _>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'bad_commit='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'bad_commit='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'bad_commit='> name:bad_commit)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_DollarParen '$('>
                                child: 
                                  (command.Simple
                                    blame_tok: <git>
                                    more_env: []
                                    words: [{<git>} {<show-branch>} {($ Id.VSub_DollarName bad_rev)}]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Eof_RParen _>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [
                        {<echo>}
                        {
                          (DQ <'# first '> ($ Id.VSub_DollarName TERM_BAD) <' commit: '> 
                            ($ Id.VSub_DollarName bad_commit)
                          )
                        }
                      ]
                      redirects: [
                        (Redir
                          op: <Id.Redir_DGreat '>>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_LOG'>)}
                        )
                      ]
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Exit exit>
                      arg_word: {<0>}
                    )
                  ]
                  spids: [2291 2302]
                )
                (IfArm
                  keyword: <Id.KW_Elif elif>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Simple
                          blame_tok: <test>
                          more_env: []
                          words: [{<test>} {($ Id.VSub_DollarName res)} {<-eq>} {<2>}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'# only skipped commits left to test'>)}]
                      redirects: [
                        (Redir
                          op: <Id.Redir_DGreat '>>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_LOG'>)}
                        )
                      ]
                      do_fork: T
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'good_revs='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'good_revs='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'good_revs='> name:good_revs)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_DollarParen '$('>
                                child: 
                                  (command.Simple
                                    blame_tok: <git>
                                    more_env: []
                                    words: [
                                      {<git>}
                                      {<for-each-ref>}
                                      {<--format> <Id.Lit_Equals '='> (DQ <'%(objectname)'>)}
                                      {(DQ <'refs/bisect/'> ($ Id.VSub_DollarName TERM_GOOD) <'-*'>)}
                                    ]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Eof_RParen _>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.ForEach
                      keyword: <Id.KW_For for>
                      iter_names: [skipped]
                      iterable: 
                        (for_iter.Words
                          words: [
                            {
                              (CommandSub
                                left_token: <Id.Left_DollarParen '$('>
                                child: 
                                  (command.Simple
                                    blame_tok: <git>
                                    more_env: []
                                    words: [
                                      {<git>}
                                      {<rev-list>}
                                      {<'refs/bisect/'> ($ Id.VSub_DollarName TERM_BAD)}
                                      {<--not>}
                                      {($ Id.VSub_DollarName good_revs)}
                                    ]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Eof_RParen _>
                              )
                            }
                          ]
                        )
                      body: 
                        (command.DoGroup
                          left: <Id.KW_Do do>
                          children: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'skipped_commit='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'skipped_commit='>
                                  lhs: 
                                    (sh_lhs_expr.Name
                                      left: <Id.Lit_VarLike 'skipped_commit='>
                                      name: skipped_commit
                                    )
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (CommandSub
                                        left_token: <Id.Left_DollarParen '$('>
                                        child: 
                                          (command.Simple
                                            blame_tok: <git>
                                            more_env: []
                                            words: [
                                              {<git>}
                                              {<show-branch>}
                                              {($ Id.VSub_DollarName skipped)}
                                            ]
                                            redirects: []
                                            do_fork: T
                                          )
                                        right: <Id.Eof_RParen _>
                                      )
                                    }
                                )
                              ]
                              redirects: []
                            )
                            (command.Simple
                              blame_tok: <echo>
                              more_env: []
                              words: [
                                {<echo>}
                                {
                                  (DQ <'# possible first '> ($ Id.VSub_DollarName TERM_BAD) 
                                    <' commit: '> ($ Id.VSub_DollarName skipped_commit)
                                  )
                                }
                              ]
                              redirects: [
                                (Redir
                                  op: <Id.Redir_DGreat '>>'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_LOG'>)}
                                )
                              ]
                              do_fork: T
                            )
                          ]
                          right: <Id.KW_Done done>
                        )
                      redirects: []
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Exit exit>
                      arg_word: {($ Id.VSub_DollarName res)}
                    )
                  ]
                  spids: [2351 2362]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {($ Id.VSub_DollarName res)} {<-ne>} {<0>}]
                  redirects: []
                  do_fork: T
                )
                (command.ControlFlow
                  keyword: <Id.ControlFlow_Exit exit>
                  arg_word: {($ Id.VSub_DollarName res)}
                )
              ]
              ops: [<Id.Op_DAmp _>]
            )
            (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>})
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <bisect_visualize>
      name: bisect_visualize
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <bisect_next_check>
              more_env: []
              words: [{<bisect_next_check>} {<fail>}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Simple
                          blame_tok: <test>
                          more_env: []
                          words: [{<test>} {($ Id.VSub_Pound '#')} {<Id.Lit_Equals '='>} {<0>}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.AndOr
                                  children: [
                                    (command.Simple
                                      blame_tok: <test>
                                      more_env: []
                                      words: [
                                        {<test>}
                                        {<-n>}
                                        {
                                          (DQ 
                                            (BracedVarSub
                                              left: <Id.Left_DollarBrace '${'>
                                              token: <Id.VSub_Name DISPLAY>
                                              var_name: DISPLAY
                                              suffix_op: 
                                                (suffix_op.Unary
                                                  op: <Id.VTest_Plus _>
                                                  arg_word: {<set>}
                                                )
                                              right: <Id.Right_DollarBrace '}'>
                                            ) 
                                            (BracedVarSub
                                              left: <Id.Left_DollarBrace '${'>
                                              token: <Id.VSub_Name SESSIONNAME>
                                              var_name: SESSIONNAME
                                              suffix_op: 
                                                (suffix_op.Unary
                                                  op: <Id.VTest_Plus _>
                                                  arg_word: {<set>}
                                                )
                                              right: <Id.Right_DollarBrace '}'>
                                            ) 
                                            (BracedVarSub
                                              left: <Id.Left_DollarBrace '${'>
                                              token: <Id.VSub_Name MSYSTEM>
                                              var_name: MSYSTEM
                                              suffix_op: 
                                                (suffix_op.Unary
                                                  op: <Id.VTest_Plus _>
                                                  arg_word: {<set>}
                                                )
                                              right: <Id.Right_DollarBrace '}'>
                                            ) 
                                            (BracedVarSub
                                              left: <Id.Left_DollarBrace '${'>
                                              token: <Id.VSub_Name SECURITYSESSIONID>
                                              var_name: SECURITYSESSIONID
                                              suffix_op: 
                                                (suffix_op.Unary
                                                  op: <Id.VTest_Plus _>
                                                  arg_word: {<set>}
                                                )
                                              right: <Id.Right_DollarBrace '}'>
                                            )
                                          )
                                        }
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                    (command.Simple
                                      blame_tok: <type>
                                      more_env: []
                                      words: [{<type>} {<gitk>}]
                                      redirects: [
                                        (Redir
                                          op: <Id.Redir_Great '>'>
                                          loc: (redir_loc.Fd fd:1)
                                          arg: {<'/dev/null'>}
                                        )
                                        (Redir
                                          op: <Id.Redir_GreatAnd '2>&'>
                                          loc: (redir_loc.Fd fd:2)
                                          arg: {<1>}
                                        )
                                      ]
                                      do_fork: T
                                    )
                                  ]
                                  ops: [<Id.Op_DAmp _>]
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <set>
                              more_env: []
                              words: [{<set>} {<gitk>}]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          spids: [2513 2556]
                        )
                      ]
                      else_kw: <Id.KW_Else else>
                      else_action: [
                        (command.Simple
                          blame_tok: <set>
                          more_env: []
                          words: [{<set>} {<git>} {<log>}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  spids: [2499 2510]
                )
              ]
              else_kw: <Id.KW_Else else>
              else_action: [
                (command.Case
                  case_kw: <Id.KW_Case case>
                  to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 1))})
                  arms_start: <Id.KW_In in>
                  arms: [
                    (CaseArm
                      left: <git>
                      pattern: (pat.Words words:[{<git> <Id.Lit_Star '*'>} {<tig>}])
                      middle: <Id.Right_CasePat _>
                      action: []
                      right: <Id.Op_DSemi _>
                    )
                    (CaseArm
                      left: <->
                      pattern: (pat.Words words:[{<-> <Id.Lit_Star '*'>}])
                      middle: <Id.Right_CasePat _>
                      action: [
                        (command.Simple
                          blame_tok: <set>
                          more_env: []
                          words: [{<set>} {<git>} {<log>} {(DQ ($ Id.VSub_At '@'))}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      right: <Id.Op_DSemi _>
                    )
                    (CaseArm
                      left: <Id.Lit_Star '*'>
                      pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                      middle: <Id.Right_CasePat _>
                      action: [
                        (command.Simple
                          blame_tok: <set>
                          more_env: []
                          words: [{<set>} {<git>} {(DQ ($ Id.VSub_At '@'))}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      right: <Id.Op_DSemi _>
                    )
                  ]
                  arms_end: <Id.KW_Esac esac>
                  redirects: []
                )
              ]
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <eval>
              more_env: []
              words: [
                {<eval>}
                {(SQ <'"$@"'>)}
                {<--bisect>}
                {<-->}
                {
                  (CommandSub
                    left_token: <Id.Left_DollarParen '$('>
                    child: 
                      (command.Simple
                        blame_tok: <cat>
                        more_env: []
                        words: [{<cat>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_NAMES'>)}]
                        redirects: []
                        do_fork: T
                      )
                    right: <Id.Eof_RParen _>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <bisect_reset>
      name: bisect_reset
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {<-s>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_START'>)}]
                  redirects: []
                  do_fork: T
                )
                (BraceGroup
                  left: <Id.Lit_LBrace '{'>
                  children: [
                    (command.Simple
                      blame_tok: <gettextln>
                      more_env: []
                      words: [{<gettextln>} {(DQ <'We are not bisecting.'>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow keyword:<Id.ControlFlow_Return return>)
                  ]
                  redirects: []
                  right: <Id.Lit_RBrace '}'>
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Pound '#'))})
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <0>
                  pattern: (pat.Words words:[{<0>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'branch='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'branch='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'branch='> name:branch)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_DollarParen '$('>
                                child: 
                                  (command.Simple
                                    blame_tok: <cat>
                                    more_env: []
                                    words: [
                                      {<cat>}
                                      {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_START'>)}
                                    ]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Eof_RParen _>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <1>
                  pattern: (pat.Words words:[{<1>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.AndOr
                      children: [
                        (command.Simple
                          blame_tok: <git>
                          more_env: []
                          words: [
                            {<git>}
                            {<rev-parse>}
                            {<--quiet>}
                            {<--verify>}
                            {(DQ ($ Id.VSub_Number 1) <'^{commit}'>)}
                          ]
                          redirects: [
                            (Redir
                              op: <Id.Redir_Great '>'>
                              loc: (redir_loc.Fd fd:1)
                              arg: {<'/dev/null'>}
                            )
                          ]
                          do_fork: T
                        )
                        (BraceGroup
                          left: <Id.Lit_LBrace '{'>
                          children: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'invalid='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'invalid='>
                                  lhs: 
                                    (sh_lhs_expr.Name
                                      left: <Id.Lit_VarLike 'invalid='>
                                      name: invalid
                                    )
                                  op: assign_op.Equal
                                  rhs: {(DQ ($ Id.VSub_Number 1))}
                                )
                              ]
                              redirects: []
                            )
                            (command.Simple
                              blame_tok: <die>
                              more_env: []
                              words: [
                                {<die>}
                                {
                                  (DQ 
                                    (CommandSub
                                      left_token: <Id.Left_DollarParen '$('>
                                      child: 
                                        (command.Simple
                                          blame_tok: <eval_gettext>
                                          more_env: []
                                          words: [
                                            {<eval_gettext>}
                                            {
                                              (DQ <'\''> 
                                                (word_part.EscapedLiteral
                                                  token: <Id.Lit_EscapedChar '\\$'>
                                                  ch: '$'
                                                ) <'invalid\' is not a valid commit'>
                                              )
                                            }
                                          ]
                                          redirects: []
                                          do_fork: T
                                        )
                                      right: <Id.Eof_RParen _>
                                    )
                                  )
                                }
                              ]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          redirects: []
                          right: <Id.Lit_RBrace '}'>
                        )
                      ]
                      ops: [<Id.Op_DPipe _>]
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'branch='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'branch='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'branch='> name:branch)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_Number 1))}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.Lit_Star '*'>
                  pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <usage>
                      more_env: []
                      words: [{<usage>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.AndOr
                          children: [
                            (command.Pipeline
                              negated: <Id.KW_Bang '!'>
                              children: [
                                (command.Simple
                                  blame_tok: <test>
                                  more_env: []
                                  words: [
                                    {<test>}
                                    {<-f>}
                                    {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_HEAD'>)}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              ops: []
                            )
                            (command.Pipeline
                              negated: <Id.KW_Bang '!'>
                              children: [
                                (command.Simple
                                  blame_tok: <git>
                                  more_env: []
                                  words: [
                                    {<git>}
                                    {<checkout>}
                                    {(DQ ($ Id.VSub_DollarName branch))}
                                    {<-->}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              ops: []
                            )
                          ]
                          ops: [<Id.Op_DAmp _>]
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <die>
                      more_env: []
                      words: [
                        {<die>}
                        {
                          (DQ 
                            (CommandSub
                              left_token: <Id.Left_DollarParen '$('>
                              child: 
                                (command.Simple
                                  blame_tok: <eval_gettext>
                                  more_env: []
                                  words: [
                                    {<eval_gettext>}
                                    {
                                      (DQ <'Could not check out original HEAD \''> 
                                        (word_part.EscapedLiteral
                                          token: <Id.Lit_EscapedChar '\\$'>
                                          ch: '$'
                                        ) <'branch\'.\n'> <'Try \'git bisect reset <commit>\'.'>
                                      )
                                    }
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              right: <Id.Eof_RParen _>
                            )
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [2786 2814]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <bisect_clean_state>
              more_env: []
              words: [{<bisect_clean_state>}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <bisect_clean_state>
      name: bisect_clean_state
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Pipeline
              children: [
                (command.Simple
                  blame_tok: <git>
                  more_env: []
                  words: [
                    {<git>}
                    {<for-each-ref>}
                    {<--format> <Id.Lit_Equals '='> (SQ <'%(refname) %(objectname)'>)}
                    {<'refs/bisect/'> 
                      (word_part.EscapedLiteral
                        token: <Id.Lit_EscapedChar '\\*'>
                        ch: '*'
                      )
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.WhileUntil
                  keyword: <Id.KW_While while>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Simple
                          blame_tok: <read>
                          more_env: []
                          words: [{<read>} {<ref>} {<hash>}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                    )
                  body: 
                    (command.DoGroup
                      left: <Id.KW_Do do>
                      children: [
                        (command.AndOr
                          children: [
                            (command.Simple
                              blame_tok: <git>
                              more_env: []
                              words: [
                                {<git>}
                                {<update-ref>}
                                {<-d>}
                                {($ Id.VSub_DollarName ref)}
                                {($ Id.VSub_DollarName hash)}
                              ]
                              redirects: []
                              do_fork: T
                            )
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Exit exit>
                            )
                          ]
                          ops: [<Id.Op_DPipe _>]
                        )
                      ]
                      right: <Id.KW_Done done>
                    )
                  redirects: []
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <rm>
                  more_env: []
                  words: [{<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_EXPECTED_REV'>)}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <rm>
                  more_env: []
                  words: [{<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_ANCESTORS_OK'>)}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <rm>
                  more_env: []
                  words: [{<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_LOG'>)}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <rm>
                  more_env: []
                  words: [{<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_NAMES'>)}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <rm>
                  more_env: []
                  words: [{<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_RUN'>)}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <rm>
                  more_env: []
                  words: [{<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_TERMS'>)}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <rm>
                  more_env: []
                  words: [{<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/head-name'>)}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <git>
                  more_env: []
                  words: [{<git>} {<update-ref>} {<-d>} {<--no-deref>} {<BISECT_HEAD>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <rm>
                  more_env: []
                  words: [{<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_START'>)}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [
                <Id.Op_DAmp _>
                <Id.Op_DAmp _>
                <Id.Op_DAmp _>
                <Id.Op_DAmp _>
                <Id.Op_DAmp _>
                <Id.Op_DAmp _>
                <Id.Op_DAmp _>
                <Id.Op_DAmp _>
              ]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <bisect_replay>
      name: bisect_replay
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'file='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'file='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'file='> name:file)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number 1))}
                )
              ]
              redirects: []
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {(DQ ($ Id.VSub_Pound '#'))} {<-eq>} {<1>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <die>
                  more_env: []
                  words: [
                    {<die>}
                    {
                      (DQ 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <gettext>
                              more_env: []
                              words: [{<gettext>} {(DQ <'No logfile given'>)}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        )
                      )
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {<-r>} {(DQ ($ Id.VSub_DollarName file))}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <die>
                  more_env: []
                  words: [
                    {<die>}
                    {
                      (DQ 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <eval_gettext>
                              more_env: []
                              words: [
                                {<eval_gettext>}
                                {
                                  (DQ <'cannot read '> 
                                    (word_part.EscapedLiteral
                                      token: <Id.Lit_EscapedChar '\\$'>
                                      ch: '$'
                                    ) <'file for replaying'>
                                  )
                                }
                              ]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        )
                      )
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.Simple
              blame_tok: <bisect_reset>
              more_env: []
              words: [{<bisect_reset>}]
              redirects: []
              do_fork: T
            )
            (command.WhileUntil
              keyword: <Id.KW_While while>
              cond: 
                (condition.Shell
                  commands: [
                    (command.Simple
                      blame_tok: <read>
                      more_env: []
                      words: [{<read>} {<git>} {<bisect>} {<command>} {<rev>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                )
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.AndOr
                      children: [
                        (command.Simple
                          blame_tok: <test>
                          more_env: []
                          words: [
                            {<test>}
                            {(DQ ($ Id.VSub_DollarName git) <' '> ($ Id.VSub_DollarName bisect))}
                            {<Id.Lit_Equals '='>}
                            {(DQ <'git bisect'>)}
                          ]
                          redirects: []
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <test>
                          more_env: []
                          words: [
                            {<test>}
                            {(DQ ($ Id.VSub_DollarName git))}
                            {<Id.Lit_Equals '='>}
                            {(DQ <git-bisect>)}
                          ]
                          redirects: []
                          do_fork: T
                        )
                        (command.ControlFlow
                          keyword: <Id.ControlFlow_Continue continue>
                        )
                      ]
                      ops: [<Id.Op_DPipe _> <Id.Op_DPipe _>]
                    )
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Simple
                                  blame_tok: <test>
                                  more_env: []
                                  words: [
                                    {<test>}
                                    {(DQ ($ Id.VSub_DollarName git))}
                                    {<Id.Lit_Equals '='>}
                                    {(DQ <git-bisect>)}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'rev='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'rev='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rev='> name:rev)
                                  op: assign_op.Equal
                                  rhs: {(DQ ($ Id.VSub_DollarName command))}
                                )
                              ]
                              redirects: []
                            )
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'command='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'command='>
                                  lhs: 
                                    (sh_lhs_expr.Name
                                      left: <Id.Lit_VarLike 'command='>
                                      name: command
                                    )
                                  op: assign_op.Equal
                                  rhs: {(DQ ($ Id.VSub_DollarName bisect))}
                                )
                              ]
                              redirects: []
                            )
                          ]
                          spids: [3131 3146]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <get_terms>
                      more_env: []
                      words: [{<get_terms>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <check_and_set_terms>
                      more_env: []
                      words: [{<check_and_set_terms>} {(DQ ($ Id.VSub_DollarName command))}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName command))})
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <start>
                          pattern: (pat.Words words:[{<start>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'cmd='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'cmd='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'cmd='> name:cmd)
                                  op: assign_op.Equal
                                  rhs: {(DQ <'bisect_start '> ($ Id.VSub_DollarName rev))}
                                )
                              ]
                              redirects: []
                            )
                            (command.Simple
                              blame_tok: <eval>
                              more_env: []
                              words: [{<eval>} {(DQ ($ Id.VSub_DollarName cmd))}]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <Id.Left_DoubleQuote '"'>
                          pattern: 
                            (pat.Words
                              words: [
                                {(DQ ($ Id.VSub_DollarName TERM_GOOD))}
                                {(DQ ($ Id.VSub_DollarName TERM_BAD))}
                                {<skip>}
                              ]
                            )
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Simple
                              blame_tok: <bisect_write>
                              more_env: []
                              words: [
                                {<bisect_write>}
                                {(DQ ($ Id.VSub_DollarName command))}
                                {(DQ ($ Id.VSub_DollarName rev))}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <terms>
                          pattern: (pat.Words words:[{<terms>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Simple
                              blame_tok: <bisect_terms>
                              more_env: []
                              words: [{<bisect_terms>} {($ Id.VSub_DollarName rev)}]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <Id.Lit_Star '*'>
                          pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Simple
                              blame_tok: <die>
                              more_env: []
                              words: [
                                {<die>}
                                {
                                  (DQ 
                                    (CommandSub
                                      left_token: <Id.Left_DollarParen '$('>
                                      child: 
                                        (command.Simple
                                          blame_tok: <gettext>
                                          more_env: []
                                          words: [{<gettext>} {(DQ <'?? what are you talking about?'>)}]
                                          redirects: []
                                          do_fork: T
                                        )
                                      right: <Id.Eof_RParen _>
                                    )
                                  )
                                }
                              ]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: [
                (Redir
                  op: <Id.Redir_Less '<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: {(DQ ($ Id.VSub_DollarName file))}
                )
              ]
            )
            (command.Simple
              blame_tok: <bisect_auto_next>
              more_env: []
              words: [{<bisect_auto_next>}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <bisect_run>
      name: bisect_run
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <bisect_next_check>
              more_env: []
              words: [{<bisect_next_check>} {<fail>}]
              redirects: []
              do_fork: T
            )
            (command.WhileUntil
              keyword: <Id.KW_While while>
              cond: 
                (condition.Shell
                  commands: [
                    (command.Simple
                      blame_tok: <true>
                      more_env: []
                      words: [{<true>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                )
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'command='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'command='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'command='> name:command)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_At '@'))}
                        )
                      ]
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <eval_gettextln>
                      more_env: []
                      words: [
                        {<eval_gettextln>}
                        {
                          (DQ <'running '> 
                            (word_part.EscapedLiteral
                              token: <Id.Lit_EscapedChar '\\$'>
                              ch: '$'
                            ) <command>
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <Id.Left_DoubleQuote '"'>
                      more_env: []
                      words: [{(DQ ($ Id.VSub_At '@'))}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'res='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'res='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'res='> name:res)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_QMark '?')}
                        )
                      ]
                      redirects: []
                    )
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Simple
                                  blame_tok: <Id.Lit_LBracket '['>
                                  more_env: []
                                  words: [
                                    {<Id.Lit_LBracket '['>}
                                    {($ Id.VSub_DollarName res)}
                                    {<-lt>}
                                    {<0>}
                                    {<-o>}
                                    {($ Id.VSub_DollarName res)}
                                    {<-ge>}
                                    {<128>}
                                    {<Id.Lit_RBracket ']'>}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <eval_gettextln>
                              more_env: []
                              words: [
                                {<eval_gettextln>}
                                {
                                  (DQ <'bisect run failed:\n'> <'exit code '> 
                                    (word_part.EscapedLiteral
                                      token: <Id.Lit_EscapedChar '\\$'>
                                      ch: '$'
                                    ) <'res from \''> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') 
                                    <'command\' is < 0 or >= 128'>
                                  )
                                }
                              ]
                              redirects: [
                                (Redir
                                  op: <Id.Redir_GreatAnd '>&'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {<2>}
                                )
                              ]
                              do_fork: T
                            )
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Exit exit>
                              arg_word: {($ Id.VSub_DollarName res)}
                            )
                          ]
                          spids: [3325 3346]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Simple
                                  blame_tok: <Id.Lit_LBracket '['>
                                  more_env: []
                                  words: [
                                    {<Id.Lit_LBracket '['>}
                                    {($ Id.VSub_DollarName res)}
                                    {<-eq>}
                                    {<125>}
                                    {<Id.Lit_RBracket ']'>}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'state='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'state='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'state='> name:state)
                                  op: assign_op.Equal
                                  rhs: {(SQ <skip>)}
                                )
                              ]
                              redirects: []
                            )
                          ]
                          spids: [3381 3394]
                        )
                        (IfArm
                          keyword: <Id.KW_Elif elif>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Simple
                                  blame_tok: <Id.Lit_LBracket '['>
                                  more_env: []
                                  words: [
                                    {<Id.Lit_LBracket '['>}
                                    {($ Id.VSub_DollarName res)}
                                    {<-gt>}
                                    {<0>}
                                    {<Id.Lit_RBracket ']'>}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'state='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'state='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'state='> name:state)
                                  op: assign_op.Equal
                                  rhs: {(DQ ($ Id.VSub_DollarName TERM_BAD))}
                                )
                              ]
                              redirects: []
                            )
                          ]
                          spids: [3403 3416]
                        )
                      ]
                      else_kw: <Id.KW_Else else>
                      else_action: [
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 'state='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 'state='>
                              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'state='> name:state)
                              op: assign_op.Equal
                              rhs: {(DQ ($ Id.VSub_DollarName TERM_GOOD))}
                            )
                          ]
                          redirects: []
                        )
                      ]
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                    (command.Subshell
                      left: <Id.Op_LParen _>
                      child: 
                        (command.Simple
                          blame_tok: <bisect_state>
                          more_env: []
                          words: [{<bisect_state>} {($ Id.VSub_DollarName state)}]
                          redirects: [
                            (Redir
                              op: <Id.Redir_Great '>'>
                              loc: (redir_loc.Fd fd:1)
                              arg: {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_RUN'>)}
                            )
                          ]
                          do_fork: T
                        )
                      right: <Id.Right_Subshell _>
                      redirects: []
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'res='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'res='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'res='> name:res)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_QMark '?')}
                        )
                      ]
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <cat>
                      more_env: []
                      words: [{<cat>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_RUN'>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Simple
                                  blame_tok: <sane_grep>
                                  more_env: []
                                  words: [
                                    {<sane_grep>}
                                    {
                                      (DQ <'first '> ($ Id.VSub_DollarName TERM_BAD) 
                                        <' commit could be any of'>
                                      )
                                    }
                                    {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_RUN'>)}
                                  ]
                                  redirects: [
                                    (Redir
                                      op: <Id.Redir_Great '>'>
                                      loc: (redir_loc.Fd fd:1)
                                      arg: {<'/dev/null'>}
                                    )
                                  ]
                                  do_fork: T
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <gettextln>
                              more_env: []
                              words: [{<gettextln>} {(DQ <'bisect run cannot continue any more'>)}]
                              redirects: [
                                (Redir
                                  op: <Id.Redir_GreatAnd '>&'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {<2>}
                                )
                              ]
                              do_fork: T
                            )
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Exit exit>
                              arg_word: {($ Id.VSub_DollarName res)}
                            )
                          ]
                          spids: [3471 3492]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Simple
                                  blame_tok: <Id.Lit_LBracket '['>
                                  more_env: []
                                  words: [
                                    {<Id.Lit_LBracket '['>}
                                    {($ Id.VSub_DollarName res)}
                                    {<-ne>}
                                    {<0>}
                                    {<Id.Lit_RBracket ']'>}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <eval_gettextln>
                              more_env: []
                              words: [
                                {<eval_gettextln>}
                                {
                                  (DQ <'bisect run failed:\n'> <'\'bisect_state '> 
                                    (word_part.EscapedLiteral
                                      token: <Id.Lit_EscapedChar '\\$'>
                                      ch: '$'
                                    ) <'state\' exited with error code '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') 
                                    <res>
                                  )
                                }
                              ]
                              redirects: [
                                (Redir
                                  op: <Id.Redir_GreatAnd '>&'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {<2>}
                                )
                              ]
                              do_fork: T
                            )
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Exit exit>
                              arg_word: {($ Id.VSub_DollarName res)}
                            )
                          ]
                          spids: [3514 3527]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Simple
                                  blame_tok: <sane_grep>
                                  more_env: []
                                  words: [
                                    {<sane_grep>}
                                    {
                                      (DQ <'is the first '> ($ Id.VSub_DollarName TERM_BAD) <' commit'>)
                                    }
                                    {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_RUN'>)}
                                  ]
                                  redirects: [
                                    (Redir
                                      op: <Id.Redir_Great '>'>
                                      loc: (redir_loc.Fd fd:1)
                                      arg: {<'/dev/null'>}
                                    )
                                  ]
                                  do_fork: T
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <gettextln>
                              more_env: []
                              words: [{<gettextln>} {(DQ <'bisect run success'>)}]
                              redirects: []
                              do_fork: T
                            )
                            (command.Sentence
                              child: 
                                (command.ControlFlow
                                  keyword: <Id.ControlFlow_Exit exit>
                                  arg_word: {<0>}
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                          spids: [3554 3573]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <bisect_log>
      name: bisect_log
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {<-s>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_LOG'>)}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <die>
                  more_env: []
                  words: [
                    {<die>}
                    {
                      (DQ 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <gettext>
                              more_env: []
                              words: [{<gettext>} {(DQ <'We are not bisecting.'>)}]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        )
                      )
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.Simple
              blame_tok: <cat>
              more_env: []
              words: [{<cat>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_LOG'>)}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <get_terms>
      name: get_terms
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Simple
                          blame_tok: <test>
                          more_env: []
                          words: [{<test>} {<-s>} {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_TERMS'>)}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (BraceGroup
                      left: <Id.Lit_LBrace '{'>
                      children: [
                        (command.Simple
                          blame_tok: <read>
                          more_env: []
                          words: [{<read>} {<TERM_BAD>}]
                          redirects: []
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <read>
                          more_env: []
                          words: [{<read>} {<TERM_GOOD>}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      redirects: [
                        (Redir
                          op: <Id.Redir_Less '<'>
                          loc: (redir_loc.Fd fd:0)
                          arg: {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_TERMS'>)}
                        )
                      ]
                      right: <Id.Lit_RBrace '}'>
                    )
                  ]
                  spids: [3648 3660]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <write_terms>
      name: write_terms
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'TERM_BAD='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'TERM_BAD='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TERM_BAD='> name:TERM_BAD)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number 1)}
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'TERM_GOOD='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'TERM_GOOD='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TERM_GOOD='> name:TERM_GOOD)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number 2)}
                )
              ]
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Simple
                          blame_tok: <test>
                          more_env: []
                          words: [
                            {<test>}
                            {(DQ ($ Id.VSub_DollarName TERM_BAD))}
                            {<Id.Lit_Equals '='>}
                            {(DQ ($ Id.VSub_DollarName TERM_GOOD))}
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <die>
                      more_env: []
                      words: [
                        {<die>}
                        {
                          (DQ 
                            (CommandSub
                              left_token: <Id.Left_DollarParen '$('>
                              child: 
                                (command.Simple
                                  blame_tok: <gettext>
                                  more_env: []
                                  words: [{<gettext>} {(DQ <'please use two different terms'>)}]
                                  redirects: []
                                  do_fork: T
                                )
                              right: <Id.Eof_RParen _>
                            )
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [3706 3721]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <check_term_format>
              more_env: []
              words: [{<check_term_format>} {(DQ ($ Id.VSub_DollarName TERM_BAD))} {<bad>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check_term_format>
              more_env: []
              words: [{<check_term_format>} {(DQ ($ Id.VSub_DollarName TERM_GOOD))} {<good>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <printf>
              more_env: []
              words: [
                {<printf>}
                {(SQ <'%s\\n%s\\n'>)}
                {(DQ ($ Id.VSub_DollarName TERM_BAD))}
                {(DQ ($ Id.VSub_DollarName TERM_GOOD))}
              ]
              redirects: [
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_TERMS'>)}
                )
              ]
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <check_term_format>
      name: check_term_format
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'term='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'term='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'term='> name:term)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number 1)}
                )
              ]
              redirects: []
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <git>
                  more_env: []
                  words: [
                    {<git>}
                    {<check-ref-format>}
                    {<'refs/bisect/'> (DQ ($ Id.VSub_DollarName term))}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <die>
                  more_env: []
                  words: [
                    {<die>}
                    {
                      (DQ 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <eval_gettext>
                              more_env: []
                              words: [
                                {<eval_gettext>}
                                {
                                  (DQ <'\''> 
                                    (word_part.EscapedLiteral
                                      token: <Id.Lit_EscapedChar '\\$'>
                                      ch: '$'
                                    ) <'term\' is not a valid term'>
                                  )
                                }
                              ]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        )
                      )
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName term))})
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <help>
                  pattern: 
                    (pat.Words
                      words: [
                        {<help>}
                        {<start>}
                        {<terms>}
                        {<skip>}
                        {<next>}
                        {<reset>}
                        {<visualize>}
                        {<replay>}
                        {<log>}
                        {<run>}
                      ]
                    )
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <die>
                      more_env: []
                      words: [
                        {<die>}
                        {
                          (DQ 
                            (CommandSub
                              left_token: <Id.Left_DollarParen '$('>
                              child: 
                                (command.Simple
                                  blame_tok: <eval_gettext>
                                  more_env: []
                                  words: [
                                    {<eval_gettext>}
                                    {
                                      (DQ <'can\'t use the builtin command \''> 
                                        (word_part.EscapedLiteral
                                          token: <Id.Lit_EscapedChar '\\$'>
                                          ch: '$'
                                        ) <'term\' as a term'>
                                      )
                                    }
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              right: <Id.Eof_RParen _>
                            )
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <bad>
                  pattern: (pat.Words words:[{<bad>} {<new>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Simple
                                  blame_tok: <test>
                                  more_env: []
                                  words: [
                                    {<test>}
                                    {(DQ ($ Id.VSub_Number 2))}
                                    {<Id.KW_Bang '!'> <Id.Lit_Equals '='>}
                                    {<bad>}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <die>
                              more_env: []
                              words: [
                                {<die>}
                                {
                                  (DQ 
                                    (CommandSub
                                      left_token: <Id.Left_DollarParen '$('>
                                      child: 
                                        (command.Simple
                                          blame_tok: <eval_gettext>
                                          more_env: []
                                          words: [
                                            {<eval_gettext>}
                                            {
                                              (DQ <'can\'t change the meaning of term \''> 
                                                (word_part.EscapedLiteral
                                                  token: <Id.Lit_EscapedChar '\\$'>
                                                  ch: '$'
                                                ) <'term\''>
                                              )
                                            }
                                          ]
                                          redirects: []
                                          do_fork: T
                                        )
                                      right: <Id.Eof_RParen _>
                                    )
                                  )
                                }
                              ]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          spids: [3875 3889]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <good>
                  pattern: (pat.Words words:[{<good>} {<old>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Simple
                                  blame_tok: <test>
                                  more_env: []
                                  words: [
                                    {<test>}
                                    {(DQ ($ Id.VSub_Number 2))}
                                    {<Id.KW_Bang '!'> <Id.Lit_Equals '='>}
                                    {<good>}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <die>
                              more_env: []
                              words: [
                                {<die>}
                                {
                                  (DQ 
                                    (CommandSub
                                      left_token: <Id.Left_DollarParen '$('>
                                      child: 
                                        (command.Simple
                                          blame_tok: <eval_gettext>
                                          more_env: []
                                          words: [
                                            {<eval_gettext>}
                                            {
                                              (DQ <'can\'t change the meaning of term \''> 
                                                (word_part.EscapedLiteral
                                                  token: <Id.Lit_EscapedChar '\\$'>
                                                  ch: '$'
                                                ) <'term\''>
                                              )
                                            }
                                          ]
                                          redirects: []
                                          do_fork: T
                                        )
                                      right: <Id.Eof_RParen _>
                                    )
                                  )
                                }
                              ]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          spids: [3935 3949]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <check_and_set_terms>
      name: check_and_set_terms
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'cmd='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'cmd='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'cmd='> name:cmd)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number 1))}
                )
              ]
              redirects: []
            )
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName cmd))})
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <skip>
                  pattern: (pat.Words words:[{<skip>} {<start>} {<terms>}])
                  middle: <Id.Right_CasePat _>
                  action: []
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.Lit_Star '*'>
                  pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.AndOr
                                  children: [
                                    (command.Simple
                                      blame_tok: <test>
                                      more_env: []
                                      words: [
                                        {<test>}
                                        {<-s>}
                                        {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_TERMS'>)}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                    (command.Simple
                                      blame_tok: <test>
                                      more_env: []
                                      words: [
                                        {<test>}
                                        {(DQ ($ Id.VSub_DollarName cmd))}
                                        {<Id.KW_Bang '!'> <Id.Lit_Equals '='>}
                                        {(DQ ($ Id.VSub_DollarName TERM_BAD))}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                    (command.Simple
                                      blame_tok: <test>
                                      more_env: []
                                      words: [
                                        {<test>}
                                        {(DQ ($ Id.VSub_DollarName cmd))}
                                        {<Id.KW_Bang '!'> <Id.Lit_Equals '='>}
                                        {(DQ ($ Id.VSub_DollarName TERM_GOOD))}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  ]
                                  ops: [<Id.Op_DAmp _> <Id.Op_DAmp _>]
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <die>
                              more_env: []
                              words: [
                                {<die>}
                                {
                                  (DQ 
                                    (CommandSub
                                      left_token: <Id.Left_DollarParen '$('>
                                      child: 
                                        (command.Simple
                                          blame_tok: <eval_gettext>
                                          more_env: []
                                          words: [
                                            {<eval_gettext>}
                                            {
                                              (DQ <'Invalid command: you\'re currently in a '> 
                                                (word_part.EscapedLiteral
                                                  token: <Id.Lit_EscapedChar '\\$'>
                                                  ch: '$'
                                                ) <'TERM_BAD/'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <'TERM_GOOD bisect.'>
                                              )
                                            }
                                          ]
                                          redirects: []
                                          do_fork: T
                                        )
                                      right: <Id.Eof_RParen _>
                                    )
                                  )
                                }
                              ]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          spids: [4015 4057]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName cmd))})
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <bad>
                          pattern: (pat.Words words:[{<bad>} {<good>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.If
                              if_kw: <Id.KW_If if>
                              arms: [
                                (IfArm
                                  keyword: <Id.KW_If if>
                                  cond: 
                                    (condition.Shell
                                      commands: [
                                        (command.Pipeline
                                          negated: <Id.KW_Bang '!'>
                                          children: [
                                            (command.Simple
                                              blame_tok: <test>
                                              more_env: []
                                              words: [
                                                {<test>}
                                                {<-s>}
                                                {
                                                  (DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_TERMS'>)
                                                }
                                              ]
                                              redirects: []
                                              do_fork: T
                                            )
                                          ]
                                          ops: []
                                        )
                                      ]
                                    )
                                  then_kw: <Id.KW_Then then>
                                  action: [
                                    (command.Simple
                                      blame_tok: <write_terms>
                                      more_env: []
                                      words: [{<write_terms>} {<bad>} {<good>}]
                                      redirects: []
                                      do_fork: T
                                    )
                                  ]
                                  spids: [4095 4109]
                                )
                              ]
                              else_action: []
                              fi_kw: <Id.KW_Fi fi>
                              redirects: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <new>
                          pattern: (pat.Words words:[{<new>} {<old>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.If
                              if_kw: <Id.KW_If if>
                              arms: [
                                (IfArm
                                  keyword: <Id.KW_If if>
                                  cond: 
                                    (condition.Shell
                                      commands: [
                                        (command.Pipeline
                                          negated: <Id.KW_Bang '!'>
                                          children: [
                                            (command.Simple
                                              blame_tok: <test>
                                              more_env: []
                                              words: [
                                                {<test>}
                                                {<-s>}
                                                {
                                                  (DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_TERMS'>)
                                                }
                                              ]
                                              redirects: []
                                              do_fork: T
                                            )
                                          ]
                                          ops: []
                                        )
                                      ]
                                    )
                                  then_kw: <Id.KW_Then then>
                                  action: [
                                    (command.Simple
                                      blame_tok: <write_terms>
                                      more_env: []
                                      words: [{<write_terms>} {<new>} {<old>}]
                                      redirects: []
                                      do_fork: T
                                    )
                                  ]
                                  spids: [4131 4145]
                                )
                              ]
                              else_action: []
                              fi_kw: <Id.KW_Fi fi>
                              redirects: []
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <bisect_voc>
      name: bisect_voc
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 1))})
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <bad>
                  pattern: (pat.Words words:[{<bad>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'bad|new'>)}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <good>
                  pattern: (pat.Words words:[{<good>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'good|old'>)}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <bisect_terms>
      name: bisect_terms
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <get_terms>
              more_env: []
              words: [{<get_terms>}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Pipeline
                          negated: <Id.KW_Bang '!'>
                          children: [
                            (command.Simple
                              blame_tok: <test>
                              more_env: []
                              words: [
                                {<test>}
                                {<-s>}
                                {(DQ ($ Id.VSub_DollarName GIT_DIR) <'/BISECT_TERMS'>)}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          ops: []
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <die>
                      more_env: []
                      words: [
                        {<die>}
                        {
                          (DQ 
                            (CommandSub
                              left_token: <Id.Left_DollarParen '$('>
                              child: 
                                (command.Simple
                                  blame_tok: <gettext>
                                  more_env: []
                                  words: [{<gettext>} {(DQ <'no terms defined'>)}]
                                  redirects: []
                                  do_fork: T
                                )
                              right: <Id.Eof_RParen _>
                            )
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [4228 4242]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Pound '#'))})
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <0>
                  pattern: (pat.Words words:[{<0>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <gettextln>
                      more_env: []
                      words: [
                        {<gettextln>}
                        {
                          (DQ <'Your current terms are '> ($ Id.VSub_DollarName TERM_GOOD) 
                            <' for the old state\n'> <'and '> ($ Id.VSub_DollarName TERM_BAD) <' for the new state.'>
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <1>
                  pattern: (pat.Words words:[{<1>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'arg='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'arg='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'arg='> name:arg)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_Number 1)}
                        )
                      ]
                      redirects: []
                    )
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName arg))})
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <--term-good>
                          pattern: (pat.Words words:[{<--term-good>} {<--term-old>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Simple
                              blame_tok: <printf>
                              more_env: []
                              words: [{<printf>} {(SQ <'%s\\n'>)} {(DQ ($ Id.VSub_DollarName TERM_GOOD))}]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <--term-bad>
                          pattern: (pat.Words words:[{<--term-bad>} {<--term-new>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Simple
                              blame_tok: <printf>
                              more_env: []
                              words: [{<printf>} {(SQ <'%s\\n'>)} {(DQ ($ Id.VSub_DollarName TERM_BAD))}]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <Id.Lit_Star '*'>
                          pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Simple
                              blame_tok: <die>
                              more_env: []
                              words: [
                                {<die>}
                                {
                                  (DQ 
                                    (CommandSub
                                      left_token: <Id.Left_DollarParen '$('>
                                      child: 
                                        (command.Simple
                                          blame_tok: <eval_gettext>
                                          more_env: []
                                          words: [
                                            {<eval_gettext>}
                                            {
                                              (DQ <'invalid argument '> 
                                                (word_part.EscapedLiteral
                                                  token: <Id.Lit_EscapedChar '\\$'>
                                                  ch: '$'
                                                ) <'arg for \'git bisect terms\'.\n'> 
                                                <
'Supported options are: --term-good|--term-old and --term-bad|--term-new.'
                                                >
                                              )
                                            }
                                          ]
                                          redirects: []
                                          do_fork: T
                                        )
                                      right: <Id.Eof_RParen _>
                                    )
                                  )
                                }
                              ]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.Lit_Star '*'>
                  pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <usage>
                      more_env: []
                      words: [{<usage>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Case
      case_kw: <Id.KW_Case case>
      to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Pound '#'))})
      arms_start: <Id.KW_In in>
      arms: [
        (CaseArm
          left: <0>
          pattern: (pat.Words words:[{<0>}])
          middle: <Id.Right_CasePat _>
          action: [
            (command.Simple
              blame_tok: <usage>
              more_env: []
              words: [{<usage>}]
              redirects: []
              do_fork: T
            )
          ]
          right: <Id.Op_DSemi _>
        )
        (CaseArm
          left: <Id.Lit_Star '*'>
          pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
          middle: <Id.Right_CasePat _>
          action: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'cmd='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'cmd='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'cmd='> name:cmd)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number 1))}
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <get_terms>
              more_env: []
              words: [{<get_terms>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <shift>
              more_env: []
              words: [{<shift>}]
              redirects: []
              do_fork: T
            )
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: (case_arg.Word w:{(DQ ($ Id.VSub_DollarName cmd))})
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <help>
                  pattern: (pat.Words words:[{<help>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <git>
                      more_env: []
                      words: [{<git>} {<bisect>} {<-h>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <start>
                  pattern: (pat.Words words:[{<start>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <bisect_start>
                      more_env: []
                      words: [{<bisect_start>} {(DQ ($ Id.VSub_At '@'))}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <bad>
                  pattern: 
                    (pat.Words
                      words: [
                        {<bad>}
                        {<good>}
                        {<new>}
                        {<old>}
                        {(DQ ($ Id.VSub_DollarName TERM_BAD))}
                        {(DQ ($ Id.VSub_DollarName TERM_GOOD))}
                      ]
                    )
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <bisect_state>
                      more_env: []
                      words: [
                        {<bisect_state>}
                        {(DQ ($ Id.VSub_DollarName cmd))}
                        {(DQ ($ Id.VSub_At '@'))}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <skip>
                  pattern: (pat.Words words:[{<skip>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <bisect_skip>
                      more_env: []
                      words: [{<bisect_skip>} {(DQ ($ Id.VSub_At '@'))}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <next>
                  pattern: (pat.Words words:[{<next>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <bisect_next>
                      more_env: []
                      words: [{<bisect_next>} {(DQ ($ Id.VSub_At '@'))}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <visualize>
                  pattern: (pat.Words words:[{<visualize>} {<view>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <bisect_visualize>
                      more_env: []
                      words: [{<bisect_visualize>} {(DQ ($ Id.VSub_At '@'))}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <reset>
                  pattern: (pat.Words words:[{<reset>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <bisect_reset>
                      more_env: []
                      words: [{<bisect_reset>} {(DQ ($ Id.VSub_At '@'))}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <replay>
                  pattern: (pat.Words words:[{<replay>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <bisect_replay>
                      more_env: []
                      words: [{<bisect_replay>} {(DQ ($ Id.VSub_At '@'))}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <log>
                  pattern: (pat.Words words:[{<log>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <bisect_log>
                      more_env: []
                      words: [{<bisect_log>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <run>
                  pattern: (pat.Words words:[{<run>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <bisect_run>
                      more_env: []
                      words: [{<bisect_run>} {(DQ ($ Id.VSub_At '@'))}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <terms>
                  pattern: (pat.Words words:[{<terms>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <bisect_terms>
                      more_env: []
                      words: [{<bisect_terms>} {(DQ ($ Id.VSub_At '@'))}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.Lit_Star '*'>
                  pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <usage>
                      more_env: []
                      words: [{<usage>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
          ]
        )
      ]
      arms_end: <Id.KW_Esac esac>
      redirects: []
    )
  ]
)