(command.CommandList
  children: [
    (command.ShFunction
      name_tok: <usage>
      name: usage
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <cat>
              more_env: []
              words: [{<cat>}]
              redirects: [
                (Redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [
                        <'usage: etcupdate [-npBF] [-d workdir] [-r | -s source | -t tarball]\n'>
                        <'                 [-A patterns] [-D destdir] [-I patterns] [-L logfile]\n'>
                        <'                 [-M options]\n'>
                        <
'       etcupdate build [-B] [-d workdir] [-s source] [-L logfile] [-M options]\n'
                        >
                        <'                 <tarball>\n'>
                        <
'       etcupdate diff [-d workdir] [-D destdir] [-I patterns] [-L logfile]\n'
                        >
                        <
'       etcupdate extract [-B] [-d workdir] [-s source | -t tarball] [-L logfile]\n'
                        >
                        <'                 [-M options]\n'>
                        <'       etcupdate resolve [-p] [-d workdir] [-D destdir] [-L logfile]\n'>
                        <'       etcupdate status [-d workdir] [-D destdir]\n'>
                      ]
                    )
                )
              ]
              do_fork: T
            )
            (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <log>
      name: log
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ <'>>>'>)} {(DQ ($ Id.VSub_At '@'))}]
              redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<3>})]
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <panic>
      name: panic
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ <'PANIC:'>)} {(DQ ($ Id.VSub_At '@'))}]
              redirects: []
              do_fork: T
            )
            (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<10>})
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <warn>
      name: warn
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {<-n>} {(DQ <'  '>)}]
              redirects: [
                (Redir
                  op: <Id.Redir_DGreat '>>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName WARNINGS)}
                )
              ]
              do_fork: T
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ ($ Id.VSub_At '@'))}]
              redirects: [
                (Redir
                  op: <Id.Redir_DGreat '>>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName WARNINGS)}
                )
              ]
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <rule>
      name: rule
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <jot>
              more_env: []
              words: [{<jot>} {<-b>} {(DQ ($ Id.VSub_Number 1))} {<-s>} {(DQ )} {<67>}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <file_type>
      name: file_type
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Pipeline
              children: [
                (command.Simple
                  blame_tok: <stat>
                  more_env: []
                  words: [{<stat>} {<-f>} {(DQ <'%HT'>)} {($ Id.VSub_Number 1)}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <tr>
                  more_env: []
                  words: [{<tr>} {(DQ <'[:upper:]'>)} {(DQ <'[:lower:]'>)}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <exists>
      name: exists
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <Id.Lit_LBracket '['>
              more_env: []
              words: [
                {<Id.Lit_LBracket '['>}
                {<-e>}
                {($ Id.VSub_Number 1)}
                {<-o>}
                {<-L>}
                {($ Id.VSub_Number 1)}
                {<Id.Lit_RBracket ']'>}
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <ignore>
      name: ignore
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<pattern>} {<->}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <set>
              more_env: []
              words: [{<set>} {<-o>} {<noglob>}]
              redirects: []
              do_fork: T
            )
            (command.ForEach
              keyword: <Id.KW_For for>
              iter_names: [pattern]
              iterable: (for_iter.Words words:[{($ Id.VSub_DollarName IGNORE_FILES)}])
              semi_tok: <Id.Op_Semi _>
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.Simple
                      blame_tok: <set>
                      more_env: []
                      words: [{<set>} {<Id.Lit_Other '+'> <o>} {<noglob>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{($ Id.VSub_Number 1)})
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <Id.VSub_DollarName '$pattern'>
                          pattern: (pat.Words words:[{($ Id.VSub_DollarName pattern)}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Return return>
                              arg_word: {<0>}
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <set>
                      more_env: []
                      words: [{<set>} {<-o>} {<noglob>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: (case_arg.Word w:{($ Id.VSub_Number 1)})
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <'/.cshrc'>
                  pattern: (pat.Words words:[{<'/.cshrc'>} {<'/.profile'>}])
                  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.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <Id.Lit_LBracket '['>
                                      more_env: []
                                      words: [
                                        {<Id.Lit_LBracket '['>}
                                        {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)}
                                        {<-ef>}
                                        {(${ Id.VSub_Name DESTDIR) <'/root'> ($ Id.VSub_Number 1)}
                                        {<Id.Lit_RBracket ']'>}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Return return>
                              arg_word: {<0>}
                            )
                          ]
                          spids: [517 537]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.Lit_Star '*'>
                  pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                  middle: <Id.Right_CasePat _>
                  action: []
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
            (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<1>})
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <always_install>
      name: always_install
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<pattern>} {<->}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <set>
              more_env: []
              words: [{<set>} {<-o>} {<noglob>}]
              redirects: []
              do_fork: T
            )
            (command.ForEach
              keyword: <Id.KW_For for>
              iter_names: [pattern]
              iterable: (for_iter.Words words:[{($ Id.VSub_DollarName ALWAYS_INSTALL)}])
              semi_tok: <Id.Op_Semi _>
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.Simple
                      blame_tok: <set>
                      more_env: []
                      words: [{<set>} {<Id.Lit_Other '+'> <o>} {<noglob>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{($ Id.VSub_Number 1)})
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <Id.VSub_DollarName '$pattern'>
                          pattern: (pat.Words words:[{($ Id.VSub_DollarName pattern)}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Return return>
                              arg_word: {<0>}
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <set>
                      more_env: []
                      words: [{<set>} {<-o>} {<noglob>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<1>})
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <build_tree>
      name: build_tree
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<destdir>} {<dir>} {<file>} {<make>}]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'make='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'make='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'make='> name:make)
                  op: assign_op.Equal
                  rhs: {(DQ <'make '> ($ Id.VSub_DollarName MAKE_OPTIONS) <' -DNO_FILEMON'>)}
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <log>
              more_env: []
              words: [
                {<log>}
                {
                  (DQ <'Building tree at '> ($ Id.VSub_Number 1) <' with '> ($ Id.VSub_DollarName make))
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <mkdir>
              more_env: []
              words: [{<mkdir>} {<-p>} {($ Id.VSub_Number 1) <'/usr/obj'>}]
              redirects: [
                (Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<3>})
                (Redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>})
              ]
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'destdir='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'destdir='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'destdir='> name:destdir)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (command.Simple
                            blame_tok: <realpath>
                            more_env: []
                            words: [{<realpath>} {($ Id.VSub_Number 1)}]
                            redirects: []
                            do_fork: T
                          )
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-n>}
                                {(DQ ($ Id.VSub_DollarName preworld))}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.ForEach
                      keyword: <Id.KW_For for>
                      iter_names: [file]
                      iterable: (for_iter.Words words:[{($ Id.VSub_DollarName PREWORLD_FILES)}])
                      semi_tok: <Id.Op_Semi _>
                      body: 
                        (command.DoGroup
                          left: <Id.KW_Do do>
                          children: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'dir='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'dir='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dir='> name:dir)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (CommandSub
                                        left_token: <Id.Left_Backtick '`'>
                                        child: 
                                          (command.Simple
                                            blame_tok: <dirname>
                                            more_env: []
                                            words: [{<dirname>} {<'/'> ($ Id.VSub_DollarName file)}]
                                            redirects: []
                                            do_fork: T
                                          )
                                        right: <Id.Backtick_Right '`'>
                                      )
                                    }
                                )
                              ]
                              redirects: []
                            )
                            (command.AndOr
                              children: [
                                (command.Simple
                                  blame_tok: <mkdir>
                                  more_env: []
                                  words: [
                                    {<mkdir>}
                                    {<-p>}
                                    {($ Id.VSub_Number 1) <'/'> ($ Id.VSub_DollarName dir)}
                                  ]
                                  redirects: [
                                    (Redir
                                      op: <Id.Redir_GreatAnd '>&'>
                                      loc: (redir_loc.Fd fd:1)
                                      arg: {<3>}
                                    )
                                    (Redir
                                      op: <Id.Redir_GreatAnd '2>&'>
                                      loc: (redir_loc.Fd fd:2)
                                      arg: {<1>}
                                    )
                                  ]
                                  do_fork: T
                                )
                                (command.ControlFlow
                                  keyword: <Id.ControlFlow_Return return>
                                  arg_word: {<1>}
                                )
                              ]
                              ops: [<Id.Op_DPipe _>]
                            )
                            (command.AndOr
                              children: [
                                (command.Simple
                                  blame_tok: <cp>
                                  more_env: []
                                  words: [
                                    {<cp>}
                                    {<-p>}
                                    {($ Id.VSub_DollarName SRCDIR) <'/'> ($ Id.VSub_DollarName file)}
                                    {($ Id.VSub_Number 1) <'/'> ($ Id.VSub_DollarName file)}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                                (command.ControlFlow
                                  keyword: <Id.ControlFlow_Return return>
                                  arg_word: {<1>}
                                )
                              ]
                              ops: [<Id.Op_DPipe _>]
                            )
                          ]
                          right: <Id.KW_Done done>
                        )
                      redirects: []
                    )
                  ]
                  spids: [735 748]
                )
                (IfArm
                  keyword: <Id.KW_Elif elif>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Pipeline
                              negated: <Id.KW_Bang '!'>
                              children: [
                                (command.Simple
                                  blame_tok: <Id.Lit_LBracket '['>
                                  more_env: []
                                  words: [
                                    {<Id.Lit_LBracket '['>}
                                    {<-n>}
                                    {(DQ ($ Id.VSub_DollarName nobuild))}
                                    {<Id.Lit_RBracket ']'>}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              ops: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.AndOr
                      children: [
                        (command.Subshell
                          left: <Id.Op_LParen _>
                          child: 
                            (command.CommandList
                              children: [
                                (command.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <cd>
                                      more_env: []
                                      words: [{<cd>} {($ Id.VSub_DollarName SRCDIR)}]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                                (command.AndOr
                                  children: [
                                    (command.Simple
                                      blame_tok: <Id.VSub_DollarName '$make'>
                                      more_env: []
                                      words: [
                                        {($ Id.VSub_DollarName make)}
                                        {<Id.Lit_VarLike 'DESTDIR='> ($ Id.VSub_DollarName destdir)}
                                        {<distrib-dirs>}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                    (command.Simple
                                      blame_tok: <Id.VSub_DollarName '$make'>
                                      more_env: [
                                        (EnvPair
                                          left: <Id.Lit_VarLike 'MAKEOBJDIRPREFIX='>
                                          name: MAKEOBJDIRPREFIX
                                          val: {($ Id.VSub_DollarName destdir) <'/usr/obj'>}
                                        )
                                      ]
                                      words: [
                                        {($ Id.VSub_DollarName make)}
                                        {<_obj>}
                                        {<Id.Lit_VarLike 'SUBDIR_OVERRIDE='> <etc>}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                    (command.Simple
                                      blame_tok: <Id.VSub_DollarName '$make'>
                                      more_env: [
                                        (EnvPair
                                          left: <Id.Lit_VarLike 'MAKEOBJDIRPREFIX='>
                                          name: MAKEOBJDIRPREFIX
                                          val: {($ Id.VSub_DollarName destdir) <'/usr/obj'>}
                                        )
                                      ]
                                      words: [
                                        {($ Id.VSub_DollarName make)}
                                        {<everything>}
                                        {<Id.Lit_VarLike 'SUBDIR_OVERRIDE='> <etc>}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                    (command.Simple
                                      blame_tok: <Id.VSub_DollarName '$make'>
                                      more_env: [
                                        (EnvPair
                                          left: <Id.Lit_VarLike 'MAKEOBJDIRPREFIX='>
                                          name: MAKEOBJDIRPREFIX
                                          val: {($ Id.VSub_DollarName destdir) <'/usr/obj'>}
                                        )
                                      ]
                                      words: [
                                        {($ Id.VSub_DollarName make)}
                                        {<Id.Lit_VarLike 'DESTDIR='> ($ Id.VSub_DollarName destdir)}
                                        {<distribution>}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  ]
                                  ops: [<Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _>]
                                )
                              ]
                            )
                          right: <Id.Right_Subshell _>
                          redirects: [
                            (Redir
                              op: <Id.Redir_GreatAnd '>&'>
                              loc: (redir_loc.Fd fd:1)
                              arg: {<3>}
                            )
                            (Redir
                              op: <Id.Redir_GreatAnd '2>&'>
                              loc: (redir_loc.Fd fd:2)
                              arg: {<1>}
                            )
                          ]
                        )
                        (command.ControlFlow
                          keyword: <Id.ControlFlow_Return return>
                          arg_word: {<1>}
                        )
                      ]
                      ops: [<Id.Op_DPipe _>]
                    )
                  ]
                  spids: [825 840]
                )
              ]
              else_kw: <Id.KW_Else else>
              else_action: [
                (command.AndOr
                  children: [
                    (command.Subshell
                      left: <Id.Op_LParen _>
                      child: 
                        (command.CommandList
                          children: [
                            (command.Sentence
                              child: 
                                (command.Simple
                                  blame_tok: <cd>
                                  more_env: []
                                  words: [{<cd>} {($ Id.VSub_DollarName SRCDIR)}]
                                  redirects: []
                                  do_fork: T
                                )
                              terminator: <Id.Op_Semi _>
                            )
                            (command.AndOr
                              children: [
                                (command.Simple
                                  blame_tok: <Id.VSub_DollarName '$make'>
                                  more_env: []
                                  words: [
                                    {($ Id.VSub_DollarName make)}
                                    {<Id.Lit_VarLike 'DESTDIR='> ($ Id.VSub_DollarName destdir)}
                                    {<distrib-dirs>}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                                (command.Simple
                                  blame_tok: <Id.VSub_DollarName '$make'>
                                  more_env: []
                                  words: [
                                    {($ Id.VSub_DollarName make)}
                                    {<Id.Lit_VarLike 'DESTDIR='> ($ Id.VSub_DollarName destdir)}
                                    {<distribution>}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              ops: [<Id.Op_DAmp _>]
                            )
                          ]
                        )
                      right: <Id.Right_Subshell _>
                      redirects: [
                        (Redir
                          op: <Id.Redir_GreatAnd '>&'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {<3>}
                        )
                        (Redir
                          op: <Id.Redir_GreatAnd '2>&'>
                          loc: (redir_loc.Fd fd:2)
                          arg: {<1>}
                        )
                      ]
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Return return>
                      arg_word: {<1>}
                    )
                  ]
                  ops: [<Id.Op_DPipe _>]
                )
              ]
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <chflags>
                  more_env: []
                  words: [{<chflags>} {<-R>} {<noschg>} {($ Id.VSub_Number 1)}]
                  redirects: [
                    (Redir
                      op: <Id.Redir_GreatAnd '>&'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {<3>}
                    )
                    (Redir
                      op: <Id.Redir_GreatAnd '2>&'>
                      loc: (redir_loc.Fd fd:2)
                      arg: {<1>}
                    )
                  ]
                  do_fork: T
                )
                (command.ControlFlow
                  keyword: <Id.ControlFlow_Return return>
                  arg_word: {<1>}
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <rm>
                  more_env: []
                  words: [{<rm>} {<-rf>} {($ Id.VSub_Number 1) <'/usr/obj'>}]
                  redirects: [
                    (Redir
                      op: <Id.Redir_GreatAnd '>&'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {<3>}
                    )
                    (Redir
                      op: <Id.Redir_GreatAnd '2>&'>
                      loc: (redir_loc.Fd fd:2)
                      arg: {<1>}
                    )
                  ]
                  do_fork: T
                )
                (command.ControlFlow
                  keyword: <Id.ControlFlow_Return return>
                  arg_word: {<1>}
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <rm>
                  more_env: []
                  words: [
                    {<rm>}
                    {<-f>}
                    {($ Id.VSub_Number 1) <'/etc/'> <Id.Lit_Star '*'> <.db>}
                    {($ Id.VSub_Number 1) <'/etc/passwd'>}
                    {($ Id.VSub_Number 1) <'/var/db/services.db'>}
                  ]
                  redirects: [
                    (Redir
                      op: <Id.Redir_GreatAnd '>&'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {<3>}
                    )
                    (Redir
                      op: <Id.Redir_GreatAnd '2>&'>
                      loc: (redir_loc.Fd fd:2)
                      arg: {<1>}
                    )
                  ]
                  do_fork: T
                )
                (command.ControlFlow
                  keyword: <Id.ControlFlow_Return return>
                  arg_word: {<1>}
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <find>
                  more_env: []
                  words: [{<find>} {($ Id.VSub_Number 1)} {<-type>} {<f>} {<-size>} {<0>} {<-delete>}]
                  redirects: [
                    (Redir
                      op: <Id.Redir_GreatAnd '>&'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {<3>}
                    )
                    (Redir
                      op: <Id.Redir_GreatAnd '2>&'>
                      loc: (redir_loc.Fd fd:2)
                      arg: {<1>}
                    )
                  ]
                  do_fork: T
                )
                (command.ControlFlow
                  keyword: <Id.ControlFlow_Return return>
                  arg_word: {<1>}
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <find>
                  more_env: []
                  words: [{<find>} {<-d>} {($ Id.VSub_Number 1)} {<-type>} {<d>} {<-empty>} {<-delete>}]
                  redirects: [
                    (Redir
                      op: <Id.Redir_GreatAnd '>&'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {<3>}
                    )
                    (Redir
                      op: <Id.Redir_GreatAnd '2>&'>
                      loc: (redir_loc.Fd fd:2)
                      arg: {<1>}
                    )
                  ]
                  do_fork: T
                )
                (command.ControlFlow
                  keyword: <Id.ControlFlow_Return return>
                  arg_word: {<1>}
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>})
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <extract_tree>
      name: extract_tree
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<files>}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-n>}
                                {(DQ ($ Id.VSub_DollarName tarball))}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'files='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'files='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'files='> name:files)
                          op: assign_op.Equal
                          rhs: (rhs_word__Empty)
                        )
                      ]
                      redirects: []
                    )
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <Id.Lit_LBracket '['>
                                      more_env: []
                                      words: [
                                        {<Id.Lit_LBracket '['>}
                                        {<-n>}
                                        {(DQ ($ Id.VSub_DollarName preworld))}
                                        {<Id.Lit_RBracket ']'>}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'files='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'files='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'files='> name:files)
                                  op: assign_op.Equal
                                  rhs: {(DQ ($ Id.VSub_DollarName PREWORLD_FILES))}
                                )
                              ]
                              redirects: []
                            )
                          ]
                          spids: [1153 1166]
                        )
                      ]
                      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.Sentence
                                  child: 
                                    (command.Pipeline
                                      negated: <Id.KW_Bang '!'>
                                      children: [
                                        (command.Subshell
                                          left: <Id.Op_LParen _>
                                          child: 
                                            (command.AndOr
                                              children: [
                                                (command.Simple
                                                  blame_tok: <mkdir>
                                                  more_env: []
                                                  words: [
                                                    {<mkdir>}
                                                    {<-p>}
                                                    {($ Id.VSub_DollarName NEWTREE)}
                                                  ]
                                                  redirects: []
                                                  do_fork: T
                                                )
                                                (command.Simple
                                                  blame_tok: <tar>
                                                  more_env: []
                                                  words: [
                                                    {<tar>}
                                                    {<xf>}
                                                    {($ Id.VSub_DollarName tarball)}
                                                    {<-C>}
                                                    {($ Id.VSub_DollarName NEWTREE)}
                                                    {($ Id.VSub_DollarName files)}
                                                  ]
                                                  redirects: []
                                                  do_fork: T
                                                )
                                              ]
                                              ops: [<Id.Op_DAmp _>]
                                            )
                                          right: <Id.Right_Subshell _>
                                          redirects: [
                                            (Redir
                                              op: <Id.Redir_GreatAnd '>&'>
                                              loc: (redir_loc.Fd fd:1)
                                              arg: {<3>}
                                            )
                                            (Redir
                                              op: <Id.Redir_GreatAnd '2>&'>
                                              loc: (redir_loc.Fd fd:2)
                                              arg: {<1>}
                                            )
                                          ]
                                        )
                                      ]
                                      ops: []
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <echo>
                              more_env: []
                              words: [{<echo>} {(DQ <'Failed to extract new tree.'>)}]
                              redirects: []
                              do_fork: T
                            )
                            (command.Simple
                              blame_tok: <remove_tree>
                              more_env: []
                              words: [{<remove_tree>} {($ Id.VSub_DollarName NEWTREE)}]
                              redirects: []
                              do_fork: T
                            )
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Exit exit>
                              arg_word: {<1>}
                            )
                          ]
                          spids: [1178 1213]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  spids: [1134 1147]
                )
              ]
              else_kw: <Id.KW_Else else>
              else_action: [
                (command.If
                  if_kw: <Id.KW_If if>
                  arms: [
                    (IfArm
                      keyword: <Id.KW_If if>
                      cond: 
                        (condition.Shell
                          commands: [
                            (command.Sentence
                              child: 
                                (command.Pipeline
                                  negated: <Id.KW_Bang '!'>
                                  children: [
                                    (command.Simple
                                      blame_tok: <build_tree>
                                      more_env: []
                                      words: [{<build_tree>} {($ Id.VSub_DollarName NEWTREE)}]
                                      redirects: []
                                      do_fork: T
                                    )
                                  ]
                                  ops: []
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                        )
                      then_kw: <Id.KW_Then then>
                      action: [
                        (command.Simple
                          blame_tok: <echo>
                          more_env: []
                          words: [{<echo>} {(DQ <'Failed to build new tree.'>)}]
                          redirects: []
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <remove_tree>
                          more_env: []
                          words: [{<remove_tree>} {($ Id.VSub_DollarName NEWTREE)}]
                          redirects: []
                          do_fork: T
                        )
                        (command.ControlFlow
                          keyword: <Id.ControlFlow_Exit exit>
                          arg_word: {<1>}
                        )
                      ]
                      spids: [1239 1248]
                    )
                  ]
                  else_action: []
                  fi_kw: <Id.KW_Fi fi>
                  redirects: []
                )
              ]
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <remove_tree>
      name: remove_tree
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <rm>
              more_env: []
              words: [{<rm>} {<-rf>} {($ Id.VSub_Number 1)}]
              redirects: [
                (Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<3>})
                (Redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>})
              ]
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-e>}
                                {($ Id.VSub_Number 1)}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <chflags>
                      more_env: []
                      words: [{<chflags>} {<-R>} {<noschg>} {($ Id.VSub_Number 1)}]
                      redirects: [
                        (Redir
                          op: <Id.Redir_GreatAnd '>&'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {<3>}
                        )
                        (Redir
                          op: <Id.Redir_GreatAnd '2>&'>
                          loc: (redir_loc.Fd fd:2)
                          arg: {<1>}
                        )
                      ]
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <rm>
                      more_env: []
                      words: [{<rm>} {<-rf>} {($ Id.VSub_Number 1)}]
                      redirects: [
                        (Redir
                          op: <Id.Redir_GreatAnd '>&'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {<3>}
                        )
                        (Redir
                          op: <Id.Redir_GreatAnd '2>&'>
                          loc: (redir_loc.Fd fd:2)
                          arg: {<1>}
                        )
                      ]
                      do_fork: T
                    )
                  ]
                  spids: [1306 1317]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <Id.Lit_LBracket '['>
              more_env: []
              words: [
                {<Id.Lit_LBracket '['>}
                {<Id.KW_Bang '!'>}
                {<-e>}
                {($ Id.VSub_Number 1)}
                {<Id.Lit_RBracket ']'>}
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'COMPARE_EQUAL='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'COMPARE_EQUAL='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'COMPARE_EQUAL='> name:COMPARE_EQUAL)
          op: assign_op.Equal
          rhs: {<0>}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'COMPARE_ONLYFIRST='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'COMPARE_ONLYFIRST='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'COMPARE_ONLYFIRST='> name:COMPARE_ONLYFIRST)
          op: assign_op.Equal
          rhs: {<1>}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'COMPARE_ONLYSECOND='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'COMPARE_ONLYSECOND='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'COMPARE_ONLYSECOND='> name:COMPARE_ONLYSECOND)
          op: assign_op.Equal
          rhs: {<2>}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'COMPARE_DIFFTYPE='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'COMPARE_DIFFTYPE='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'COMPARE_DIFFTYPE='> name:COMPARE_DIFFTYPE)
          op: assign_op.Equal
          rhs: {<3>}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'COMPARE_DIFFLINKS='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'COMPARE_DIFFLINKS='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'COMPARE_DIFFLINKS='> name:COMPARE_DIFFLINKS)
          op: assign_op.Equal
          rhs: {<4>}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'COMPARE_DIFFFILES='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'COMPARE_DIFFFILES='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'COMPARE_DIFFFILES='> name:COMPARE_DIFFFILES)
          op: assign_op.Equal
          rhs: {<5>}
        )
      ]
      redirects: []
    )
    (command.ShFunction
      name_tok: <compare>
      name: compare
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<first>} {<second>}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Pipeline
                              negated: <Id.KW_Bang '!'>
                              children: [
                                (command.Simple
                                  blame_tok: <exists>
                                  more_env: []
                                  words: [{<exists>} {($ Id.VSub_Number 1)}]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              ops: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  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.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <exists>
                                      more_env: []
                                      words: [{<exists>} {($ Id.VSub_Number 2)}]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Return return>
                              arg_word: {($ Id.VSub_DollarName COMPARE_ONLYSECOND)}
                            )
                          ]
                          spids: [1458 1465]
                        )
                      ]
                      else_kw: <Id.KW_Else else>
                      else_action: [
                        (command.ControlFlow
                          keyword: <Id.ControlFlow_Return return>
                          arg_word: {($ Id.VSub_DollarName COMPARE_EQUAL)}
                        )
                      ]
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  spids: [1446 1455]
                )
                (IfArm
                  keyword: <Id.KW_Elif elif>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Pipeline
                              negated: <Id.KW_Bang '!'>
                              children: [
                                (command.Simple
                                  blame_tok: <exists>
                                  more_env: []
                                  words: [{<exists>} {($ Id.VSub_Number 2)}]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              ops: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Return return>
                      arg_word: {($ Id.VSub_DollarName COMPARE_ONLYFIRST)}
                    )
                  ]
                  spids: [1484 1493]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'first='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'first='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'first='> name:first)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (command.Simple
                            blame_tok: <stat>
                            more_env: []
                            words: [{<stat>} {<-f>} {(DQ <'%Hp'>)} {($ Id.VSub_Number 1)}]
                            redirects: []
                            do_fork: T
                          )
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'second='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'second='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'second='> name:second)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (command.Simple
                            blame_tok: <stat>
                            more_env: []
                            words: [{<stat>} {<-f>} {(DQ <'%Hp'>)} {($ Id.VSub_Number 2)}]
                            redirects: []
                            do_fork: T
                          )
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {(DQ ($ Id.VSub_DollarName first))}
                                {<Id.KW_Bang '!'> <Id.Lit_Equals '='>}
                                {(DQ ($ Id.VSub_DollarName second))}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Return return>
                      arg_word: {($ Id.VSub_DollarName COMPARE_DIFFTYPE)}
                    )
                  ]
                  spids: [1541 1559]
                )
              ]
              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.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-L>}
                                {($ Id.VSub_Number 1)}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'first='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'first='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'first='> name:first)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_Backtick '`'>
                                child: 
                                  (command.Simple
                                    blame_tok: <readlink>
                                    more_env: []
                                    words: [{<readlink>} {($ Id.VSub_Number 1)}]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Backtick_Right '`'>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'second='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'second='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'second='> name:second)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_Backtick '`'>
                                child: 
                                  (command.Simple
                                    blame_tok: <readlink>
                                    more_env: []
                                    words: [{<readlink>} {($ Id.VSub_Number 2)}]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Backtick_Right '`'>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <Id.Lit_LBracket '['>
                                      more_env: []
                                      words: [
                                        {<Id.Lit_LBracket '['>}
                                        {(DQ ($ Id.VSub_DollarName first))}
                                        {<Id.Lit_Equals '='>}
                                        {(DQ ($ Id.VSub_DollarName second))}
                                        {<Id.Lit_RBracket ']'>}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Return return>
                              arg_word: {($ Id.VSub_DollarName COMPARE_EQUAL)}
                            )
                          ]
                          spids: [1609 1626]
                        )
                      ]
                      else_kw: <Id.KW_Else else>
                      else_action: [
                        (command.ControlFlow
                          keyword: <Id.ControlFlow_Return return>
                          arg_word: {($ Id.VSub_DollarName COMPARE_DIFFLINKS)}
                        )
                      ]
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  spids: [1575 1586]
                )
              ]
              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.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-f>}
                                {($ Id.VSub_Number 1)}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  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.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <cmp>
                                      more_env: []
                                      words: [
                                        {<cmp>}
                                        {<-s>}
                                        {($ Id.VSub_Number 1)}
                                        {($ Id.VSub_Number 2)}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Return return>
                              arg_word: {($ Id.VSub_DollarName COMPARE_EQUAL)}
                            )
                          ]
                          spids: [1667 1678]
                        )
                      ]
                      else_kw: <Id.KW_Else else>
                      else_action: [
                        (command.ControlFlow
                          keyword: <Id.ControlFlow_Return return>
                          arg_word: {($ Id.VSub_DollarName COMPARE_DIFFFILES)}
                        )
                      ]
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  spids: [1653 1664]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.ControlFlow
              keyword: <Id.ControlFlow_Return return>
              arg_word: {($ Id.VSub_DollarName COMPARE_EQUAL)}
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <fbsdid_only>
      name: fbsdid_only
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <diff>
              more_env: []
              words: [
                {<diff>}
                {<-qI>}
                {(SQ <'\\$FreeBSD.*\\$'>)}
                {($ Id.VSub_Number 1)}
                {($ Id.VSub_Number 2)}
              ]
              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
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <compare_fbsdid>
      name: compare_fbsdid
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<cmp>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <compare>
              more_env: []
              words: [{<compare>} {($ Id.VSub_Number 1)} {($ Id.VSub_Number 2)}]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'cmp='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'cmp='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'cmp='> name:cmp)
                  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.Sentence
                          child: 
                            (command.AndOr
                              children: [
                                (command.Simple
                                  blame_tok: <Id.Lit_LBracket '['>
                                  more_env: []
                                  words: [
                                    {<Id.Lit_LBracket '['>}
                                    {<-n>}
                                    {(DQ ($ Id.VSub_DollarName FREEBSD_ID))}
                                    {<-a>}
                                    {(DQ ($ Id.VSub_DollarName cmp))}
                                    {<-eq>}
                                    {($ Id.VSub_DollarName COMPARE_DIFFFILES)}
                                    {<Id.Lit_RBracket ']'>}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                                (command.Simple
                                  blame_tok: <fbsdid_only>
                                  more_env: []
                                  words: [{<fbsdid_only>} {($ Id.VSub_Number 1)} {($ Id.VSub_Number 2)}]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              ops: [<Id.Op_DAmp _>]
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Return return>
                      arg_word: {($ Id.VSub_DollarName COMPARE_EQUAL)}
                    )
                  ]
                  spids: [1806 1839]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.ControlFlow
              keyword: <Id.ControlFlow_Return return>
              arg_word: {($ Id.VSub_DollarName cmp)}
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <empty_dir>
      name: empty_dir
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<contents>}]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'contents='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'contents='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'contents='> name:contents)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (command.Simple
                            blame_tok: <ls>
                            more_env: []
                            words: [{<ls>} {<-A>} {($ Id.VSub_Number 1)}]
                            redirects: []
                            do_fork: T
                          )
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <Id.Lit_LBracket '['>
              more_env: []
              words: [
                {<Id.Lit_LBracket '['>}
                {<-z>}
                {(DQ ($ Id.VSub_DollarName contents))}
                {<Id.Lit_RBracket ']'>}
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <dir_subset>
      name: dir_subset
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<contents>} {<file>}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Pipeline
                              negated: <Id.KW_Bang '!'>
                              children: [
                                (command.Simple
                                  blame_tok: <Id.Lit_LBracket '['>
                                  more_env: []
                                  words: [
                                    {<Id.Lit_LBracket '['>}
                                    {<-d>}
                                    {($ Id.VSub_Number 1)}
                                    {<-a>}
                                    {<-d>}
                                    {($ Id.VSub_Number 2)}
                                    {<Id.Lit_RBracket ']'>}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              ops: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<1>})]
                  spids: [1941 1960]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'contents='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'contents='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'contents='> name:contents)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (command.Simple
                            blame_tok: <ls>
                            more_env: []
                            words: [{<ls>} {<-A>} {($ Id.VSub_Number 1)}]
                            redirects: []
                            do_fork: T
                          )
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.ForEach
              keyword: <Id.KW_For for>
              iter_names: [file]
              iterable: (for_iter.Words words:[{($ Id.VSub_DollarName contents)}])
              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.Sentence
                                  child: 
                                    (command.Pipeline
                                      negated: <Id.KW_Bang '!'>
                                      children: [
                                        (command.Simple
                                          blame_tok: <compare>
                                          more_env: []
                                          words: [
                                            {<compare>}
                                            {($ Id.VSub_Number 1) <'/'> ($ Id.VSub_DollarName file)}
                                            {($ Id.VSub_Number 2) <'/'> ($ Id.VSub_DollarName file)}
                                          ]
                                          redirects: []
                                          do_fork: T
                                        )
                                      ]
                                      ops: []
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Return return>
                              arg_word: {<1>}
                            )
                          ]
                          spids: [2004 2019]
                        )
                      ]
                      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.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <Id.Lit_LBracket '['>
                                      more_env: []
                                      words: [
                                        {<Id.Lit_LBracket '['>}
                                        {<-d>}
                                        {($ Id.VSub_Number 1) <'/'> ($ Id.VSub_DollarName file)}
                                        {<Id.Lit_RBracket ']'>}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          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.Sentence
                                          child: 
                                            (command.Pipeline
                                              negated: <Id.KW_Bang '!'>
                                              children: [
                                                (command.Simple
                                                  blame_tok: <dir_subset>
                                                  more_env: []
                                                  words: [
                                                    {<dir_subset>}
                                                    {($ Id.VSub_Number 1) <'/'> 
                                                      ($ Id.VSub_DollarName file)
                                                    }
                                                    {($ Id.VSub_Number 2) <'/'> 
                                                      ($ Id.VSub_DollarName file)
                                                    }
                                                  ]
                                                  redirects: []
                                                  do_fork: T
                                                )
                                              ]
                                              ops: []
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  then_kw: <Id.KW_Then then>
                                  action: [
                                    (command.ControlFlow
                                      keyword: <Id.ControlFlow_Return return>
                                      arg_word: {<1>}
                                    )
                                  ]
                                  spids: [2047 2062]
                                )
                              ]
                              else_action: []
                              fi_kw: <Id.KW_Fi fi>
                              redirects: []
                            )
                          ]
                          spids: [2031 2044]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>})
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <empty_destdir>
      name: empty_destdir
      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.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-n>}
                                {(DQ ($ Id.VSub_DollarName dryrun))}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <dir_subset>
                      more_env: []
                      words: [
                        {<dir_subset>}
                        {($ Id.VSub_DollarName DESTDIR) <'/'> ($ Id.VSub_Number 1)}
                        {($ Id.VSub_DollarName OLDTREE) <'/'> ($ Id.VSub_Number 1)}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow keyword:<Id.ControlFlow_Return return>)
                  ]
                  spids: [2115 2128]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <empty_dir>
              more_env: []
              words: [{<empty_dir>} {($ Id.VSub_DollarName DESTDIR) <'/'> ($ Id.VSub_Number 1)}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <diffnode>
      name: diffnode
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<first>} {<second>} {<file>} {<old>} {<new>} {<diffargs>}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-n>}
                                {(DQ ($ Id.VSub_DollarName FREEBSD_ID))}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'diffargs='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'diffargs='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'diffargs='> name:diffargs)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ <'-I '> 
                                (word_part.EscapedLiteral
                                  token: <Id.Lit_EscapedChar '\\\\'>
                                  ch: '\\'
                                ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <'FreeBSD.*'> 
                                (word_part.EscapedLiteral
                                  token: <Id.Lit_EscapedChar '\\\\'>
                                  ch: '\\'
                                ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$')
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                  ]
                  spids: [2211 2224]
                )
              ]
              else_kw: <Id.KW_Else else>
              else_action: [
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'diffargs='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'diffargs='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'diffargs='> name:diffargs)
                      op: assign_op.Equal
                      rhs: {(DQ )}
                    )
                  ]
                  redirects: []
                )
              ]
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <compare_fbsdid>
              more_env: []
              words: [
                {<compare_fbsdid>}
                {($ Id.VSub_Number 1) <'/'> ($ Id.VSub_Number 3)}
                {($ Id.VSub_Number 2) <'/'> ($ Id.VSub_Number 3)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: (case_arg.Word w:{($ Id.VSub_QMark '?')})
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <Id.VSub_DollarName '$COMPARE_EQUAL'>
                  pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_EQUAL)}])
                  middle: <Id.Right_CasePat _>
                  action: []
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.VSub_DollarName '$COMPARE_ONLYFIRST'>
                  pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_ONLYFIRST)}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'Removed: '> ($ Id.VSub_Number 3))}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.VSub_DollarName '$COMPARE_ONLYSECOND'>
                  pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_ONLYSECOND)}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'Added: '> ($ Id.VSub_Number 3))}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.VSub_DollarName '$COMPARE_DIFFTYPE'>
                  pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_DIFFTYPE)}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'first='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'first='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'first='> name:first)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_Backtick '`'>
                                child: 
                                  (command.Simple
                                    blame_tok: <file_type>
                                    more_env: []
                                    words: [
                                      {<file_type>}
                                      {($ Id.VSub_Number 1) <'/'> ($ Id.VSub_Number 3)}
                                    ]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Backtick_Right '`'>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'second='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'second='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'second='> name:second)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_Backtick '`'>
                                child: 
                                  (command.Simple
                                    blame_tok: <file_type>
                                    more_env: []
                                    words: [
                                      {<file_type>}
                                      {($ Id.VSub_Number 2) <'/'> ($ Id.VSub_Number 3)}
                                    ]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Backtick_Right '`'>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [
                        {<echo>}
                        {
                          (DQ <'Node changed from a '> ($ Id.VSub_DollarName first) <' to a '> 
                            ($ Id.VSub_DollarName second) <': '> ($ Id.VSub_Number 3)
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.VSub_DollarName '$COMPARE_DIFFLINKS'>
                  pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_DIFFLINKS)}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'first='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'first='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'first='> name:first)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_Backtick '`'>
                                child: 
                                  (command.Simple
                                    blame_tok: <readlink>
                                    more_env: []
                                    words: [
                                      {<readlink>}
                                      {($ Id.VSub_Number 1) <'/'> ($ Id.VSub_DollarName file)}
                                    ]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Backtick_Right '`'>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'second='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'second='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'second='> name:second)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_Backtick '`'>
                                child: 
                                  (command.Simple
                                    blame_tok: <readlink>
                                    more_env: []
                                    words: [
                                      {<readlink>}
                                      {($ Id.VSub_Number 2) <'/'> ($ Id.VSub_DollarName file)}
                                    ]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Backtick_Right '`'>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'Link changed: '> ($ Id.VSub_DollarName file))}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <rule>
                      more_env: []
                      words: [{<rule>} {(DQ <'='>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <-> ($ Id.VSub_DollarName first))}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'+'> ($ Id.VSub_DollarName second))}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.VSub_DollarName '$COMPARE_DIFFFILES'>
                  pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_DIFFFILES)}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'Index: '> ($ Id.VSub_Number 3))}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <rule>
                      more_env: []
                      words: [{<rule>} {(DQ <'='>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <diff>
                      more_env: []
                      words: [
                        {<diff>}
                        {<-u>}
                        {($ Id.VSub_DollarName diffargs)}
                        {<-L>}
                        {(DQ ($ Id.VSub_Number 3) <' ('> ($ Id.VSub_Number 4) <')'>)}
                        {($ Id.VSub_Number 1) <'/'> ($ Id.VSub_Number 3)}
                        {<-L>}
                        {(DQ ($ Id.VSub_Number 3) <' ('> ($ Id.VSub_Number 5) <')'>)}
                        {($ Id.VSub_Number 2) <'/'> ($ Id.VSub_Number 3)}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <post_update>
      name: post_update
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<args>}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-n>}
                                {(DQ ($ Id.VSub_DollarName preworld))}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return>)]
                  spids: [2520 2533]
                )
              ]
              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.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-f>}
                                {(${ Id.VSub_Name DESTDIR) <'/etc/localtime'>}
                                {<-a>}
                                {<Id.KW_Bang '!'>}
                                {<-L>}
                                {(${ Id.VSub_Name DESTDIR) <'/etc/localtime'>}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  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.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <Id.Lit_LBracket '['>
                                      more_env: []
                                      words: [
                                        {<Id.Lit_LBracket '['>}
                                        {<-f>}
                                        {(${ Id.VSub_Name DESTDIR) <'/var/db/zoneinfo'>}
                                        {<Id.Lit_RBracket ']'>}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          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.Sentence
                                          child: 
                                            (command.Simple
                                              blame_tok: <Id.Lit_LBracket '['>
                                              more_env: []
                                              words: [
                                                {<Id.Lit_LBracket '['>}
                                                {<-n>}
                                                {(DQ (${ Id.VSub_Name DESTDIR))}
                                                {<Id.Lit_RBracket ']'>}
                                              ]
                                              redirects: []
                                              do_fork: T
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  then_kw: <Id.KW_Then then>
                                  action: [
                                    (command.ShAssignment
                                      left: <Id.Lit_VarLike 'args='>
                                      pairs: [
                                        (AssignPair
                                          left: <Id.Lit_VarLike 'args='>
                                          lhs: 
                                            (sh_lhs_expr.Name
                                              left: <Id.Lit_VarLike 'args='>
                                              name: args
                                            )
                                          op: assign_op.Equal
                                          rhs: {(DQ <'-C '> (${ Id.VSub_Name DESTDIR))}
                                        )
                                      ]
                                      redirects: []
                                    )
                                  ]
                                  spids: [2598 2613]
                                )
                              ]
                              else_kw: <Id.KW_Else else>
                              else_action: [
                                (command.ShAssignment
                                  left: <Id.Lit_VarLike 'args='>
                                  pairs: [
                                    (AssignPair
                                      left: <Id.Lit_VarLike 'args='>
                                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'args='> name:args)
                                      op: assign_op.Equal
                                      rhs: {(DQ )}
                                    )
                                  ]
                                  redirects: []
                                )
                              ]
                              fi_kw: <Id.KW_Fi fi>
                              redirects: []
                            )
                            (command.Simple
                              blame_tok: <log>
                              more_env: []
                              words: [{<log>} {(DQ <'tzsetup -r '> (${ Id.VSub_Name args))}]
                              redirects: []
                              do_fork: T
                            )
                            (command.If
                              if_kw: <Id.KW_If if>
                              arms: [
                                (IfArm
                                  keyword: <Id.KW_If if>
                                  cond: 
                                    (condition.Shell
                                      commands: [
                                        (command.Sentence
                                          child: 
                                            (command.Simple
                                              blame_tok: <Id.Lit_LBracket '['>
                                              more_env: []
                                              words: [
                                                {<Id.Lit_LBracket '['>}
                                                {<-z>}
                                                {(DQ ($ Id.VSub_DollarName dryrun))}
                                                {<Id.Lit_RBracket ']'>}
                                              ]
                                              redirects: []
                                              do_fork: T
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  then_kw: <Id.KW_Then then>
                                  action: [
                                    (command.Simple
                                      blame_tok: <tzsetup>
                                      more_env: []
                                      words: [{<tzsetup>} {<-r>} {(${ Id.VSub_Name args)}]
                                      redirects: [
                                        (Redir
                                          op: <Id.Redir_GreatAnd '>&'>
                                          loc: (redir_loc.Fd fd:1)
                                          arg: {<3>}
                                        )
                                        (Redir
                                          op: <Id.Redir_GreatAnd '2>&'>
                                          loc: (redir_loc.Fd fd:2)
                                          arg: {<1>}
                                        )
                                      ]
                                      do_fork: T
                                    )
                                  ]
                                  spids: [2646 2659]
                                )
                              ]
                              else_action: []
                              fi_kw: <Id.KW_Fi fi>
                              redirects: []
                            )
                          ]
                          spids: [2581 2595]
                        )
                      ]
                      else_kw: <Id.KW_Else else>
                      else_action: [
                        (command.Simple
                          blame_tok: <warn>
                          more_env: []
                          words: [
                            {<warn>}
                            {(DQ <'Needs update: /etc/localtime (required'>)}
                            {(DQ <'manual update via tzsetup(8))'>)}
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  spids: [2551 2578]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <install_dirs>
      name: install_dirs
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<args>} {<dir>}]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'dir='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'dir='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dir='> name:dir)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (command.Simple
                            blame_tok: <dirname>
                            more_env: []
                            words: [{<dirname>} {($ Id.VSub_Number 3)}]
                            redirects: []
                            do_fork: T
                          )
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-d>}
                                {(${ Id.VSub_Number 2) ($ Id.VSub_DollarName dir)}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>})]
                  spids: [2763 2777]
                )
              ]
              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.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <exists>
                              more_env: []
                              words: [{<exists>} {(${ Id.VSub_Number 2) ($ Id.VSub_DollarName dir)}]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  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.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <Id.Lit_LBracket '['>
                                      more_env: []
                                      words: [
                                        {<Id.Lit_LBracket '['>}
                                        {<-n>}
                                        {(DQ ($ Id.VSub_DollarName dryrun))}
                                        {<-a>}
                                        {(DQ ($ Id.VSub_Number 2))}
                                        {<Id.Lit_Equals '='>}
                                        {(DQ ($ Id.VSub_DollarName DESTDIR))}
                                        {<Id.Lit_RBracket ']'>}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          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.Sentence
                                          child: 
                                            (command.Simple
                                              blame_tok: <compare>
                                              more_env: []
                                              words: [
                                                {<compare>}
                                                {($ Id.VSub_DollarName OLDTREE) <'/'> 
                                                  ($ Id.VSub_DollarName dir)
                                                }
                                                {($ Id.VSub_DollarName DESTDIR) <'/'> 
                                                  ($ Id.VSub_DollarName dir)
                                                }
                                              ]
                                              redirects: []
                                              do_fork: T
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  then_kw: <Id.KW_Then then>
                                  action: [
                                    (command.ControlFlow
                                      keyword: <Id.ControlFlow_Return return>
                                      arg_word: {<0>}
                                    )
                                  ]
                                  spids: [2854 2867]
                                )
                              ]
                              else_action: []
                              fi_kw: <Id.KW_Fi fi>
                              redirects: []
                            )
                          ]
                          spids: [2826 2851]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'args='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'args='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'args='> name:args)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_Backtick '`'>
                                child: 
                                  (command.Simple
                                    blame_tok: <file_type>
                                    more_env: []
                                    words: [
                                      {<file_type>}
                                      {(${ Id.VSub_Number 2) ($ Id.VSub_DollarName dir)}
                                    ]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Backtick_Right '`'>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <warn>
                      more_env: []
                      words: [
                        {<warn>}
                        {
                          (DQ <'Directory mismatch: '> (${ Id.VSub_Number 2) ($ Id.VSub_DollarName dir) 
                            <' ('> ($ Id.VSub_DollarName args) <')'>
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Return return>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [2797 2807]
                )
              ]
              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.Sentence
                          child: 
                            (command.Pipeline
                              negated: <Id.KW_Bang '!'>
                              children: [
                                (command.Simple
                                  blame_tok: <install_dirs>
                                  more_env: []
                                  words: [
                                    {<install_dirs>}
                                    {($ Id.VSub_Number 1)}
                                    {(DQ ($ Id.VSub_Number 2))}
                                    {($ Id.VSub_DollarName dir)}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              ops: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<1>})]
                  spids: [2926 2941]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'args='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'args='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'args='> name:args)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (command.Simple
                            blame_tok: <stat>
                            more_env: []
                            words: [
                              {<stat>}
                              {<-f>}
                              {(DQ <'-o %Su -g %Sg -m %0Mp%0Lp'>)}
                              {($ Id.VSub_Number 1) <'/'> ($ Id.VSub_DollarName dir)}
                            ]
                            redirects: []
                            do_fork: T
                          )
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <log>
              more_env: []
              words: [
                {<log>}
                {
                  (DQ <'install -d '> ($ Id.VSub_DollarName args) <' '> (${ Id.VSub_Number 2) 
                    ($ Id.VSub_DollarName dir)
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-z>}
                                {(DQ ($ Id.VSub_DollarName dryrun))}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <install>
                      more_env: []
                      words: [
                        {<install>}
                        {<-d>}
                        {($ Id.VSub_DollarName args)}
                        {(${ Id.VSub_Number 2) ($ Id.VSub_DollarName dir)}
                      ]
                      redirects: [
                        (Redir
                          op: <Id.Redir_GreatAnd '>&'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {<3>}
                        )
                        (Redir
                          op: <Id.Redir_GreatAnd '2>&'>
                          loc: (redir_loc.Fd fd:2)
                          arg: {<1>}
                        )
                      ]
                      do_fork: T
                    )
                  ]
                  spids: [2993 3006]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>})
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <post_install_file>
      name: post_install_file
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: (case_arg.Word w:{($ Id.VSub_Number 1)})
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <'/etc/mail/aliases'>
                  pattern: (pat.Words words:[{<'/etc/mail/aliases'>}])
                  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.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <Id.Lit_LBracket '['>
                                      more_env: []
                                      words: [
                                        {<Id.Lit_LBracket '['>}
                                        {<-z>}
                                        {(DQ ($ Id.VSub_DollarName DESTDIR))}
                                        {<Id.Lit_RBracket ']'>}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <log>
                              more_env: []
                              words: [{<log>} {(DQ <newaliases>)}]
                              redirects: []
                              do_fork: T
                            )
                            (command.If
                              if_kw: <Id.KW_If if>
                              arms: [
                                (IfArm
                                  keyword: <Id.KW_If if>
                                  cond: 
                                    (condition.Shell
                                      commands: [
                                        (command.Sentence
                                          child: 
                                            (command.Simple
                                              blame_tok: <Id.Lit_LBracket '['>
                                              more_env: []
                                              words: [
                                                {<Id.Lit_LBracket '['>}
                                                {<-z>}
                                                {(DQ ($ Id.VSub_DollarName dryrun))}
                                                {<Id.Lit_RBracket ']'>}
                                              ]
                                              redirects: []
                                              do_fork: T
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  then_kw: <Id.KW_Then then>
                                  action: [
                                    (command.Simple
                                      blame_tok: <newaliases>
                                      more_env: []
                                      words: [{<newaliases>}]
                                      redirects: [
                                        (Redir
                                          op: <Id.Redir_GreatAnd '>&'>
                                          loc: (redir_loc.Fd fd:1)
                                          arg: {<3>}
                                        )
                                        (Redir
                                          op: <Id.Redir_GreatAnd '2>&'>
                                          loc: (redir_loc.Fd fd:2)
                                          arg: {<1>}
                                        )
                                      ]
                                      do_fork: T
                                    )
                                  ]
                                  spids: [3094 3107]
                                )
                              ]
                              else_action: []
                              fi_kw: <Id.KW_Fi fi>
                              redirects: []
                            )
                          ]
                          spids: [3071 3084]
                        )
                      ]
                      else_kw: <Id.KW_Else else>
                      else_action: [
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 'NEWALIAS_WARN='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 'NEWALIAS_WARN='>
                              lhs: 
                                (sh_lhs_expr.Name
                                  left: <Id.Lit_VarLike 'NEWALIAS_WARN='>
                                  name: NEWALIAS_WARN
                                )
                              op: assign_op.Equal
                              rhs: {<yes>}
                            )
                          ]
                          redirects: []
                        )
                      ]
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <'/etc/login.conf'>
                  pattern: (pat.Words words:[{<'/etc/login.conf'>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <log>
                      more_env: []
                      words: [
                        {<log>}
                        {(DQ <'cap_mkdb '> (${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1))}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <Id.Lit_LBracket '['>
                                      more_env: []
                                      words: [
                                        {<Id.Lit_LBracket '['>}
                                        {<-z>}
                                        {(DQ ($ Id.VSub_DollarName dryrun))}
                                        {<Id.Lit_RBracket ']'>}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <cap_mkdb>
                              more_env: []
                              words: [{<cap_mkdb>} {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)}]
                              redirects: [
                                (Redir
                                  op: <Id.Redir_GreatAnd '>&'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {<3>}
                                )
                                (Redir
                                  op: <Id.Redir_GreatAnd '2>&'>
                                  loc: (redir_loc.Fd fd:2)
                                  arg: {<1>}
                                )
                              ]
                              do_fork: T
                            )
                          ]
                          spids: [3150 3163]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <'/etc/master.passwd'>
                  pattern: (pat.Words words:[{<'/etc/master.passwd'>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <log>
                      more_env: []
                      words: [
                        {<log>}
                        {
                          (DQ <'pwd_mkdb -p -d '> ($ Id.VSub_DollarName DESTDIR) <'/etc '> 
                            (${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <Id.Lit_LBracket '['>
                                      more_env: []
                                      words: [
                                        {<Id.Lit_LBracket '['>}
                                        {<-z>}
                                        {(DQ ($ Id.VSub_DollarName dryrun))}
                                        {<Id.Lit_RBracket ']'>}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <pwd_mkdb>
                              more_env: []
                              words: [
                                {<pwd_mkdb>}
                                {<-p>}
                                {<-d>}
                                {($ Id.VSub_DollarName DESTDIR) <'/etc'>}
                                {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)}
                              ]
                              redirects: [
                                (Redir
                                  op: <Id.Redir_GreatAnd '>&'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {<3>}
                                )
                                (Redir
                                  op: <Id.Redir_GreatAnd '2>&'>
                                  loc: (redir_loc.Fd fd:2)
                                  arg: {<1>}
                                )
                              ]
                              do_fork: T
                            )
                          ]
                          spids: [3203 3216]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <'/etc/motd'>
                  pattern: (pat.Words words:[{<'/etc/motd'>}])
                  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.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <Id.Lit_LBracket '['>
                                      more_env: []
                                      words: [
                                        {<Id.Lit_LBracket '['>}
                                        {<-z>}
                                        {(DQ ($ Id.VSub_DollarName DESTDIR))}
                                        {<Id.Lit_RBracket ']'>}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <log>
                              more_env: []
                              words: [{<log>} {(DQ <'sh /etc/rc.d/motd start'>)}]
                              redirects: []
                              do_fork: T
                            )
                            (command.If
                              if_kw: <Id.KW_If if>
                              arms: [
                                (IfArm
                                  keyword: <Id.KW_If if>
                                  cond: 
                                    (condition.Shell
                                      commands: [
                                        (command.Sentence
                                          child: 
                                            (command.Simple
                                              blame_tok: <Id.Lit_LBracket '['>
                                              more_env: []
                                              words: [
                                                {<Id.Lit_LBracket '['>}
                                                {<-z>}
                                                {(DQ ($ Id.VSub_DollarName dryrun))}
                                                {<Id.Lit_RBracket ']'>}
                                              ]
                                              redirects: []
                                              do_fork: T
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  then_kw: <Id.KW_Then then>
                                  action: [
                                    (command.Simple
                                      blame_tok: <sh>
                                      more_env: []
                                      words: [{<sh>} {<'/etc/rc.d/motd'>} {<start>}]
                                      redirects: [
                                        (Redir
                                          op: <Id.Redir_GreatAnd '>&'>
                                          loc: (redir_loc.Fd fd:1)
                                          arg: {<3>}
                                        )
                                        (Redir
                                          op: <Id.Redir_GreatAnd '2>&'>
                                          loc: (redir_loc.Fd fd:2)
                                          arg: {<1>}
                                        )
                                      ]
                                      do_fork: T
                                    )
                                  ]
                                  spids: [3287 3300]
                                )
                              ]
                              else_action: []
                              fi_kw: <Id.KW_Fi fi>
                              redirects: []
                            )
                          ]
                          spids: [3264 3277]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <'/etc/services'>
                  pattern: (pat.Words words:[{<'/etc/services'>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <log>
                      more_env: []
                      words: [
                        {<log>}
                        {
                          (DQ <'services_mkdb -q -o '> ($ Id.VSub_DollarName DESTDIR) 
                            <'/var/db/services.db'>
                          )
                        }
                        {(DQ (${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1))}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <Id.Lit_LBracket '['>
                                      more_env: []
                                      words: [
                                        {<Id.Lit_LBracket '['>}
                                        {<-z>}
                                        {(DQ ($ Id.VSub_DollarName dryrun))}
                                        {<Id.Lit_RBracket ']'>}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <services_mkdb>
                              more_env: []
                              words: [
                                {<services_mkdb>}
                                {<-q>}
                                {<-o>}
                                {($ Id.VSub_DollarName DESTDIR) <'/var/db/services.db'>}
                                {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)}
                              ]
                              redirects: [
                                (Redir
                                  op: <Id.Redir_GreatAnd '>&'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {<3>}
                                )
                                (Redir
                                  op: <Id.Redir_GreatAnd '2>&'>
                                  loc: (redir_loc.Fd fd:2)
                                  arg: {<1>}
                                )
                              ]
                              do_fork: T
                            )
                          ]
                          spids: [3347 3360]
                        )
                      ]
                      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: <install_new>
      name: install_new
      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.Sentence
                          child: 
                            (command.Pipeline
                              negated: <Id.KW_Bang '!'>
                              children: [
                                (command.Simple
                                  blame_tok: <install_dirs>
                                  more_env: []
                                  words: [
                                    {<install_dirs>}
                                    {($ Id.VSub_DollarName NEWTREE)}
                                    {(DQ ($ Id.VSub_DollarName DESTDIR))}
                                    {($ Id.VSub_Number 1)}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              ops: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<1>})]
                  spids: [3417 3432]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <log>
              more_env: []
              words: [
                {<log>}
                {
                  (DQ <'cp -Rp '> (${ Id.VSub_Name NEWTREE) ($ Id.VSub_Number 1) <' '> 
                    (${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-z>}
                                {(DQ ($ Id.VSub_DollarName dryrun))}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <cp>
                      more_env: []
                      words: [
                        {<cp>}
                        {<-Rp>}
                        {(${ Id.VSub_Name NEWTREE) ($ Id.VSub_Number 1)}
                        {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)}
                      ]
                      redirects: [
                        (Redir
                          op: <Id.Redir_GreatAnd '>&'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {<3>}
                        )
                        (Redir
                          op: <Id.Redir_GreatAnd '2>&'>
                          loc: (redir_loc.Fd fd:2)
                          arg: {<1>}
                        )
                      ]
                      do_fork: T
                    )
                  ]
                  spids: [3459 3472]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <post_install_file>
              more_env: []
              words: [{<post_install_file>} {($ Id.VSub_Number 1)}]
              redirects: []
              do_fork: T
            )
            (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>})
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <install_resolved>
      name: install_resolved
      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.Sentence
                          child: 
                            (command.Pipeline
                              negated: <Id.KW_Bang '!'>
                              children: [
                                (command.Simple
                                  blame_tok: <install_dirs>
                                  more_env: []
                                  words: [
                                    {<install_dirs>}
                                    {($ Id.VSub_DollarName NEWTREE)}
                                    {(DQ ($ Id.VSub_DollarName DESTDIR))}
                                    {($ Id.VSub_Number 1)}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              ops: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<1>})]
                  spids: [3543 3558]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <log>
              more_env: []
              words: [
                {<log>}
                {
                  (DQ <'cp -Rp '> (${ Id.VSub_Name CONFLICTS) ($ Id.VSub_Number 1) <' '> 
                    (${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <cp>
              more_env: []
              words: [
                {<cp>}
                {<-Rp>}
                {(${ Id.VSub_Name CONFLICTS) ($ Id.VSub_Number 1)}
                {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)}
              ]
              redirects: [
                (Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<3>})
                (Redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>})
              ]
              do_fork: T
            )
            (command.Simple
              blame_tok: <post_install_file>
              more_env: []
              words: [{<post_install_file>} {($ Id.VSub_Number 1)}]
              redirects: []
              do_fork: T
            )
            (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>})
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <new_conflict>
      name: new_conflict
      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.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-n>}
                                {(DQ ($ Id.VSub_DollarName dryrun))}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return>)]
                  spids: [3639 3652]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <install_dirs>
              more_env: []
              words: [
                {<install_dirs>}
                {($ Id.VSub_DollarName NEWTREE)}
                {($ Id.VSub_DollarName CONFLICTS)}
                {($ Id.VSub_Number 1)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <diff>
              more_env: []
              words: [
                {<diff>}
                {<--changed-group-format> <Id.Lit_Equals '='> 
                  (SQ <'<<<<<<< (local)\n'> <'%<=======\n'> <'%>>>>>>>> (stock)\n'>)
                }
                {($ Id.VSub_DollarName DESTDIR) <'/'> ($ Id.VSub_Number 1)}
                {($ Id.VSub_DollarName NEWTREE) <'/'> ($ Id.VSub_Number 1)}
              ]
              redirects: [
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName CONFLICTS) <'/'> ($ Id.VSub_Number 1)}
                )
              ]
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <remove_old>
      name: remove_old
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <log>
              more_env: []
              words: [{<log>} {(DQ <'rm -f '> (${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1))}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-z>}
                                {(DQ ($ Id.VSub_DollarName dryrun))}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <rm>
                      more_env: []
                      words: [{<rm>} {<-f>} {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)}]
                      redirects: [
                        (Redir
                          op: <Id.Redir_GreatAnd '>&'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {<3>}
                        )
                        (Redir
                          op: <Id.Redir_GreatAnd '2>&'>
                          loc: (redir_loc.Fd fd:2)
                          arg: {<1>}
                        )
                      ]
                      do_fork: T
                    )
                  ]
                  spids: [3725 3738]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ <'  D '> ($ Id.VSub_Number 1))}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <update_unmodified>
      name: update_unmodified
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<new>} {<old>}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-d>}
                                {($ Id.VSub_DollarName DESTDIR) <'/'> ($ Id.VSub_Number 1)}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  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.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <empty_destdir>
                                      more_env: []
                                      words: [{<empty_destdir>} {($ Id.VSub_Number 1)}]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <log>
                              more_env: []
                              words: [
                                {<log>}
                                {(DQ <'rmdir '> (${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1))}
                              ]
                              redirects: []
                              do_fork: T
                            )
                            (command.If
                              if_kw: <Id.KW_If if>
                              arms: [
                                (IfArm
                                  keyword: <Id.KW_If if>
                                  cond: 
                                    (condition.Shell
                                      commands: [
                                        (command.Sentence
                                          child: 
                                            (command.Simple
                                              blame_tok: <Id.Lit_LBracket '['>
                                              more_env: []
                                              words: [
                                                {<Id.Lit_LBracket '['>}
                                                {<-z>}
                                                {(DQ ($ Id.VSub_DollarName dryrun))}
                                                {<Id.Lit_RBracket ']'>}
                                              ]
                                              redirects: []
                                              do_fork: T
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  then_kw: <Id.KW_Then then>
                                  action: [
                                    (command.Simple
                                      blame_tok: <rmdir>
                                      more_env: []
                                      words: [
                                        {<rmdir>}
                                        {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)}
                                      ]
                                      redirects: [
                                        (Redir
                                          op: <Id.Redir_GreatAnd '>&'>
                                          loc: (redir_loc.Fd fd:1)
                                          arg: {<3>}
                                        )
                                        (Redir
                                          op: <Id.Redir_GreatAnd '2>&'>
                                          loc: (redir_loc.Fd fd:2)
                                          arg: {<1>}
                                        )
                                      ]
                                      do_fork: T
                                    )
                                  ]
                                  spids: [3851 3864]
                                )
                              ]
                              else_action: []
                              fi_kw: <Id.KW_Fi fi>
                              redirects: []
                            )
                          ]
                          spids: [3830 3837]
                        )
                      ]
                      else_kw: <Id.KW_Else else>
                      else_action: [
                        (command.ControlFlow
                          keyword: <Id.ControlFlow_Return return>
                          arg_word: {<1>}
                        )
                      ]
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  spids: [3814 3827]
                )
                (IfArm
                  keyword: <Id.KW_Elif elif>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Pipeline
                              negated: <Id.KW_Bang '!'>
                              children: [
                                (command.Simple
                                  blame_tok: <Id.Lit_LBracket '['>
                                  more_env: []
                                  words: [
                                    {<Id.Lit_LBracket '['>}
                                    {<-f>}
                                    {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)}
                                    {<-a>}
                                    {<-f>}
                                    {(${ Id.VSub_Name NEWTREE) ($ Id.VSub_Number 1)}
                                    {<Id.Lit_RBracket ']'>}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              ops: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <log>
                      more_env: []
                      words: [{<log>} {(DQ <'rm -f '> (${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1))}]
                      redirects: []
                      do_fork: T
                    )
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <Id.Lit_LBracket '['>
                                      more_env: []
                                      words: [
                                        {<Id.Lit_LBracket '['>}
                                        {<-z>}
                                        {(DQ ($ Id.VSub_DollarName dryrun))}
                                        {<Id.Lit_RBracket ']'>}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <rm>
                              more_env: []
                              words: [{<rm>} {<-f>} {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)}]
                              redirects: [
                                (Redir
                                  op: <Id.Redir_GreatAnd '>&'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {<3>}
                                )
                                (Redir
                                  op: <Id.Redir_GreatAnd '2>&'>
                                  loc: (redir_loc.Fd fd:2)
                                  arg: {<1>}
                                )
                              ]
                              do_fork: T
                            )
                          ]
                          spids: [3947 3960]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  spids: [3908 3933]
                )
              ]
              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.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-d>}
                                {($ Id.VSub_DollarName NEWTREE) <'/'> ($ Id.VSub_Number 1)}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  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.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <empty_dir>
                                      more_env: []
                                      words: [
                                        {<empty_dir>}
                                        {($ Id.VSub_DollarName NEWTREE) <'/'> ($ Id.VSub_Number 1)}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <echo>
                              more_env: []
                              words: [{<echo>} {(DQ <'  D '> ($ Id.VSub_DollarName file))}]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          spids: [4018 4027]
                        )
                      ]
                      else_kw: <Id.KW_Else else>
                      else_action: [
                        (command.Simple
                          blame_tok: <echo>
                          more_env: []
                          words: [{<echo>} {(DQ <'  U '> ($ Id.VSub_DollarName file))}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  spids: [4002 4015]
                )
                (IfArm
                  keyword: <Id.KW_Elif elif>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <install_new>
                              more_env: []
                              words: [{<install_new>} {($ Id.VSub_Number 1)}]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'  U '> ($ Id.VSub_DollarName file))}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [4052 4059]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>})
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <update_freebsdid>
      name: update_freebsdid
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<new>} {<dest>} {<file>}]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'new='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'new='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'new='> name:new)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (command.Simple
                            blame_tok: <grep>
                            more_env: []
                            words: [
                              {<grep>}
                              {<-c>}
                              {(SQ <'$FreeBSD.*$'>)}
                              {(${ Id.VSub_Name NEWTREE) ($ Id.VSub_Number 1)}
                            ]
                            redirects: []
                            do_fork: T
                          )
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'dest='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'dest='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dest='> name:dest)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (command.Simple
                            blame_tok: <grep>
                            more_env: []
                            words: [
                              {<grep>}
                              {<-c>}
                              {(SQ <'$FreeBSD.*$'>)}
                              {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)}
                            ]
                            redirects: []
                            do_fork: T
                          )
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {(DQ ($ Id.VSub_DollarName dest))}
                                {<-eq>}
                                {<0>}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>})]
                  spids: [4175 4190]
                )
              ]
              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.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {(DQ ($ Id.VSub_DollarName dest))}
                                {<-ne>}
                                {<1>}
                                {<-o>}
                                {(DQ ($ Id.VSub_DollarName dest))}
                                {<-ne>}
                                {<1>}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<1>})]
                  spids: [4201 4226]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'new='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'new='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'new='> name:new)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (command.Simple
                            blame_tok: <grep>
                            more_env: []
                            words: [
                              {<grep>}
                              {(SQ <'$FreeBSD.*$'>)}
                              {(${ Id.VSub_Name NEWTREE) ($ Id.VSub_Number 1)}
                            ]
                            redirects: []
                            do_fork: T
                          )
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'dest='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'dest='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dest='> name:dest)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (command.Simple
                            blame_tok: <grep>
                            more_env: []
                            words: [
                              {<grep>}
                              {(SQ <'$FreeBSD.*$'>)}
                              {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)}
                            ]
                            redirects: []
                            do_fork: T
                          )
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {(DQ ($ Id.VSub_DollarName new))}
                                {<Id.Lit_Equals '='>}
                                {(DQ ($ Id.VSub_DollarName dest))}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>})]
                  spids: [4288 4305]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (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: 
                    {
                      (CommandSub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (command.Simple
                            blame_tok: <mktemp>
                            more_env: []
                            words: [{<mktemp>} {($ Id.VSub_DollarName WORKDIR) <'/etcupdate-XXXXXXX'>}]
                            redirects: []
                            do_fork: T
                          )
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <awk>
              more_env: []
              words: [
                {<awk>}
                {(SQ <'/\\$FreeBSD.*\\$/ { exit } { print }'>)}
                {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)}
              ]
              redirects: [
                (Redir
                  op: <Id.Redir_DGreat '>>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName file)}
                )
              ]
              do_fork: T
            )
            (command.Simple
              blame_tok: <awk>
              more_env: []
              words: [
                {<awk>}
                {(SQ <'/\\$FreeBSD.*\\$/ { print }'>)}
                {(${ Id.VSub_Name NEWTREE) ($ Id.VSub_Number 1)}
              ]
              redirects: [
                (Redir
                  op: <Id.Redir_DGreat '>>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName file)}
                )
              ]
              do_fork: T
            )
            (command.Simple
              blame_tok: <awk>
              more_env: []
              words: [
                {<awk>}
                {(SQ <'/\\$FreeBSD.*\\$/ { ok = 1; next } { if (ok) print }'>)}
                {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)}
              ]
              redirects: [
                (Redir
                  op: <Id.Redir_DGreat '>>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName file)}
                )
              ]
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Pipeline
                              negated: <Id.KW_Bang '!'>
                              children: [
                                (command.Simple
                                  blame_tok: <fbsdid_only>
                                  more_env: []
                                  words: [
                                    {<fbsdid_only>}
                                    {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)}
                                    {($ Id.VSub_DollarName file)}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              ops: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <rm>
                      more_env: []
                      words: [{<rm>} {<-f>} {($ Id.VSub_DollarName file)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Return return>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [4411 4425]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <log>
              more_env: []
              words: [
                {<log>}
                {
                  (DQ <'cp '> ($ Id.VSub_DollarName file) <' '> (${ Id.VSub_Name DESTDIR) 
                    ($ Id.VSub_Number 1)
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-z>}
                                {(DQ ($ Id.VSub_DollarName dryrun))}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <cp>
                      more_env: []
                      words: [
                        {<cp>}
                        {($ Id.VSub_DollarName file)}
                        {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)}
                      ]
                      redirects: [
                        (Redir
                          op: <Id.Redir_GreatAnd '>&'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {<3>}
                        )
                        (Redir
                          op: <Id.Redir_GreatAnd '2>&'>
                          loc: (redir_loc.Fd fd:2)
                          arg: {<1>}
                        )
                      ]
                      do_fork: T
                    )
                  ]
                  spids: [4457 4470]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <rm>
              more_env: []
              words: [{<rm>} {<-f>} {($ Id.VSub_DollarName file)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <post_install_file>
              more_env: []
              words: [{<post_install_file>} {($ Id.VSub_Number 1)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ <'  M '> ($ Id.VSub_Number 1))}]
              redirects: []
              do_fork: T
            )
            (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>})
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <merge_file>
      name: merge_file
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<res>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <diff3>
              more_env: []
              words: [
                {<diff3>}
                {<-E>}
                {<-m>}
                {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)}
                {(${ Id.VSub_Name OLDTREE) ($ Id.VSub_Number 1)}
                {(${ Id.VSub_Name NEWTREE) ($ Id.VSub_Number 1)}
              ]
              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:{<3>})
              ]
              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.Case
              case_kw: <Id.KW_Case case>
              to_match: (case_arg.Word w:{($ Id.VSub_DollarName res)})
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <0>
                  pattern: (pat.Words words:[{<0>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <log>
                      more_env: []
                      words: [
                        {<log>}
                        {
                          (DQ <'diff3 -E -m '> (${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1) <' '> 
                            (${ Id.VSub_Name OLDTREE) ($ Id.VSub_Number 1) <' '> (${ Id.VSub_Name NEWTREE) ($ Id.VSub_Number 1)
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <Id.Lit_LBracket '['>
                                      more_env: []
                                      words: [
                                        {<Id.Lit_LBracket '['>}
                                        {<-z>}
                                        {(DQ ($ Id.VSub_DollarName dryrun))}
                                        {<Id.Lit_RBracket ']'>}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'temp='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'temp='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'temp='> name:temp)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (CommandSub
                                        left_token: <Id.Left_DollarParen '$('>
                                        child: 
                                          (command.Simple
                                            blame_tok: <mktemp>
                                            more_env: []
                                            words: [{<mktemp>} {<-t>} {<etcupdate>}]
                                            redirects: []
                                            do_fork: T
                                          )
                                        right: <Id.Eof_RParen _>
                                      )
                                    }
                                )
                              ]
                              redirects: []
                            )
                            (command.Simple
                              blame_tok: <diff3>
                              more_env: []
                              words: [
                                {<diff3>}
                                {<-E>}
                                {<-m>}
                                {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)}
                                {(${ Id.VSub_Name OLDTREE) ($ Id.VSub_Number 1)}
                                {(${ Id.VSub_Name NEWTREE) ($ Id.VSub_Number 1)}
                              ]
                              redirects: [
                                (Redir
                                  op: <Id.Redir_Great '>'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {(${ Id.VSub_Name temp)}
                                )
                              ]
                              do_fork: T
                            )
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>} {(${ Id.VSub_Name temp)}]
                              redirects: [
                                (Redir
                                  op: <Id.Redir_Great '>'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)}
                                )
                              ]
                              do_fork: T
                            )
                            (command.Simple
                              blame_tok: <rm>
                              more_env: []
                              words: [{<rm>} {<-f>} {(${ Id.VSub_Name temp)}]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          spids: [4627 4640]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <post_install_file>
                      more_env: []
                      words: [{<post_install_file>} {($ Id.VSub_Number 1)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'  M '> ($ Id.VSub_Number 1))}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <1>
                  pattern: (pat.Words words:[{<1>}])
                  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.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <Id.Lit_LBracket '['>
                                      more_env: []
                                      words: [
                                        {<Id.Lit_LBracket '['>}
                                        {<-z>}
                                        {(DQ ($ Id.VSub_DollarName dryrun))}
                                        {<Id.Lit_RBracket ']'>}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <install_dirs>
                              more_env: []
                              words: [
                                {<install_dirs>}
                                {($ Id.VSub_DollarName NEWTREE)}
                                {($ Id.VSub_DollarName CONFLICTS)}
                                {($ Id.VSub_Number 1)}
                              ]
                              redirects: []
                              do_fork: T
                            )
                            (command.Simple
                              blame_tok: <log>
                              more_env: []
                              words: [
                                {<log>}
                                {
                                  (DQ <'diff3 -m -A '> (${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1) 
                                    <' '> (${ Id.VSub_Name CONFLICTS) ($ Id.VSub_Number 1)
                                  )
                                }
                              ]
                              redirects: []
                              do_fork: T
                            )
                            (command.Simple
                              blame_tok: <diff3>
                              more_env: []
                              words: [
                                {<diff3>}
                                {<-m>}
                                {<-A>}
                                {<-L>}
                                {(DQ <yours>)}
                                {<-L>}
                                {(DQ <original>)}
                                {<-L>}
                                {(DQ <new>)}
                                {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)}
                                {(${ Id.VSub_Name OLDTREE) ($ Id.VSub_Number 1)}
                                {(${ Id.VSub_Name NEWTREE) ($ Id.VSub_Number 1)}
                              ]
                              redirects: [
                                (Redir
                                  op: <Id.Redir_Great '>'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {(${ Id.VSub_Name CONFLICTS) ($ Id.VSub_Number 1)}
                                )
                              ]
                              do_fork: T
                            )
                          ]
                          spids: [4739 4752]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'  C '> ($ Id.VSub_Number 1))}]
                      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: <panic>
                      more_env: []
                      words: [{<panic>} {(DQ <'merge failed with status '> ($ Id.VSub_DollarName res))}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <has_conflicts>
      name: has_conflicts
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <egrep>
              more_env: []
              words: [
                {<egrep>}
                {<-q>}
                {(SQ <'^(<{7}|\\|{7}|={7}|>{7}) '>)}
                {($ Id.VSub_DollarName CONFLICTS) <'/'> ($ Id.VSub_Number 1)}
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <resolve_conflict>
      name: resolve_conflict
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<command>} {<junk>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ <'Resolving conflict in \''> ($ Id.VSub_Number 1) <'\':'>)}]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'edit='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'edit='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'edit='> name:edit)
                  op: assign_op.Equal
                  rhs: (rhs_word__Empty)
                )
              ]
              redirects: []
            )
            (command.WhileUntil
              keyword: <Id.KW_While while>
              cond: 
                (condition.Shell
                  commands: [
                    (command.Sentence
                      child: 
                        (command.Simple
                          blame_tok: <true>
                          more_env: []
                          words: [{<true>}]
                          redirects: []
                          do_fork: T
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                )
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {<-n>} {(DQ <'Select: (p) postpone, (df) diff-full, (e) edit,'>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.Pipeline
                                      negated: <Id.KW_Bang '!'>
                                      children: [
                                        (command.Simple
                                          blame_tok: <has_conflicts>
                                          more_env: []
                                          words: [{<has_conflicts>} {($ Id.VSub_Number 1)}]
                                          redirects: []
                                          do_fork: T
                                        )
                                      ]
                                      ops: []
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <echo>
                              more_env: []
                              words: [{<echo>} {<-n>} {(DQ <' (r) resolved,'>)}]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          spids: [4974 4983]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {<-n>} {(DQ <'        (h) help for more options: '>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <read>
                      more_env: []
                      words: [{<read>} {<command>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{($ Id.VSub_DollarName command)})
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <df>
                          pattern: (pat.Words words:[{<df>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Simple
                              blame_tok: <diff>
                              more_env: []
                              words: [
                                {<diff>}
                                {<-u>}
                                {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_Number 1)}
                                {(${ Id.VSub_Name CONFLICTS) ($ Id.VSub_Number 1)}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <e>
                          pattern: (pat.Words words:[{<e>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Simple
                              blame_tok: <Id.VSub_DollarName '$EDITOR'>
                              more_env: []
                              words: [
                                {($ Id.VSub_DollarName EDITOR)}
                                {(${ Id.VSub_Name CONFLICTS) ($ Id.VSub_Number 1)}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <h>
                          pattern: (pat.Words words:[{<h>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>}]
                              redirects: [
                                (Redir
                                  op: <Id.Redir_DLess '<<'>
                                  loc: (redir_loc.Fd fd:0)
                                  arg: 
                                    (redir_param.HereDoc
                                      here_begin: {<EOF>}
                                      here_end_tok: <Id.Undefined_Tok ''>
                                      stdin_parts: [
                                        <'  (p)  postpone    - ignore this conflict for now\n'>
                                        <
'  (df) diff-full   - show all changes made to merged file\n'
                                        >
                                        <'  (e)  edit        - change merged file in an editor\n'>
                                        <'  (r)  resolved    - accept merged version of file\n'>
                                        <
'  (mf) mine-full   - accept local version of entire file (ignore new changes)\n'
                                        >
                                        <
'  (tf) theirs-full - accept new version of entire file (lose local changes)\n'
                                        >
                                        <'  (h)  help        - show this list\n'>
                                      ]
                                    )
                                )
                              ]
                              do_fork: T
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <mf>
                          pattern: (pat.Words words:[{<mf>}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Simple
                              blame_tok: <rm>
                              more_env: []
                              words: [{<rm>} {(${ Id.VSub_Name CONFLICTS) ($ Id.VSub_Number 1)}]
                              redirects: []
                              do_fork: T
                            )
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Return return>
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <p>
                          pattern: (pat.Words words:[{<p>}])
                          middle: <Id.Right_CasePat _>
                          action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return>)]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <r>
                          pattern: (pat.Words words:[{<r>}])
                          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.Sentence
                                          child: 
                                            (command.Simple
                                              blame_tok: <has_conflicts>
                                              more_env: []
                                              words: [{<has_conflicts>} {($ Id.VSub_Number 1)}]
                                              redirects: []
                                              do_fork: T
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  then_kw: <Id.KW_Then then>
                                  action: [
                                    (command.Simple
                                      blame_tok: <echo>
                                      more_env: []
                                      words: [
                                        {<echo>}
                                        {
                                          (DQ <'File \''> ($ Id.VSub_Number 1) 
                                            <'\' still has conflicts,'>
                                          )
                                        }
                                        {(DQ <'are you sure? (y/n) '>)}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                    (command.Simple
                                      blame_tok: <read>
                                      more_env: []
                                      words: [{<read>} {<junk>}]
                                      redirects: []
                                      do_fork: T
                                    )
                                    (command.If
                                      if_kw: <Id.KW_If if>
                                      arms: [
                                        (IfArm
                                          keyword: <Id.KW_If if>
                                          cond: 
                                            (condition.Shell
                                              commands: [
                                                (command.Sentence
                                                  child: 
                                                    (command.Simple
                                                      blame_tok: <Id.Lit_LBracket '['>
                                                      more_env: []
                                                      words: [
                                                        {<Id.Lit_LBracket '['>}
                                                        {(DQ ($ Id.VSub_DollarName junk))}
                                                        {<Id.KW_Bang '!'> <Id.Lit_Equals '='>}
                                                        {(DQ <y>)}
                                                        {<Id.Lit_RBracket ']'>}
                                                      ]
                                                      redirects: []
                                                      do_fork: T
                                                    )
                                                  terminator: <Id.Op_Semi _>
                                                )
                                              ]
                                            )
                                          then_kw: <Id.KW_Then then>
                                          action: [
                                            (command.ControlFlow
                                              keyword: <Id.ControlFlow_Continue continue>
                                            )
                                          ]
                                          spids: [5163 5181]
                                        )
                                      ]
                                      else_action: []
                                      fi_kw: <Id.KW_Fi fi>
                                      redirects: []
                                    )
                                  ]
                                  spids: [5133 5140]
                                )
                              ]
                              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.Sentence
                                          child: 
                                            (command.Pipeline
                                              negated: <Id.KW_Bang '!'>
                                              children: [
                                                (command.Simple
                                                  blame_tok: <install_resolved>
                                                  more_env: []
                                                  words: [{<install_resolved>} {($ Id.VSub_Number 1)}]
                                                  redirects: []
                                                  do_fork: T
                                                )
                                              ]
                                              ops: []
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  then_kw: <Id.KW_Then then>
                                  action: [
                                    (command.Simple
                                      blame_tok: <panic>
                                      more_env: []
                                      words: [
                                        {<panic>}
                                        {(DQ <'Unable to install merged'>)}
                                        {(DQ <'version of '> ($ Id.VSub_Number 1))}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  ]
                                  spids: [5194 5203]
                                )
                              ]
                              else_action: []
                              fi_kw: <Id.KW_Fi fi>
                              redirects: []
                            )
                            (command.Simple
                              blame_tok: <rm>
                              more_env: []
                              words: [{<rm>} {(${ Id.VSub_Name CONFLICTS) ($ Id.VSub_Number 1)}]
                              redirects: []
                              do_fork: T
                            )
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Return return>
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <tf>
                          pattern: (pat.Words words:[{<tf>}])
                          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.Sentence
                                          child: 
                                            (command.Pipeline
                                              negated: <Id.KW_Bang '!'>
                                              children: [
                                                (command.Simple
                                                  blame_tok: <install_new>
                                                  more_env: []
                                                  words: [{<install_new>} {($ Id.VSub_Number 1)}]
                                                  redirects: []
                                                  do_fork: T
                                                )
                                              ]
                                              ops: []
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  then_kw: <Id.KW_Then then>
                                  action: [
                                    (command.Simple
                                      blame_tok: <panic>
                                      more_env: []
                                      words: [
                                        {<panic>}
                                        {(DQ <'Unable to install new'>)}
                                        {(DQ <'version of '> ($ Id.VSub_Number 1))}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  ]
                                  spids: [5253 5262]
                                )
                              ]
                              else_action: []
                              fi_kw: <Id.KW_Fi fi>
                              redirects: []
                            )
                            (command.Simple
                              blame_tok: <rm>
                              more_env: []
                              words: [{<rm>} {(${ Id.VSub_Name CONFLICTS) ($ Id.VSub_Number 1)}]
                              redirects: []
                              do_fork: T
                            )
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Return return>
                            )
                          ]
                          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: <echo>
                              more_env: []
                              words: [{<echo>} {(DQ <'Invalid command.'>)}]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <handle_removed_file>
      name: handle_removed_file
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<dest>} {<file>}]
              redirects: []
              do_fork: T
            )
            (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: {($ Id.VSub_Number 1)}
                )
              ]
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <ignore>
                              more_env: []
                              words: [{<ignore>} {($ Id.VSub_DollarName file)}]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <log>
                      more_env: []
                      words: [{<log>} {(DQ <'IGNORE: removed file '> ($ Id.VSub_DollarName file))}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow keyword:<Id.ControlFlow_Return return>)
                  ]
                  spids: [5373 5380]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <compare_fbsdid>
              more_env: []
              words: [
                {<compare_fbsdid>}
                {($ Id.VSub_DollarName DESTDIR) <'/'> ($ Id.VSub_DollarName file)}
                {($ Id.VSub_DollarName OLDTREE) <'/'> ($ Id.VSub_DollarName file)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: (case_arg.Word w:{($ Id.VSub_QMark '?')})
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <Id.VSub_DollarName '$COMPARE_EQUAL'>
                  pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_EQUAL)}])
                  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.Sentence
                                  child: 
                                    (command.Pipeline
                                      negated: <Id.KW_Bang '!'>
                                      children: [
                                        (command.Simple
                                          blame_tok: <Id.Lit_LBracket '['>
                                          more_env: []
                                          words: [
                                            {<Id.Lit_LBracket '['>}
                                            {<-d>}
                                            {($ Id.VSub_DollarName DESTDIR) <'/'> 
                                              ($ Id.VSub_DollarName file)
                                            }
                                            {<Id.Lit_RBracket ']'>}
                                          ]
                                          redirects: []
                                          do_fork: T
                                        )
                                      ]
                                      ops: []
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <remove_old>
                              more_env: []
                              words: [{<remove_old>} {($ Id.VSub_DollarName file)}]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          spids: [5420 5435]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.VSub_DollarName '$COMPARE_ONLYFIRST'>
                  pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_ONLYFIRST)}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <panic>
                      more_env: []
                      words: [{<panic>} {(DQ <'Removed file now missing'>)}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.VSub_DollarName '$COMPARE_ONLYSECOND'>
                  pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_ONLYSECOND)}])
                  middle: <Id.Right_CasePat _>
                  action: []
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.VSub_DollarName '$COMPARE_DIFFTYPE'>
                  pattern: 
                    (pat.Words
                      words: [
                        {($ Id.VSub_DollarName COMPARE_DIFFTYPE)}
                        {($ Id.VSub_DollarName COMPARE_DIFFLINKS)}
                        {($ Id.VSub_DollarName COMPARE_DIFFFILES)}
                      ]
                    )
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'dest='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'dest='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dest='> name:dest)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_Backtick '`'>
                                child: 
                                  (command.Simple
                                    blame_tok: <file_type>
                                    more_env: []
                                    words: [
                                      {<file_type>}
                                      {($ Id.VSub_DollarName DESTDIR) <'/'> 
                                        ($ Id.VSub_DollarName file)
                                      }
                                    ]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Backtick_Right '`'>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <warn>
                      more_env: []
                      words: [
                        {<warn>}
                        {
                          (DQ <'Modified '> ($ Id.VSub_DollarName dest) <' remains: '> 
                            ($ Id.VSub_DollarName file)
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <handle_removed_directory>
      name: handle_removed_directory
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<dir>}]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'dir='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'dir='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dir='> name:dir)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number 1)}
                )
              ]
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <ignore>
                              more_env: []
                              words: [{<ignore>} {($ Id.VSub_DollarName dir)}]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <log>
                      more_env: []
                      words: [{<log>} {(DQ <'IGNORE: removed dir '> ($ Id.VSub_DollarName dir))}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow keyword:<Id.ControlFlow_Return return>)
                  ]
                  spids: [5541 5548]
                )
              ]
              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.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-d>}
                                {($ Id.VSub_DollarName DESTDIR) <'/'> ($ Id.VSub_DollarName dir)}
                                {<-a>}
                                {<-d>}
                                {($ Id.VSub_DollarName OLDTREE) <'/'> ($ Id.VSub_DollarName dir)}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  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.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <empty_destdir>
                                      more_env: []
                                      words: [{<empty_destdir>} {($ Id.VSub_DollarName dir)}]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <log>
                              more_env: []
                              words: [
                                {<log>}
                                {(DQ <'rmdir '> (${ Id.VSub_Name DESTDIR) ($ Id.VSub_DollarName dir))}
                              ]
                              redirects: []
                              do_fork: T
                            )
                            (command.If
                              if_kw: <Id.KW_If if>
                              arms: [
                                (IfArm
                                  keyword: <Id.KW_If if>
                                  cond: 
                                    (condition.Shell
                                      commands: [
                                        (command.Sentence
                                          child: 
                                            (command.Simple
                                              blame_tok: <Id.Lit_LBracket '['>
                                              more_env: []
                                              words: [
                                                {<Id.Lit_LBracket '['>}
                                                {<-z>}
                                                {(DQ ($ Id.VSub_DollarName dryrun))}
                                                {<Id.Lit_RBracket ']'>}
                                              ]
                                              redirects: []
                                              do_fork: T
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  then_kw: <Id.KW_Then then>
                                  action: [
                                    (command.Simple
                                      blame_tok: <rmdir>
                                      more_env: []
                                      words: [
                                        {<rmdir>}
                                        {(${ Id.VSub_Name DESTDIR) ($ Id.VSub_DollarName dir)}
                                      ]
                                      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
                                    )
                                  ]
                                  spids: [5611 5624]
                                )
                              ]
                              else_action: []
                              fi_kw: <Id.KW_Fi fi>
                              redirects: []
                            )
                            (command.Simple
                              blame_tok: <echo>
                              more_env: []
                              words: [{<echo>} {(DQ <'  D '> ($ Id.VSub_DollarName dir))}]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          spids: [5590 5597]
                        )
                      ]
                      else_kw: <Id.KW_Else else>
                      else_action: [
                        (command.Simple
                          blame_tok: <warn>
                          more_env: []
                          words: [
                            {<warn>}
                            {(DQ <'Non-empty directory remains: '> ($ Id.VSub_DollarName dir))}
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  spids: [5566 5587]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <handle_modified_file>
      name: handle_modified_file
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<cmp>} {<dest>} {<file>} {<new>} {<newdestcmp>} {<old>}]
              redirects: []
              do_fork: T
            )
            (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: {($ Id.VSub_Number 1)}
                )
              ]
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <ignore>
                              more_env: []
                              words: [{<ignore>} {($ Id.VSub_DollarName file)}]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <log>
                      more_env: []
                      words: [{<log>} {(DQ <'IGNORE: modified file '> ($ Id.VSub_DollarName file))}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow keyword:<Id.ControlFlow_Return return>)
                  ]
                  spids: [5725 5732]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <compare>
              more_env: []
              words: [
                {<compare>}
                {($ Id.VSub_DollarName OLDTREE) <'/'> ($ Id.VSub_DollarName file)}
                {($ Id.VSub_DollarName NEWTREE) <'/'> ($ Id.VSub_DollarName file)}
              ]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'cmp='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'cmp='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'cmp='> name:cmp)
                  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.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {($ Id.VSub_DollarName cmp)}
                                {<-eq>}
                                {($ Id.VSub_DollarName COMPARE_EQUAL)}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return>)]
                  spids: [5765 5778]
                )
              ]
              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.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {($ Id.VSub_DollarName cmp)}
                                {<-eq>}
                                {($ Id.VSub_DollarName COMPARE_ONLYFIRST)}
                                {<-o>}
                                {($ Id.VSub_DollarName cmp)}
                                {<-eq>}
                                {($ Id.VSub_DollarName COMPARE_ONLYSECOND)}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <panic>
                      more_env: []
                      words: [{<panic>} {(DQ <'Changed file now missing'>)}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [5788 5809]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <compare>
              more_env: []
              words: [
                {<compare>}
                {($ Id.VSub_DollarName NEWTREE) <'/'> ($ Id.VSub_DollarName file)}
                {($ Id.VSub_DollarName DESTDIR) <'/'> ($ Id.VSub_DollarName file)}
              ]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'newdestcmp='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'newdestcmp='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'newdestcmp='> name:newdestcmp)
                  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.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {($ Id.VSub_DollarName newdestcmp)}
                                {<-eq>}
                                {($ Id.VSub_DollarName COMPARE_EQUAL)}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return>)]
                  spids: [5838 5851]
                )
              ]
              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.Sentence
                          child: 
                            (command.AndOr
                              children: [
                                (command.Simple
                                  blame_tok: <Id.Lit_LBracket '['>
                                  more_env: []
                                  words: [
                                    {<Id.Lit_LBracket '['>}
                                    {<-n>}
                                    {(DQ ($ Id.VSub_DollarName FREEBSD_ID))}
                                    {<-a>}
                                    {($ Id.VSub_DollarName newdestcmp)}
                                    {<-eq>}
                                    {($ Id.VSub_DollarName COMPARE_DIFFFILES)}
                                    {<Id.Lit_RBracket ']'>}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                                (command.Simple
                                  blame_tok: <fbsdid_only>
                                  more_env: []
                                  words: [
                                    {<fbsdid_only>}
                                    {($ Id.VSub_DollarName NEWTREE) <'/'> ($ Id.VSub_DollarName file)}
                                    {($ Id.VSub_DollarName DESTDIR) <'/'> ($ Id.VSub_DollarName file)}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              ops: [<Id.Op_DAmp _>]
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  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.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <update_unmodified>
                                      more_env: []
                                      words: [{<update_unmodified>} {($ Id.VSub_DollarName file)}]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return>)]
                          spids: [5911 5918]
                        )
                      ]
                      else_kw: <Id.KW_Else else>
                      else_action: [
                        (command.Simple
                          blame_tok: <panic>
                          more_env: []
                          words: [{<panic>} {(DQ <'Updating FreeBSD ID string failed'>)}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  spids: [5873 5908]
                )
              ]
              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.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <compare_fbsdid>
                              more_env: []
                              words: [
                                {<compare_fbsdid>}
                                {($ Id.VSub_DollarName OLDTREE) <'/'> ($ Id.VSub_DollarName file)}
                                {($ Id.VSub_DollarName DESTDIR) <'/'> ($ Id.VSub_DollarName file)}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  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.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <update_unmodified>
                                      more_env: []
                                      words: [{<update_unmodified>} {($ Id.VSub_DollarName file)}]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return>)]
                          spids: [5969 5976]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  spids: [5953 5966]
                )
              ]
              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.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {($ Id.VSub_DollarName newdestcmp)}
                                {<-eq>}
                                {($ Id.VSub_DollarName COMPARE_ONLYFIRST)}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  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.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <always_install>
                                      more_env: []
                                      words: [{<always_install>} {($ Id.VSub_DollarName file)}]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <log>
                              more_env: []
                              words: [{<log>} {(DQ <'ALWAYS: adding '> ($ Id.VSub_DollarName file))}]
                              redirects: []
                              do_fork: T
                            )
                            (command.If
                              if_kw: <Id.KW_If if>
                              arms: [
                                (IfArm
                                  keyword: <Id.KW_If if>
                                  cond: 
                                    (condition.Shell
                                      commands: [
                                        (command.Sentence
                                          child: 
                                            (command.Pipeline
                                              negated: <Id.KW_Bang '!'>
                                              children: [
                                                (command.Simple
                                                  blame_tok: <Id.Lit_LBracket '['>
                                                  more_env: []
                                                  words: [
                                                    {<Id.Lit_LBracket '['>}
                                                    {<-d>}
                                                    {($ Id.VSub_DollarName NEWTREE) <'/'> 
                                                      ($ Id.VSub_DollarName file)
                                                    }
                                                    {<Id.Lit_RBracket ']'>}
                                                  ]
                                                  redirects: []
                                                  do_fork: T
                                                )
                                              ]
                                              ops: []
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  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.Sentence
                                                  child: 
                                                    (command.Simple
                                                      blame_tok: <install_new>
                                                      more_env: []
                                                      words: [
                                                        {<install_new>}
                                                        {($ Id.VSub_DollarName file)}
                                                      ]
                                                      redirects: []
                                                      do_fork: T
                                                    )
                                                  terminator: <Id.Op_Semi _>
                                                )
                                              ]
                                            )
                                          then_kw: <Id.KW_Then then>
                                          action: [
                                            (command.Simple
                                              blame_tok: <echo>
                                              more_env: []
                                              words: [
                                                {<echo>}
                                                {(DQ <'  A '> ($ Id.VSub_DollarName file))}
                                              ]
                                              redirects: []
                                              do_fork: T
                                            )
                                          ]
                                          spids: [6053 6060]
                                        )
                                      ]
                                      else_action: []
                                      fi_kw: <Id.KW_Fi fi>
                                      redirects: []
                                    )
                                  ]
                                  spids: [6035 6050]
                                )
                              ]
                              else_action: []
                              fi_kw: <Id.KW_Fi fi>
                              redirects: []
                            )
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Return return>
                            )
                          ]
                          spids: [6017 6024]
                        )
                      ]
                      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.Sentence
                                  child: 
                                    (command.AndOr
                                      children: [
                                        (command.Simple
                                          blame_tok: <Id.Lit_LBracket '['>
                                          more_env: []
                                          words: [
                                            {<Id.Lit_LBracket '['>}
                                            {<-n>}
                                            {(DQ ($ Id.VSub_DollarName FREEBSD_ID))}
                                            {<-a>}
                                            {($ Id.VSub_DollarName cmp)}
                                            {<-eq>}
                                            {($ Id.VSub_DollarName COMPARE_DIFFFILES)}
                                            {<Id.Lit_RBracket ']'>}
                                          ]
                                          redirects: []
                                          do_fork: T
                                        )
                                        (command.Simple
                                          blame_tok: <fbsdid_only>
                                          more_env: []
                                          words: [
                                            {<fbsdid_only>}
                                            {($ Id.VSub_DollarName OLDTREE) <'/'> 
                                              ($ Id.VSub_DollarName file)
                                            }
                                            {($ Id.VSub_DollarName NEWTREE) <'/'> 
                                              ($ Id.VSub_DollarName file)
                                            }
                                          ]
                                          redirects: []
                                          do_fork: T
                                        )
                                      ]
                                      ops: [<Id.Op_DAmp _>]
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return>)]
                          spids: [6096 6131]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{($ Id.VSub_DollarName cmp)})
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <Id.VSub_DollarName '$COMPARE_DIFFTYPE'>
                          pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_DIFFTYPE)}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'old='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'old='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'old='> name:old)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (CommandSub
                                        left_token: <Id.Left_Backtick '`'>
                                        child: 
                                          (command.Simple
                                            blame_tok: <file_type>
                                            more_env: []
                                            words: [
                                              {<file_type>}
                                              {($ Id.VSub_DollarName OLDTREE) <'/'> 
                                                ($ Id.VSub_DollarName file)
                                              }
                                            ]
                                            redirects: []
                                            do_fork: T
                                          )
                                        right: <Id.Backtick_Right '`'>
                                      )
                                    }
                                )
                              ]
                              redirects: []
                            )
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'new='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'new='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'new='> name:new)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (CommandSub
                                        left_token: <Id.Left_Backtick '`'>
                                        child: 
                                          (command.Simple
                                            blame_tok: <file_type>
                                            more_env: []
                                            words: [
                                              {<file_type>}
                                              {($ Id.VSub_DollarName NEWTREE) <'/'> 
                                                ($ Id.VSub_DollarName file)
                                              }
                                            ]
                                            redirects: []
                                            do_fork: T
                                          )
                                        right: <Id.Backtick_Right '`'>
                                      )
                                    }
                                )
                              ]
                              redirects: []
                            )
                            (command.Simple
                              blame_tok: <warn>
                              more_env: []
                              words: [
                                {<warn>}
                                {
                                  (DQ <'Remove mismatch: '> ($ Id.VSub_DollarName file) <' ('> 
                                    ($ Id.VSub_DollarName old) <' became '> ($ Id.VSub_DollarName new) <')'>
                                  )
                                }
                              ]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <Id.VSub_DollarName '$COMPARE_DIFFLINKS'>
                          pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_DIFFLINKS)}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'old='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'old='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'old='> name:old)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (CommandSub
                                        left_token: <Id.Left_Backtick '`'>
                                        child: 
                                          (command.Simple
                                            blame_tok: <readlink>
                                            more_env: []
                                            words: [
                                              {<readlink>}
                                              {($ Id.VSub_DollarName OLDTREE) <'/'> 
                                                ($ Id.VSub_DollarName file)
                                              }
                                            ]
                                            redirects: []
                                            do_fork: T
                                          )
                                        right: <Id.Backtick_Right '`'>
                                      )
                                    }
                                )
                              ]
                              redirects: []
                            )
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'new='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'new='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'new='> name:new)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (CommandSub
                                        left_token: <Id.Left_Backtick '`'>
                                        child: 
                                          (command.Simple
                                            blame_tok: <readlink>
                                            more_env: []
                                            words: [
                                              {<readlink>}
                                              {($ Id.VSub_DollarName NEWTREE) <'/'> 
                                                ($ Id.VSub_DollarName file)
                                              }
                                            ]
                                            redirects: []
                                            do_fork: T
                                          )
                                        right: <Id.Backtick_Right '`'>
                                      )
                                    }
                                )
                              ]
                              redirects: []
                            )
                            (command.Simple
                              blame_tok: <warn>
                              more_env: []
                              words: [
                                {<warn>}
                                {
                                  (DQ <'Removed link changed: '> ($ Id.VSub_DollarName file) <' ('> 
                                    (word_part.EscapedLiteral
                                      token: <Id.Lit_EscapedChar '\\"'>
                                      ch: '"'
                                    ) ($ Id.VSub_DollarName old) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') 
                                    <' became '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') ($ Id.VSub_DollarName new) 
                                    (word_part.EscapedLiteral
                                      token: <Id.Lit_EscapedChar '\\"'>
                                      ch: '"'
                                    ) <')'>
                                  )
                                }
                              ]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <Id.VSub_DollarName '$COMPARE_DIFFFILES'>
                          pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_DIFFFILES)}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Simple
                              blame_tok: <warn>
                              more_env: []
                              words: [
                                {<warn>}
                                {(DQ <'Removed file changed: '> ($ Id.VSub_DollarName file))}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                    (command.ControlFlow keyword:<Id.ControlFlow_Return return>)
                  ]
                  spids: [5993 6006]
                )
              ]
              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.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <always_install>
                              more_env: []
                              words: [{<always_install>} {($ Id.VSub_DollarName file)}]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <log>
                      more_env: []
                      words: [{<log>} {(DQ <'ALWAYS: updating '> ($ Id.VSub_DollarName file))}]
                      redirects: []
                      do_fork: T
                    )
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <update_unmodified>
                                      more_env: []
                                      words: [{<update_unmodified>} {($ Id.VSub_DollarName file)}]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return>)]
                          spids: [6301 6308]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  spids: [6283 6290]
                )
              ]
              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.Sentence
                          child: 
                            (command.AndOr
                              children: [
                                (command.Simple
                                  blame_tok: <Id.Lit_LBracket '['>
                                  more_env: []
                                  words: [
                                    {<Id.Lit_LBracket '['>}
                                    {<-n>}
                                    {(DQ ($ Id.VSub_DollarName FREEBSD_ID))}
                                    {<-a>}
                                    {($ Id.VSub_DollarName cmp)}
                                    {<-eq>}
                                    {($ Id.VSub_DollarName COMPARE_DIFFFILES)}
                                    {<Id.Lit_RBracket ']'>}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                                (command.Simple
                                  blame_tok: <fbsdid_only>
                                  more_env: []
                                  words: [
                                    {<fbsdid_only>}
                                    {($ Id.VSub_DollarName OLDTREE) <'/'> ($ Id.VSub_DollarName file)}
                                    {($ Id.VSub_DollarName NEWTREE) <'/'> ($ Id.VSub_DollarName file)}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              ops: [<Id.Op_DAmp _>]
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  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.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <update_freebsdid>
                                      more_env: []
                                      words: [{<update_freebsdid>} {($ Id.VSub_DollarName file)}]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [(command.ControlFlow keyword:<Id.ControlFlow_Continue continue>)]
                          spids: [6371 6378]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  spids: [6333 6368]
                )
              ]
              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.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {($ Id.VSub_DollarName cmp)}
                                {<-eq>}
                                {($ Id.VSub_DollarName COMPARE_DIFFTYPE)}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Case
                      case_kw: <Id.KW_Case case>
                      to_match: (case_arg.Word w:{($ Id.VSub_DollarName newdestcmp)})
                      arms_start: <Id.KW_In in>
                      arms: [
                        (CaseArm
                          left: <Id.VSub_DollarName '$COMPARE_DIFFLINKS'>
                          pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_DIFFLINKS)}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'new='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'new='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'new='> name:new)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (CommandSub
                                        left_token: <Id.Left_Backtick '`'>
                                        child: 
                                          (command.Simple
                                            blame_tok: <readlink>
                                            more_env: []
                                            words: [
                                              {<readlink>}
                                              {($ Id.VSub_DollarName NEWTREE) <'/'> 
                                                ($ Id.VSub_DollarName file)
                                              }
                                            ]
                                            redirects: []
                                            do_fork: T
                                          )
                                        right: <Id.Backtick_Right '`'>
                                      )
                                    }
                                )
                              ]
                              redirects: []
                            )
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'dest='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'dest='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dest='> name:dest)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (CommandSub
                                        left_token: <Id.Left_Backtick '`'>
                                        child: 
                                          (command.Simple
                                            blame_tok: <readlink>
                                            more_env: []
                                            words: [
                                              {<readlink>}
                                              {($ Id.VSub_DollarName DESTDIR) <'/'> 
                                                ($ Id.VSub_DollarName file)
                                              }
                                            ]
                                            redirects: []
                                            do_fork: T
                                          )
                                        right: <Id.Backtick_Right '`'>
                                      )
                                    }
                                )
                              ]
                              redirects: []
                            )
                            (command.Simple
                              blame_tok: <warn>
                              more_env: []
                              words: [
                                {<warn>}
                                {
                                  (DQ <'New link conflict: '> ($ Id.VSub_DollarName file) <' ('> 
                                    (word_part.EscapedLiteral
                                      token: <Id.Lit_EscapedChar '\\"'>
                                      ch: '"'
                                    ) ($ Id.VSub_DollarName new) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' vs '> 
                                    (word_part.EscapedLiteral
                                      token: <Id.Lit_EscapedChar '\\"'>
                                      ch: '"'
                                    ) ($ Id.VSub_DollarName dest) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <')'>
                                  )
                                }
                              ]
                              redirects: []
                              do_fork: T
                            )
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Return return>
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                        (CaseArm
                          left: <Id.VSub_DollarName '$COMPARE_DIFFFILES'>
                          pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_DIFFFILES)}])
                          middle: <Id.Right_CasePat _>
                          action: [
                            (command.Simple
                              blame_tok: <new_conflict>
                              more_env: []
                              words: [{<new_conflict>} {($ Id.VSub_DollarName file)}]
                              redirects: []
                              do_fork: T
                            )
                            (command.Simple
                              blame_tok: <echo>
                              more_env: []
                              words: [{<echo>} {(DQ <'  C '> ($ Id.VSub_DollarName file))}]
                              redirects: []
                              do_fork: T
                            )
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Return return>
                            )
                          ]
                          right: <Id.Op_DSemi _>
                        )
                      ]
                      arms_end: <Id.KW_Esac esac>
                      redirects: []
                    )
                  ]
                  spids: [6407 6420]
                )
              ]
              else_kw: <Id.KW_Else else>
              else_action: [
                (command.If
                  if_kw: <Id.KW_If if>
                  arms: [
                    (IfArm
                      keyword: <Id.KW_If if>
                      cond: 
                        (condition.Shell
                          commands: [
                            (command.Sentence
                              child: 
                                (command.Simple
                                  blame_tok: <Id.Lit_LBracket '['>
                                  more_env: []
                                  words: [
                                    {<Id.Lit_LBracket '['>}
                                    {($ Id.VSub_DollarName newdestcmp)}
                                    {<-eq>}
                                    {($ Id.VSub_DollarName COMPARE_DIFFTYPE)}
                                    {<Id.Lit_RBracket ']'>}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                        )
                      then_kw: <Id.KW_Then then>
                      action: [
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 'new='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 'new='>
                              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'new='> name:new)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (CommandSub
                                    left_token: <Id.Left_Backtick '`'>
                                    child: 
                                      (command.Simple
                                        blame_tok: <file_type>
                                        more_env: []
                                        words: [
                                          {<file_type>}
                                          {($ Id.VSub_DollarName NEWTREE) <'/'> 
                                            ($ Id.VSub_DollarName file)
                                          }
                                        ]
                                        redirects: []
                                        do_fork: T
                                      )
                                    right: <Id.Backtick_Right '`'>
                                  )
                                }
                            )
                          ]
                          redirects: []
                        )
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 'dest='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 'dest='>
                              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dest='> name:dest)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (CommandSub
                                    left_token: <Id.Left_Backtick '`'>
                                    child: 
                                      (command.Simple
                                        blame_tok: <file_type>
                                        more_env: []
                                        words: [
                                          {<file_type>}
                                          {($ Id.VSub_DollarName DESTDIR) <'/'> 
                                            ($ Id.VSub_DollarName file)
                                          }
                                        ]
                                        redirects: []
                                        do_fork: T
                                      )
                                    right: <Id.Backtick_Right '`'>
                                  )
                                }
                            )
                          ]
                          redirects: []
                        )
                        (command.Simple
                          blame_tok: <warn>
                          more_env: []
                          words: [
                            {<warn>}
                            {
                              (DQ <'Modified mismatch: '> ($ Id.VSub_DollarName file) <' ('> 
                                ($ Id.VSub_DollarName new) <' vs '> ($ Id.VSub_DollarName dest) <')'>
                              )
                            }
                          ]
                          redirects: []
                          do_fork: T
                        )
                        (command.ControlFlow
                          keyword: <Id.ControlFlow_Return return>
                        )
                      ]
                      spids: [6524 6537]
                    )
                  ]
                  else_action: []
                  fi_kw: <Id.KW_Fi fi>
                  redirects: []
                )
              ]
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: (case_arg.Word w:{($ Id.VSub_DollarName cmp)})
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <Id.VSub_DollarName '$COMPARE_DIFFTYPE'>
                  pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_DIFFTYPE)}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'old='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'old='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'old='> name:old)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_Backtick '`'>
                                child: 
                                  (command.Simple
                                    blame_tok: <file_type>
                                    more_env: []
                                    words: [
                                      {<file_type>}
                                      {($ Id.VSub_DollarName OLDTREE) <'/'> 
                                        ($ Id.VSub_DollarName file)
                                      }
                                    ]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Backtick_Right '`'>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'new='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'new='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'new='> name:new)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_Backtick '`'>
                                child: 
                                  (command.Simple
                                    blame_tok: <file_type>
                                    more_env: []
                                    words: [
                                      {<file_type>}
                                      {($ Id.VSub_DollarName NEWTREE) <'/'> 
                                        ($ Id.VSub_DollarName file)
                                      }
                                    ]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Backtick_Right '`'>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'dest='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'dest='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dest='> name:dest)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_Backtick '`'>
                                child: 
                                  (command.Simple
                                    blame_tok: <file_type>
                                    more_env: []
                                    words: [
                                      {<file_type>}
                                      {($ Id.VSub_DollarName DESTDIR) <'/'> 
                                        ($ Id.VSub_DollarName file)
                                      }
                                    ]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Backtick_Right '`'>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <warn>
                      more_env: []
                      words: [
                        {<warn>}
                        {
                          (DQ <'Modified '> ($ Id.VSub_DollarName dest) <' changed: '> 
                            ($ Id.VSub_DollarName file) <' ('> ($ Id.VSub_DollarName old) <' became '> ($ Id.VSub_DollarName new) <')'>
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.VSub_DollarName '$COMPARE_DIFFLINKS'>
                  pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_DIFFLINKS)}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'old='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'old='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'old='> name:old)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_Backtick '`'>
                                child: 
                                  (command.Simple
                                    blame_tok: <readlink>
                                    more_env: []
                                    words: [
                                      {<readlink>}
                                      {($ Id.VSub_DollarName OLDTREE) <'/'> 
                                        ($ Id.VSub_DollarName file)
                                      }
                                    ]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Backtick_Right '`'>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'new='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'new='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'new='> name:new)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_Backtick '`'>
                                child: 
                                  (command.Simple
                                    blame_tok: <readlink>
                                    more_env: []
                                    words: [
                                      {<readlink>}
                                      {($ Id.VSub_DollarName NEWTREE) <'/'> 
                                        ($ Id.VSub_DollarName file)
                                      }
                                    ]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Backtick_Right '`'>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <warn>
                      more_env: []
                      words: [
                        {<warn>}
                        {
                          (DQ <'Modified link changed: '> ($ Id.VSub_DollarName file) <' ('> 
                            (word_part.EscapedLiteral
                              token: <Id.Lit_EscapedChar '\\"'>
                              ch: '"'
                            ) ($ Id.VSub_DollarName old) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') 
                            <' became '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') ($ Id.VSub_DollarName new) 
                            (word_part.EscapedLiteral
                              token: <Id.Lit_EscapedChar '\\"'>
                              ch: '"'
                            ) <')'>
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.VSub_DollarName '$COMPARE_DIFFFILES'>
                  pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_DIFFFILES)}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <merge_file>
                      more_env: []
                      words: [{<merge_file>} {($ Id.VSub_DollarName file)}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <handle_added_file>
      name: handle_added_file
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<cmp>} {<dest>} {<file>} {<new>}]
              redirects: []
              do_fork: T
            )
            (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: {($ Id.VSub_Number 1)}
                )
              ]
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <ignore>
                              more_env: []
                              words: [{<ignore>} {($ Id.VSub_DollarName file)}]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <log>
                      more_env: []
                      words: [{<log>} {(DQ <'IGNORE: added file '> ($ Id.VSub_DollarName file))}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow keyword:<Id.ControlFlow_Return return>)
                  ]
                  spids: [6763 6770]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <compare>
              more_env: []
              words: [
                {<compare>}
                {($ Id.VSub_DollarName DESTDIR) <'/'> ($ Id.VSub_DollarName file)}
                {($ Id.VSub_DollarName NEWTREE) <'/'> ($ Id.VSub_DollarName file)}
              ]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'cmp='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'cmp='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'cmp='> name:cmp)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_QMark '?')}
                )
              ]
              redirects: []
            )
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: (case_arg.Word w:{($ Id.VSub_DollarName cmp)})
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <Id.VSub_DollarName '$COMPARE_EQUAL'>
                  pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_EQUAL)}])
                  middle: <Id.Right_CasePat _>
                  action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return>)]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.VSub_DollarName '$COMPARE_ONLYFIRST'>
                  pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_ONLYFIRST)}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <panic>
                      more_env: []
                      words: [{<panic>} {(DQ <'Added file now missing'>)}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.VSub_DollarName '$COMPARE_ONLYSECOND'>
                  pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_ONLYSECOND)}])
                  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.Sentence
                                  child: 
                                    (command.Pipeline
                                      negated: <Id.KW_Bang '!'>
                                      children: [
                                        (command.Simple
                                          blame_tok: <Id.Lit_LBracket '['>
                                          more_env: []
                                          words: [
                                            {<Id.Lit_LBracket '['>}
                                            {<-d>}
                                            {($ Id.VSub_DollarName NEWTREE) <'/'> 
                                              ($ Id.VSub_DollarName file)
                                            }
                                            {<Id.Lit_RBracket ']'>}
                                          ]
                                          redirects: []
                                          do_fork: T
                                        )
                                      ]
                                      ops: []
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          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.Sentence
                                          child: 
                                            (command.Simple
                                              blame_tok: <install_new>
                                              more_env: []
                                              words: [{<install_new>} {($ Id.VSub_DollarName file)}]
                                              redirects: []
                                              do_fork: T
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  then_kw: <Id.KW_Then then>
                                  action: [
                                    (command.Simple
                                      blame_tok: <echo>
                                      more_env: []
                                      words: [{<echo>} {(DQ <'  A '> ($ Id.VSub_DollarName file))}]
                                      redirects: []
                                      do_fork: T
                                    )
                                  ]
                                  spids: [6868 6875]
                                )
                              ]
                              else_action: []
                              fi_kw: <Id.KW_Fi fi>
                              redirects: []
                            )
                          ]
                          spids: [6850 6865]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                    (command.ControlFlow keyword:<Id.ControlFlow_Return return>)
                  ]
                  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.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <always_install>
                              more_env: []
                              words: [{<always_install>} {($ Id.VSub_DollarName file)}]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <log>
                      more_env: []
                      words: [{<log>} {(DQ <'ALWAYS: updating '> ($ Id.VSub_DollarName file))}]
                      redirects: []
                      do_fork: T
                    )
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <update_unmodified>
                                      more_env: []
                                      words: [{<update_unmodified>} {($ Id.VSub_DollarName file)}]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return>)]
                          spids: [6937 6944]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  spids: [6919 6926]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: (case_arg.Word w:{($ Id.VSub_DollarName cmp)})
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <Id.VSub_DollarName '$COMPARE_DIFFTYPE'>
                  pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_DIFFTYPE)}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'new='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'new='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'new='> name:new)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_Backtick '`'>
                                child: 
                                  (command.Simple
                                    blame_tok: <file_type>
                                    more_env: []
                                    words: [
                                      {<file_type>}
                                      {($ Id.VSub_DollarName NEWTREE) <'/'> 
                                        ($ Id.VSub_DollarName file)
                                      }
                                    ]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Backtick_Right '`'>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'dest='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'dest='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dest='> name:dest)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_Backtick '`'>
                                child: 
                                  (command.Simple
                                    blame_tok: <file_type>
                                    more_env: []
                                    words: [
                                      {<file_type>}
                                      {($ Id.VSub_DollarName DESTDIR) <'/'> 
                                        ($ Id.VSub_DollarName file)
                                      }
                                    ]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Backtick_Right '`'>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <warn>
                      more_env: []
                      words: [
                        {<warn>}
                        {
                          (DQ <'New file mismatch: '> ($ Id.VSub_DollarName file) <' ('> 
                            ($ Id.VSub_DollarName new) <' vs '> ($ Id.VSub_DollarName dest) <')'>
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.VSub_DollarName '$COMPARE_DIFFLINKS'>
                  pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_DIFFLINKS)}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'new='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'new='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'new='> name:new)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_Backtick '`'>
                                child: 
                                  (command.Simple
                                    blame_tok: <readlink>
                                    more_env: []
                                    words: [
                                      {<readlink>}
                                      {($ Id.VSub_DollarName NEWTREE) <'/'> 
                                        ($ Id.VSub_DollarName file)
                                      }
                                    ]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Backtick_Right '`'>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'dest='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'dest='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dest='> name:dest)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_Backtick '`'>
                                child: 
                                  (command.Simple
                                    blame_tok: <readlink>
                                    more_env: []
                                    words: [
                                      {<readlink>}
                                      {($ Id.VSub_DollarName DESTDIR) <'/'> 
                                        ($ Id.VSub_DollarName file)
                                      }
                                    ]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Backtick_Right '`'>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <warn>
                      more_env: []
                      words: [
                        {<warn>}
                        {
                          (DQ <'New link conflict: '> ($ Id.VSub_DollarName file) <' ('> 
                            (word_part.EscapedLiteral
                              token: <Id.Lit_EscapedChar '\\"'>
                              ch: '"'
                            ) ($ Id.VSub_DollarName new) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <' vs '> 
                            (word_part.EscapedLiteral
                              token: <Id.Lit_EscapedChar '\\"'>
                              ch: '"'
                            ) ($ Id.VSub_DollarName dest) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <')'>
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.VSub_DollarName '$COMPARE_DIFFFILES'>
                  pattern: (pat.Words words:[{($ Id.VSub_DollarName COMPARE_DIFFFILES)}])
                  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.Sentence
                                  child: 
                                    (command.AndOr
                                      children: [
                                        (command.Simple
                                          blame_tok: <Id.Lit_LBracket '['>
                                          more_env: []
                                          words: [
                                            {<Id.Lit_LBracket '['>}
                                            {<-n>}
                                            {(DQ ($ Id.VSub_DollarName FREEBSD_ID))}
                                            {<Id.Lit_RBracket ']'>}
                                          ]
                                          redirects: []
                                          do_fork: T
                                        )
                                        (command.Simple
                                          blame_tok: <fbsdid_only>
                                          more_env: []
                                          words: [
                                            {<fbsdid_only>}
                                            {($ Id.VSub_DollarName NEWTREE) <'/'> 
                                              ($ Id.VSub_DollarName file)
                                            }
                                            {($ Id.VSub_DollarName DESTDIR) <'/'> 
                                              ($ Id.VSub_DollarName file)
                                            }
                                          ]
                                          redirects: []
                                          do_fork: T
                                        )
                                      ]
                                      ops: [<Id.Op_DAmp _>]
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          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.Sentence
                                          child: 
                                            (command.Simple
                                              blame_tok: <update_unmodified>
                                              more_env: []
                                              words: [
                                                {<update_unmodified>}
                                                {($ Id.VSub_DollarName file)}
                                              ]
                                              redirects: []
                                              do_fork: T
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  then_kw: <Id.KW_Then then>
                                  action: [
                                    (command.ControlFlow
                                      keyword: <Id.ControlFlow_Return return>
                                    )
                                  ]
                                  spids: [7106 7113]
                                )
                              ]
                              else_kw: <Id.KW_Else else>
                              else_action: [
                                (command.Simple
                                  blame_tok: <panic>
                                  more_env: []
                                  words: [{<panic>} {(DQ <'Updating FreeBSD ID string failed'>)}]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              fi_kw: <Id.KW_Fi fi>
                              redirects: []
                            )
                          ]
                          spids: [7076 7103]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <new_conflict>
                      more_env: []
                      words: [{<new_conflict>} {($ Id.VSub_DollarName file)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'  C '> ($ Id.VSub_DollarName file))}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <build_cmd>
      name: build_cmd
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<dir>}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {($ Id.VSub_Pound '#')}
                                {<-ne>}
                                {<1>}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'Missing required tarball.'>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <usage>
                      more_env: []
                      words: [{<usage>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [7179 7192]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <log>
              more_env: []
              words: [{<log>} {(DQ <'build command: '> ($ Id.VSub_Number 1))}]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'dir='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'dir='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dir='> name:dir)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (command.Simple
                            blame_tok: <mktemp>
                            more_env: []
                            words: [
                              {<mktemp>}
                              {<-d>}
                              {($ Id.VSub_DollarName WORKDIR) <'/etcupdate-XXXXXXX'>}
                            ]
                            redirects: []
                            do_fork: T
                          )
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {($ Id.VSub_QMark '?')}
                                {<-ne>}
                                {<0>}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'Unable to create temporary directory.'>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [7238 7251]
                )
              ]
              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.Sentence
                          child: 
                            (command.Pipeline
                              negated: <Id.KW_Bang '!'>
                              children: [
                                (command.Simple
                                  blame_tok: <build_tree>
                                  more_env: []
                                  words: [{<build_tree>} {($ Id.VSub_DollarName dir)}]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              ops: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'Failed to build tree.'>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <remove_tree>
                      more_env: []
                      words: [{<remove_tree>} {($ Id.VSub_DollarName dir)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [7269 7278]
                )
              ]
              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.Sentence
                          child: 
                            (command.Pipeline
                              negated: <Id.KW_Bang '!'>
                              children: [
                                (command.Simple
                                  blame_tok: <tar>
                                  more_env: []
                                  words: [
                                    {<tar>}
                                    {<cfj>}
                                    {($ Id.VSub_Number 1)}
                                    {<-C>}
                                    {($ Id.VSub_DollarName dir)}
                                    {<.>}
                                  ]
                                  redirects: [
                                    (Redir
                                      op: <Id.Redir_GreatAnd '>&'>
                                      loc: (redir_loc.Fd fd:1)
                                      arg: {<3>}
                                    )
                                    (Redir
                                      op: <Id.Redir_GreatAnd '2>&'>
                                      loc: (redir_loc.Fd fd:2)
                                      arg: {<1>}
                                    )
                                  ]
                                  do_fork: T
                                )
                              ]
                              ops: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'Failed to create tarball.'>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <remove_tree>
                      more_env: []
                      words: [{<remove_tree>} {($ Id.VSub_DollarName dir)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [7301 7324]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <remove_tree>
              more_env: []
              words: [{<remove_tree>} {($ Id.VSub_DollarName dir)}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <diff_cmd>
      name: diff_cmd
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<file>}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {($ Id.VSub_Pound '#')}
                                {<-ne>}
                                {<0>}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <usage>
                      more_env: []
                      words: [{<usage>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [7376 7389]
                )
              ]
              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.Sentence
                          child: 
                            (command.Pipeline
                              negated: <Id.KW_Bang '!'>
                              children: [
                                (command.Simple
                                  blame_tok: <Id.Lit_LBracket '['>
                                  more_env: []
                                  words: [
                                    {<Id.Lit_LBracket '['>}
                                    {<-d>}
                                    {($ Id.VSub_DollarName NEWTREE)}
                                    {<Id.Lit_RBracket ']'>}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              ops: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'Reference tree to diff against unavailable.'>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [7403 7416]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.ForEach
              keyword: <Id.KW_For for>
              iter_names: [file]
              iterable: 
                (for_iter.Words
                  words: [
                    {
                      (CommandSub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (command.Pipeline
                            children: [
                              (command.Subshell
                                left: <Id.Op_LParen _>
                                child: 
                                  (command.CommandList
                                    children: [
                                      (command.Sentence
                                        child: 
                                          (command.Simple
                                            blame_tok: <cd>
                                            more_env: []
                                            words: [{<cd>} {($ Id.VSub_DollarName NEWTREE)}]
                                            redirects: []
                                            do_fork: T
                                          )
                                        terminator: <Id.Op_Semi _>
                                      )
                                      (command.Simple
                                        blame_tok: <find>
                                        more_env: []
                                        words: [{<find>} {<.>}]
                                        redirects: []
                                        do_fork: T
                                      )
                                    ]
                                  )
                                right: <Id.Right_Subshell _>
                                redirects: []
                              )
                              (command.Simple
                                blame_tok: <sed>
                                more_env: []
                                words: [{<sed>} {<-e>} {(SQ <'s/^\\.//'>)}]
                                redirects: []
                                do_fork: T
                              )
                            ]
                            ops: [<Id.Op_Pipe _>]
                          )
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                  ]
                )
              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.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <ignore>
                                      more_env: []
                                      words: [{<ignore>} {($ Id.VSub_DollarName file)}]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [(command.ControlFlow keyword:<Id.ControlFlow_Continue continue>)]
                          spids: [7480 7487]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <diffnode>
                      more_env: []
                      words: [
                        {<diffnode>}
                        {($ Id.VSub_DollarName NEWTREE)}
                        {(DQ ($ Id.VSub_DollarName DESTDIR))}
                        {($ Id.VSub_DollarName file)}
                        {(DQ <stock>)}
                        {(DQ <local>)}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <extract_cmd>
      name: extract_cmd
      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.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {($ Id.VSub_Pound '#')}
                                {<-ne>}
                                {<0>}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <usage>
                      more_env: []
                      words: [{<usage>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [7550 7563]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <log>
              more_env: []
              words: [{<log>} {(DQ <'extract command: tarball='> ($ Id.VSub_DollarName tarball))}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-d>}
                                {($ Id.VSub_DollarName NEWTREE)}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  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.Sentence
                                  child: 
                                    (command.Pipeline
                                      negated: <Id.KW_Bang '!'>
                                      children: [
                                        (command.Simple
                                          blame_tok: <remove_tree>
                                          more_env: []
                                          words: [{<remove_tree>} {($ Id.VSub_DollarName NEWTREE)}]
                                          redirects: []
                                          do_fork: T
                                        )
                                      ]
                                      ops: []
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <echo>
                              more_env: []
                              words: [{<echo>} {(DQ <'Unable to remove current tree.'>)}]
                              redirects: []
                              do_fork: T
                            )
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Exit exit>
                              arg_word: {<1>}
                            )
                          ]
                          spids: [7596 7605]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  spids: [7582 7593]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <extract_tree>
              more_env: []
              words: [{<extract_tree>}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <resolve_cmd>
      name: resolve_cmd
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<conflicts>}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {($ Id.VSub_Pound '#')}
                                {<-ne>}
                                {<0>}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <usage>
                      more_env: []
                      words: [{<usage>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [7648 7661]
                )
              ]
              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.Sentence
                          child: 
                            (command.Pipeline
                              negated: <Id.KW_Bang '!'>
                              children: [
                                (command.Simple
                                  blame_tok: <Id.Lit_LBracket '['>
                                  more_env: []
                                  words: [
                                    {<Id.Lit_LBracket '['>}
                                    {<-d>}
                                    {($ Id.VSub_DollarName CONFLICTS)}
                                    {<Id.Lit_RBracket ']'>}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              ops: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return>)]
                  spids: [7671 7684]
                )
              ]
              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.Sentence
                          child: 
                            (command.Pipeline
                              negated: <Id.KW_Bang '!'>
                              children: [
                                (command.Simple
                                  blame_tok: <Id.Lit_LBracket '['>
                                  more_env: []
                                  words: [
                                    {<Id.Lit_LBracket '['>}
                                    {<-d>}
                                    {($ Id.VSub_DollarName NEWTREE)}
                                    {<Id.Lit_RBracket ']'>}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              ops: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'The current tree is not present to resolve conflicts.'>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [7694 7707]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'conflicts='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'conflicts='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'conflicts='> name:conflicts)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (command.Pipeline
                            children: [
                              (command.Subshell
                                left: <Id.Op_LParen _>
                                child: 
                                  (command.CommandList
                                    children: [
                                      (command.Sentence
                                        child: 
                                          (command.Simple
                                            blame_tok: <cd>
                                            more_env: []
                                            words: [{<cd>} {($ Id.VSub_DollarName CONFLICTS)}]
                                            redirects: []
                                            do_fork: T
                                          )
                                        terminator: <Id.Op_Semi _>
                                      )
                                      (command.Simple
                                        blame_tok: <find>
                                        more_env: []
                                        words: [{<find>} {<.>} {<Id.KW_Bang '!'>} {<-type>} {<d>}]
                                        redirects: []
                                        do_fork: T
                                      )
                                    ]
                                  )
                                right: <Id.Right_Subshell _>
                                redirects: []
                              )
                              (command.Simple
                                blame_tok: <sed>
                                more_env: []
                                words: [{<sed>} {<-e>} {(SQ <'s/^\\.//'>)}]
                                redirects: []
                                do_fork: T
                              )
                            ]
                            ops: [<Id.Op_Pipe _>]
                          )
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.ForEach
              keyword: <Id.KW_For for>
              iter_names: [file]
              iterable: (for_iter.Words words:[{($ Id.VSub_DollarName conflicts)}])
              semi_tok: <Id.Op_Semi _>
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.Simple
                      blame_tok: <resolve_conflict>
                      more_env: []
                      words: [{<resolve_conflict>} {($ Id.VSub_DollarName file)}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-n>}
                                {(DQ ($ Id.VSub_DollarName NEWALIAS_WARN))}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <warn>
                      more_env: []
                      words: [
                        {<warn>}
                        {(DQ <'Needs update: /etc/mail/aliases.db'>)}
                        {(DQ <'(requires manual update via newaliases(1))'>)}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'Warnings:'>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [
                        {<echo>}
                        {(DQ <'  Needs update: /etc/mail/aliases.db'>)}
                        {(DQ <'(requires manual update via newaliases(1))'>)}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [7782 7795]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <status_cmd>
      name: status_cmd
      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.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {($ Id.VSub_Pound '#')}
                                {<-ne>}
                                {<0>}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <usage>
                      more_env: []
                      words: [{<usage>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [7856 7869]
                )
              ]
              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.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-d>}
                                {($ Id.VSub_DollarName CONFLICTS)}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Pipeline
                      children: [
                        (command.Subshell
                          left: <Id.Op_LParen _>
                          child: 
                            (command.CommandList
                              children: [
                                (command.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <cd>
                                      more_env: []
                                      words: [{<cd>} {($ Id.VSub_DollarName CONFLICTS)}]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                                (command.Simple
                                  blame_tok: <find>
                                  more_env: []
                                  words: [{<find>} {<.>} {<Id.KW_Bang '!'>} {<-type>} {<d>}]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                            )
                          right: <Id.Right_Subshell _>
                          redirects: []
                        )
                        (command.Simple
                          blame_tok: <sed>
                          more_env: []
                          words: [{<sed>} {<-e>} {(SQ <'s/^\\./  C /'>)}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      ops: [<Id.Op_Pipe _>]
                    )
                  ]
                  spids: [7879 7890]
                )
              ]
              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.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-s>}
                                {($ Id.VSub_DollarName WARNINGS)}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'Warnings:'>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <cat>
                      more_env: []
                      words: [{<cat>} {($ Id.VSub_DollarName WARNINGS)}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [7924 7935]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <update_cmd>
      name: update_cmd
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<dir>}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {($ Id.VSub_Pound '#')}
                                {<-ne>}
                                {<0>}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <usage>
                      more_env: []
                      words: [{<usage>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [7977 7990]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <log>
              more_env: []
              words: [
                {<log>}
                {
                  (DQ <'update command: rerun='> ($ Id.VSub_DollarName rerun) <' tarball='> 
                    ($ Id.VSub_DollarName tarball) <' preworld='> ($ Id.VSub_DollarName preworld)
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {
                                  (CommandSub
                                    left_token: <Id.Left_Backtick '`'>
                                    child: 
                                      (command.Simple
                                        blame_tok: <id>
                                        more_env: []
                                        words: [{<id>} {<-u>}]
                                        redirects: []
                                        do_fork: T
                                      )
                                    right: <Id.Backtick_Right '`'>
                                  )
                                }
                                {<-ne>}
                                {<0>}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'Must be root to update a tree.'>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [8013 8032]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <umask>
              more_env: []
              words: [{<umask>} {<022>}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-e>}
                                {($ Id.VSub_DollarName CONFLICTS)}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <find>
                      more_env: []
                      words: [
                        {<find>}
                        {<-d>}
                        {($ Id.VSub_DollarName CONFLICTS)}
                        {<-type>}
                        {<d>}
                        {<-empty>}
                        {<-delete>}
                      ]
                      redirects: [
                        (Redir
                          op: <Id.Redir_GreatAnd '>&'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {<3>}
                        )
                        (Redir
                          op: <Id.Redir_GreatAnd '2>&'>
                          loc: (redir_loc.Fd fd:2)
                          arg: {<1>}
                        )
                      ]
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <rmdir>
                      more_env: []
                      words: [{<rmdir>} {($ Id.VSub_DollarName CONFLICTS)}]
                      redirects: [
                        (Redir
                          op: <Id.Redir_GreatAnd '>&'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {<3>}
                        )
                        (Redir
                          op: <Id.Redir_GreatAnd '2>&'>
                          loc: (redir_loc.Fd fd:2)
                          arg: {<1>}
                        )
                      ]
                      do_fork: T
                    )
                  ]
                  spids: [8074 8085]
                )
              ]
              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.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-d>}
                                {($ Id.VSub_DollarName CONFLICTS)}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'Conflicts remain from previous update, aborting.'>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [8123 8134]
                )
              ]
              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.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-z>}
                                {(DQ ($ Id.VSub_DollarName rerun))}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  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.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <Id.Lit_LBracket '['>
                                      more_env: []
                                      words: [
                                        {<Id.Lit_LBracket '['>}
                                        {<-n>}
                                        {(DQ ($ Id.VSub_DollarName dryrun))}
                                        {<Id.Lit_RBracket ']'>}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'dir='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'dir='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dir='> name:dir)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (CommandSub
                                        left_token: <Id.Left_Backtick '`'>
                                        child: 
                                          (command.Simple
                                            blame_tok: <mktemp>
                                            more_env: []
                                            words: [
                                              {<mktemp>}
                                              {<-d>}
                                              {($ Id.VSub_DollarName WORKDIR) <'/etcupdate-XXXXXXX'>}
                                            ]
                                            redirects: []
                                            do_fork: T
                                          )
                                        right: <Id.Backtick_Right '`'>
                                      )
                                    }
                                )
                              ]
                              redirects: []
                            )
                            (command.If
                              if_kw: <Id.KW_If if>
                              arms: [
                                (IfArm
                                  keyword: <Id.KW_If if>
                                  cond: 
                                    (condition.Shell
                                      commands: [
                                        (command.Sentence
                                          child: 
                                            (command.Simple
                                              blame_tok: <Id.Lit_LBracket '['>
                                              more_env: []
                                              words: [
                                                {<Id.Lit_LBracket '['>}
                                                {($ Id.VSub_QMark '?')}
                                                {<-ne>}
                                                {<0>}
                                                {<Id.Lit_RBracket ']'>}
                                              ]
                                              redirects: []
                                              do_fork: T
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  then_kw: <Id.KW_Then then>
                                  action: [
                                    (command.Simple
                                      blame_tok: <echo>
                                      more_env: []
                                      words: [{<echo>} {(DQ <'Unable to create temporary directory.'>)}]
                                      redirects: []
                                      do_fork: T
                                    )
                                    (command.ControlFlow
                                      keyword: <Id.ControlFlow_Exit exit>
                                      arg_word: {<1>}
                                    )
                                  ]
                                  spids: [8210 8223]
                                )
                              ]
                              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.Sentence
                                          child: 
                                            (command.Simple
                                              blame_tok: <Id.Lit_LBracket '['>
                                              more_env: []
                                              words: [
                                                {<Id.Lit_LBracket '['>}
                                                {<-z>}
                                                {(DQ ($ Id.VSub_DollarName preworld))}
                                                {<Id.Lit_RBracket ']'>}
                                              ]
                                              redirects: []
                                              do_fork: T
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  then_kw: <Id.KW_Then then>
                                  action: [
                                    (command.ShAssignment
                                      left: <Id.Lit_VarLike 'OLDTREE='>
                                      pairs: [
                                        (AssignPair
                                          left: <Id.Lit_VarLike 'OLDTREE='>
                                          lhs: 
                                            (sh_lhs_expr.Name
                                              left: <Id.Lit_VarLike 'OLDTREE='>
                                              name: OLDTREE
                                            )
                                          op: assign_op.Equal
                                          rhs: {($ Id.VSub_DollarName NEWTREE)}
                                        )
                                      ]
                                      redirects: []
                                    )
                                  ]
                                  spids: [8250 8263]
                                )
                              ]
                              else_action: []
                              fi_kw: <Id.KW_Fi fi>
                              redirects: []
                            )
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'NEWTREE='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'NEWTREE='>
                                  lhs: 
                                    (sh_lhs_expr.Name
                                      left: <Id.Lit_VarLike 'NEWTREE='>
                                      name: NEWTREE
                                    )
                                  op: assign_op.Equal
                                  rhs: {($ Id.VSub_DollarName dir)}
                                )
                              ]
                              redirects: []
                            )
                          ]
                          spids: [8181 8194]
                        )
                        (IfArm
                          keyword: <Id.KW_Elif elif>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <Id.Lit_LBracket '['>
                                      more_env: []
                                      words: [
                                        {<Id.Lit_LBracket '['>}
                                        {<-n>}
                                        {(DQ ($ Id.VSub_DollarName preworld))}
                                        {<Id.Lit_RBracket ']'>}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          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.Sentence
                                          child: 
                                            (command.Pipeline
                                              negated: <Id.KW_Bang '!'>
                                              children: [
                                                (command.Simple
                                                  blame_tok: <remove_tree>
                                                  more_env: []
                                                  words: [
                                                    {<remove_tree>}
                                                    {($ Id.VSub_DollarName NEWTREE)}
                                                  ]
                                                  redirects: []
                                                  do_fork: T
                                                )
                                              ]
                                              ops: []
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  then_kw: <Id.KW_Then then>
                                  action: [
                                    (command.Simple
                                      blame_tok: <echo>
                                      more_env: []
                                      words: [{<echo>} {(DQ <'Unable to remove pre-world tree.'>)}]
                                      redirects: []
                                      do_fork: T
                                    )
                                    (command.ControlFlow
                                      keyword: <Id.ControlFlow_Exit exit>
                                      arg_word: {<1>}
                                    )
                                  ]
                                  spids: [8302 8311]
                                )
                              ]
                              else_action: []
                              fi_kw: <Id.KW_Fi fi>
                              redirects: []
                            )
                          ]
                          spids: [8286 8299]
                        )
                        (IfArm
                          keyword: <Id.KW_Elif elif>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <Id.Lit_LBracket '['>
                                      more_env: []
                                      words: [
                                        {<Id.Lit_LBracket '['>}
                                        {<-d>}
                                        {($ Id.VSub_DollarName NEWTREE)}
                                        {<Id.Lit_RBracket ']'>}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          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.Sentence
                                          child: 
                                            (command.Pipeline
                                              negated: <Id.KW_Bang '!'>
                                              children: [
                                                (command.Simple
                                                  blame_tok: <remove_tree>
                                                  more_env: []
                                                  words: [
                                                    {<remove_tree>}
                                                    {($ Id.VSub_DollarName OLDTREE)}
                                                  ]
                                                  redirects: []
                                                  do_fork: T
                                                )
                                              ]
                                              ops: []
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  then_kw: <Id.KW_Then then>
                                  action: [
                                    (command.Simple
                                      blame_tok: <echo>
                                      more_env: []
                                      words: [{<echo>} {(DQ <'Unable to remove old tree.'>)}]
                                      redirects: []
                                      do_fork: T
                                    )
                                    (command.ControlFlow
                                      keyword: <Id.ControlFlow_Exit exit>
                                      arg_word: {<1>}
                                    )
                                  ]
                                  spids: [8352 8361]
                                )
                              ]
                              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.Sentence
                                          child: 
                                            (command.Pipeline
                                              negated: <Id.KW_Bang '!'>
                                              children: [
                                                (command.Simple
                                                  blame_tok: <mv>
                                                  more_env: []
                                                  words: [
                                                    {<mv>}
                                                    {($ Id.VSub_DollarName NEWTREE)}
                                                    {($ Id.VSub_DollarName OLDTREE)}
                                                  ]
                                                  redirects: [
                                                    (Redir
                                                      op: <Id.Redir_GreatAnd '>&'>
                                                      loc: (redir_loc.Fd fd:1)
                                                      arg: {<3>}
                                                    )
                                                    (Redir
                                                      op: <Id.Redir_GreatAnd '2>&'>
                                                      loc: (redir_loc.Fd fd:2)
                                                      arg: {<1>}
                                                    )
                                                  ]
                                                  do_fork: T
                                                )
                                              ]
                                              ops: []
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  then_kw: <Id.KW_Then then>
                                  action: [
                                    (command.Simple
                                      blame_tok: <echo>
                                      more_env: []
                                      words: [{<echo>} {(DQ <'Unable to rename current stock tree.'>)}]
                                      redirects: []
                                      do_fork: T
                                    )
                                    (command.ControlFlow
                                      keyword: <Id.ControlFlow_Exit exit>
                                      arg_word: {<1>}
                                    )
                                  ]
                                  spids: [8384 8401]
                                )
                              ]
                              else_action: []
                              fi_kw: <Id.KW_Fi fi>
                              redirects: []
                            )
                          ]
                          spids: [8334 8345]
                        )
                      ]
                      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.Sentence
                                  child: 
                                    (command.Pipeline
                                      negated: <Id.KW_Bang '!'>
                                      children: [
                                        (command.Simple
                                          blame_tok: <Id.Lit_LBracket '['>
                                          more_env: []
                                          words: [
                                            {<Id.Lit_LBracket '['>}
                                            {<-d>}
                                            {($ Id.VSub_DollarName OLDTREE)}
                                            {<Id.Lit_RBracket ']'>}
                                          ]
                                          redirects: []
                                          do_fork: T
                                        )
                                      ]
                                      ops: []
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <cat>
                              more_env: []
                              words: [{<cat>}]
                              redirects: [
                                (Redir
                                  op: <Id.Redir_DLess '<<'>
                                  loc: (redir_loc.Fd fd:0)
                                  arg: 
                                    (redir_param.HereDoc
                                      here_begin: {<EOF>}
                                      here_end_tok: <Id.Undefined_Tok ''>
                                      stdin_parts: [
                                        <
'No previous tree to compare against, a sane comparison is not possible.\n'
                                        >
                                      ]
                                    )
                                )
                              ]
                              do_fork: T
                            )
                            (command.Simple
                              blame_tok: <log>
                              more_env: []
                              words: [{<log>} {(DQ <'No previous tree to compare against.'>)}]
                              redirects: []
                              do_fork: T
                            )
                            (command.If
                              if_kw: <Id.KW_If if>
                              arms: [
                                (IfArm
                                  keyword: <Id.KW_If if>
                                  cond: 
                                    (condition.Shell
                                      commands: [
                                        (command.Sentence
                                          child: 
                                            (command.Simple
                                              blame_tok: <Id.Lit_LBracket '['>
                                              more_env: []
                                              words: [
                                                {<Id.Lit_LBracket '['>}
                                                {<-n>}
                                                {(DQ ($ Id.VSub_DollarName dir))}
                                                {<Id.Lit_RBracket ']'>}
                                              ]
                                              redirects: []
                                              do_fork: T
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  then_kw: <Id.KW_Then then>
                                  action: [
                                    (command.Simple
                                      blame_tok: <rmdir>
                                      more_env: []
                                      words: [{<rmdir>} {($ Id.VSub_DollarName dir)}]
                                      redirects: []
                                      do_fork: T
                                    )
                                  ]
                                  spids: [8455 8468]
                                )
                              ]
                              else_action: []
                              fi_kw: <Id.KW_Fi fi>
                              redirects: []
                            )
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Exit exit>
                              arg_word: {<1>}
                            )
                          ]
                          spids: [8423 8436]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <extract_tree>
                      more_env: []
                      words: [{<extract_tree>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [8153 8166]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Pipeline
              children: [
                (command.Subshell
                  left: <Id.Op_LParen _>
                  child: 
                    (command.CommandList
                      children: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <cd>
                              more_env: []
                              words: [{<cd>} {($ Id.VSub_DollarName OLDTREE)}]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                        (command.Simple
                          blame_tok: <find>
                          more_env: []
                          words: [{<find>} {<.>}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                    )
                  right: <Id.Right_Subshell _>
                  redirects: []
                )
                (command.Simple
                  blame_tok: <sed>
                  more_env: []
                  words: [{<sed>} {<-e>} {(SQ <'s/^\\.//'>)}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <sort>
                  more_env: []
                  words: [{<sort>}]
                  redirects: [
                    (Redir
                      op: <Id.Redir_Great '>'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {($ Id.VSub_DollarName WORKDIR) <'/old.files'>}
                    )
                  ]
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _> <Id.Op_Pipe _>]
            )
            (command.Pipeline
              children: [
                (command.Subshell
                  left: <Id.Op_LParen _>
                  child: 
                    (command.CommandList
                      children: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <cd>
                              more_env: []
                              words: [{<cd>} {($ Id.VSub_DollarName NEWTREE)}]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                        (command.Simple
                          blame_tok: <find>
                          more_env: []
                          words: [{<find>} {<.>}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                    )
                  right: <Id.Right_Subshell _>
                  redirects: []
                )
                (command.Simple
                  blame_tok: <sed>
                  more_env: []
                  words: [{<sed>} {<-e>} {(SQ <'s/^\\.//'>)}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <sort>
                  more_env: []
                  words: [{<sort>}]
                  redirects: [
                    (Redir
                      op: <Id.Redir_Great '>'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {($ Id.VSub_DollarName WORKDIR) <'/new.files'>}
                    )
                  ]
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _> <Id.Op_Pipe _>]
            )
            (command.Simple
              blame_tok: <comm>
              more_env: []
              words: [
                {<comm>}
                {<-23>}
                {($ Id.VSub_DollarName WORKDIR) <'/old.files'>}
                {($ Id.VSub_DollarName WORKDIR) <'/new.files'>}
              ]
              redirects: [
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName WORKDIR) <'/removed.files'>}
                )
              ]
              do_fork: T
            )
            (command.Simple
              blame_tok: <comm>
              more_env: []
              words: [
                {<comm>}
                {<-13>}
                {($ Id.VSub_DollarName WORKDIR) <'/old.files'>}
                {($ Id.VSub_DollarName WORKDIR) <'/new.files'>}
              ]
              redirects: [
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName WORKDIR) <'/added.files'>}
                )
              ]
              do_fork: T
            )
            (command.Simple
              blame_tok: <comm>
              more_env: []
              words: [
                {<comm>}
                {<-12>}
                {($ Id.VSub_DollarName WORKDIR) <'/old.files'>}
                {($ Id.VSub_DollarName WORKDIR) <'/new.files'>}
              ]
              redirects: [
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName WORKDIR) <'/both.files'>}
                )
              ]
              do_fork: T
            )
            (command.Simple
              blame_tok: <rm>
              more_env: []
              words: [{<rm>} {<-f>} {($ Id.VSub_DollarName WARNINGS)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <mkdir>
              more_env: []
              words: [{<mkdir>} {<-p>} {($ Id.VSub_DollarName CONFLICTS)}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-n>}
                                {(DQ ($ Id.VSub_DollarName preworld))}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <Id.Redir_Great '>'>
                      more_env: []
                      words: []
                      redirects: [
                        (Redir
                          op: <Id.Redir_Great '>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {($ Id.VSub_DollarName WORKDIR) <'/removed.files'>}
                        )
                      ]
                      do_fork: F
                    )
                  ]
                  spids: [8646 8659]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.ForEach
              keyword: <Id.KW_For for>
              iter_names: [file]
              iterable: 
                (for_iter.Words
                  words: [
                    {
                      (CommandSub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (command.Simple
                            blame_tok: <cat>
                            more_env: []
                            words: [{<cat>} {($ Id.VSub_DollarName WORKDIR) <'/removed.files'>}]
                            redirects: []
                            do_fork: T
                          )
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                  ]
                )
              semi_tok: <Id.Op_Semi _>
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.Simple
                      blame_tok: <handle_removed_file>
                      more_env: []
                      words: [{<handle_removed_file>} {($ Id.VSub_DollarName file)}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.ForEach
              keyword: <Id.KW_For for>
              iter_names: [file]
              iterable: 
                (for_iter.Words
                  words: [
                    {
                      (CommandSub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (command.Simple
                            blame_tok: <sort>
                            more_env: []
                            words: [{<sort>} {<-r>} {($ Id.VSub_DollarName WORKDIR) <'/removed.files'>}]
                            redirects: []
                            do_fork: T
                          )
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                  ]
                )
              semi_tok: <Id.Op_Semi _>
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.Simple
                      blame_tok: <handle_removed_directory>
                      more_env: []
                      words: [{<handle_removed_directory>} {($ Id.VSub_DollarName file)}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.ForEach
              keyword: <Id.KW_For for>
              iter_names: [file]
              iterable: 
                (for_iter.Words
                  words: [
                    {
                      (CommandSub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (command.Simple
                            blame_tok: <cat>
                            more_env: []
                            words: [{<cat>} {($ Id.VSub_DollarName WORKDIR) <'/both.files'>}]
                            redirects: []
                            do_fork: T
                          )
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                  ]
                )
              semi_tok: <Id.Op_Semi _>
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.Simple
                      blame_tok: <handle_modified_file>
                      more_env: []
                      words: [{<handle_modified_file>} {($ Id.VSub_DollarName file)}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.ForEach
              keyword: <Id.KW_For for>
              iter_names: [file]
              iterable: 
                (for_iter.Words
                  words: [
                    {
                      (CommandSub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (command.Simple
                            blame_tok: <cat>
                            more_env: []
                            words: [{<cat>} {($ Id.VSub_DollarName WORKDIR) <'/added.files'>}]
                            redirects: []
                            do_fork: T
                          )
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                  ]
                )
              semi_tok: <Id.Op_Semi _>
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.Simple
                      blame_tok: <handle_added_file>
                      more_env: []
                      words: [{<handle_added_file>} {($ Id.VSub_DollarName file)}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-n>}
                                {(DQ ($ Id.VSub_DollarName NEWALIAS_WARN))}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <warn>
                      more_env: []
                      words: [
                        {<warn>}
                        {(DQ <'Needs update: /etc/mail/aliases.db'>)}
                        {(DQ <'(requires manual update via newaliases(1))'>)}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [8844 8857]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <post_update>
              more_env: []
              words: [{<post_update>}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-s>}
                                {($ Id.VSub_DollarName WARNINGS)}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'Warnings:'>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <cat>
                      more_env: []
                      words: [{<cat>} {($ Id.VSub_DollarName WARNINGS)}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [8885 8896]
                )
              ]
              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.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-n>}
                                {(DQ ($ Id.VSub_DollarName dir))}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  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.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <Id.Lit_LBracket '['>
                                      more_env: []
                                      words: [
                                        {<Id.Lit_LBracket '['>}
                                        {<-z>}
                                        {(DQ ($ Id.VSub_DollarName dryrun))}
                                        {<-o>}
                                        {<-n>}
                                        {(DQ ($ Id.VSub_DollarName rerun))}
                                        {<Id.Lit_RBracket ']'>}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <panic>
                              more_env: []
                              words: [{<panic>} {(DQ <'Should not have a temporary directory'>)}]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          spids: [8931 8952]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <remove_tree>
                      more_env: []
                      words: [{<remove_tree>} {($ Id.VSub_DollarName dir)}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [8915 8928]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (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 <update>)}
        )
      ]
      redirects: []
    )
    (command.If
      if_kw: <Id.KW_If if>
      arms: [
        (IfArm
          keyword: <Id.KW_If if>
          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 _>
                )
              ]
            )
          then_kw: <Id.KW_Then then>
          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: <build>
                  pattern: (pat.Words words:[{<build>} {<diff>} {<extract>} {<status>} {<resolve>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (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_Number 1))}
                        )
                      ]
                      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: []
                  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: []
            )
          ]
          spids: [8991 9004]
        )
      ]
      else_action: []
      fi_kw: <Id.KW_Fi fi>
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'SRCDIR='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'SRCDIR='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'SRCDIR='> name:SRCDIR)
          op: assign_op.Equal
          rhs: {<'/usr/src'>}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'DESTDIR='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'DESTDIR='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'DESTDIR='> name:DESTDIR)
          op: assign_op.Equal
          rhs: (rhs_word__Empty)
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'FREEBSD_ID='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'FREEBSD_ID='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'FREEBSD_ID='> name:FREEBSD_ID)
          op: assign_op.Equal
          rhs: (rhs_word__Empty)
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'ALWAYS_INSTALL='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'ALWAYS_INSTALL='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ALWAYS_INSTALL='> name:ALWAYS_INSTALL)
          op: assign_op.Equal
          rhs: (rhs_word__Empty)
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'IGNORE_FILES='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'IGNORE_FILES='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'IGNORE_FILES='> name:IGNORE_FILES)
          op: assign_op.Equal
          rhs: (rhs_word__Empty)
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'MAKE_OPTIONS='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'MAKE_OPTIONS='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'MAKE_OPTIONS='> name:MAKE_OPTIONS)
          op: assign_op.Equal
          rhs: (rhs_word__Empty)
        )
      ]
      redirects: []
    )
    (command.If
      if_kw: <Id.KW_If if>
      arms: [
        (IfArm
          keyword: <Id.KW_If if>
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.Simple
                      blame_tok: <Id.Lit_LBracket '['>
                      more_env: []
                      words: [
                        {<Id.Lit_LBracket '['>}
                        {<-r>}
                        {<'/etc/etcupdate.conf'>}
                        {<Id.Lit_RBracket ']'>}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          then_kw: <Id.KW_Then then>
          action: [
            (command.Simple
              blame_tok: <.>
              more_env: []
              words: [{<.>} {<'/etc/etcupdate.conf'>}]
              redirects: []
              do_fork: T
            )
          ]
          spids: [9148 9159]
        )
      ]
      else_action: []
      fi_kw: <Id.KW_Fi fi>
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'tarball='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'tarball='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'tarball='> name:tarball)
          op: assign_op.Equal
          rhs: (rhs_word__Empty)
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'rerun='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'rerun='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rerun='> name:rerun)
          op: assign_op.Equal
          rhs: (rhs_word__Empty)
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'always='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'always='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'always='> name:always)
          op: assign_op.Equal
          rhs: (rhs_word__Empty)
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'dryrun='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'dryrun='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dryrun='> name:dryrun)
          op: assign_op.Equal
          rhs: (rhs_word__Empty)
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'ignore='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'ignore='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ignore='> name:ignore)
          op: assign_op.Equal
          rhs: (rhs_word__Empty)
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'nobuild='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'nobuild='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'nobuild='> name:nobuild)
          op: assign_op.Equal
          rhs: (rhs_word__Empty)
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'preworld='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'preworld='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'preworld='> name:preworld)
          op: assign_op.Equal
          rhs: (rhs_word__Empty)
        )
      ]
      redirects: []
    )
    (command.WhileUntil
      keyword: <Id.KW_While while>
      cond: 
        (condition.Shell
          commands: [
            (command.Sentence
              child: 
                (command.Simple
                  blame_tok: <getopts>
                  more_env: []
                  words: [{<getopts>} {(DQ <'d:nprs:t:A:BD:FI:L:M:'>)} {<option>}]
                  redirects: []
                  do_fork: T
                )
              terminator: <Id.Op_Semi _>
            )
          ]
        )
      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 option))})
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <d>
                  pattern: (pat.Words words:[{<d>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'WORKDIR='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'WORKDIR='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'WORKDIR='> name:WORKDIR)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName OPTARG)}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <n>
                  pattern: (pat.Words words:[{<n>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'dryrun='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'dryrun='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dryrun='> name:dryrun)
                          op: assign_op.Equal
                          rhs: {<YES>}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <p>
                  pattern: (pat.Words words:[{<p>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'preworld='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'preworld='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'preworld='> name:preworld)
                          op: assign_op.Equal
                          rhs: {<YES>}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <r>
                  pattern: (pat.Words words:[{<r>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'rerun='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'rerun='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rerun='> name:rerun)
                          op: assign_op.Equal
                          rhs: {<YES>}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <s>
                  pattern: (pat.Words words:[{<s>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'SRCDIR='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'SRCDIR='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'SRCDIR='> name:SRCDIR)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName OPTARG)}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <t>
                  pattern: (pat.Words words:[{<t>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'tarball='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'tarball='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'tarball='> name:tarball)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName OPTARG)}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <A>
                  pattern: (pat.Words words:[{<A>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <set>
                      more_env: []
                      words: [{<set>} {<-o>} {<noglob>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'always='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'always='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'always='> name:always)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName always) <' '> ($ Id.VSub_DollarName OPTARG))}
                        )
                      ]
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <set>
                      more_env: []
                      words: [{<set>} {<Id.Lit_Other '+'> <o>} {<noglob>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <B>
                  pattern: (pat.Words words:[{<B>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'nobuild='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'nobuild='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'nobuild='> name:nobuild)
                          op: assign_op.Equal
                          rhs: {<YES>}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <D>
                  pattern: (pat.Words words:[{<D>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'DESTDIR='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'DESTDIR='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'DESTDIR='> name:DESTDIR)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName OPTARG)}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <F>
                  pattern: (pat.Words words:[{<F>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'FREEBSD_ID='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'FREEBSD_ID='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'FREEBSD_ID='> name:FREEBSD_ID)
                          op: assign_op.Equal
                          rhs: {<YES>}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <I>
                  pattern: (pat.Words words:[{<I>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <set>
                      more_env: []
                      words: [{<set>} {<-o>} {<noglob>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'ignore='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'ignore='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ignore='> name:ignore)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName ignore) <' '> ($ Id.VSub_DollarName OPTARG))}
                        )
                      ]
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <set>
                      more_env: []
                      words: [{<set>} {<Id.Lit_Other '+'> <o>} {<noglob>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <L>
                  pattern: (pat.Words words:[{<L>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'LOGFILE='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'LOGFILE='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'LOGFILE='> name:LOGFILE)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName OPTARG)}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <M>
                  pattern: (pat.Words words:[{<M>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'MAKE_OPTIONS='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'MAKE_OPTIONS='>
                          lhs: 
                            (sh_lhs_expr.Name
                              left: <Id.Lit_VarLike 'MAKE_OPTIONS='>
                              name: MAKE_OPTIONS
                            )
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName OPTARG))}
                        )
                      ]
                      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: <echo>
                      more_env: []
                      words: [{<echo>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <usage>
                      more_env: []
                      words: [{<usage>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
          ]
          right: <Id.KW_Done done>
        )
      redirects: []
    )
    (command.Simple
      blame_tok: <shift>
      more_env: []
      words: [
        {<shift>}
        {
          (word_part.ArithSub
            left: <Id.Left_DollarDParen '$(('>
            anode: 
              (arith_expr.Binary
                op_id: Id.Arith_Minus
                left: ($ Id.Lit_ArithVarLike OPTIND)
                right: {<Id.Lit_Digits 1>}
              )
            right: <Id.Right_DollarDParen _>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <set>
      more_env: []
      words: [{<set>} {<-o>} {<noglob>}]
      redirects: []
      do_fork: T
    )
    (command.If
      if_kw: <Id.KW_If if>
      arms: [
        (IfArm
          keyword: <Id.KW_If if>
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.Simple
                      blame_tok: <Id.Lit_LBracket '['>
                      more_env: []
                      words: [
                        {<Id.Lit_LBracket '['>}
                        {<-n>}
                        {(DQ ($ Id.VSub_DollarName always))}
                        {<Id.Lit_RBracket ']'>}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          then_kw: <Id.KW_Then then>
          action: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'ALWAYS_INSTALL='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'ALWAYS_INSTALL='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ALWAYS_INSTALL='> name:ALWAYS_INSTALL)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_DollarName always))}
                )
              ]
              redirects: []
            )
          ]
          spids: [9481 9494]
        )
      ]
      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.Sentence
                  child: 
                    (command.Simple
                      blame_tok: <Id.Lit_LBracket '['>
                      more_env: []
                      words: [
                        {<Id.Lit_LBracket '['>}
                        {<-n>}
                        {(DQ ($ Id.VSub_DollarName ignore))}
                        {<Id.Lit_RBracket ']'>}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          then_kw: <Id.KW_Then then>
          action: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'IGNORE_FILES='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'IGNORE_FILES='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'IGNORE_FILES='> name:IGNORE_FILES)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_DollarName ignore))}
                )
              ]
              redirects: []
            )
          ]
          spids: [9511 9524]
        )
      ]
      else_action: []
      fi_kw: <Id.KW_Fi fi>
      redirects: []
    )
    (command.Simple
      blame_tok: <set>
      more_env: []
      words: [{<set>} {<Id.Lit_Other '+'> <o>} {<noglob>}]
      redirects: []
      do_fork: T
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'WORKDIR='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'WORKDIR='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'WORKDIR='> name:WORKDIR)
          op: assign_op.Equal
          rhs: 
            {
              (BracedVarSub
                left: <Id.Left_DollarBrace '${'>
                token: <Id.VSub_Name WORKDIR>
                var_name: WORKDIR
                suffix_op: 
                  (suffix_op.Unary
                    op: <Id.VTest_ColonHyphen _>
                    arg_word: 
                      {($ Id.VSub_DollarName DESTDIR) <Id.Lit_Slash '/'> <var> <Id.Lit_Slash '/'> <db> 
                        <Id.Lit_Slash '/'> <etcupdate>
                      }
                  )
                right: <Id.Right_DollarBrace '}'>
              )
            }
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'LOGFILE='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'LOGFILE='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'LOGFILE='> name:LOGFILE)
          op: assign_op.Equal
          rhs: 
            {
              (BracedVarSub
                left: <Id.Left_DollarBrace '${'>
                token: <Id.VSub_Name LOGFILE>
                var_name: LOGFILE
                suffix_op: 
                  (suffix_op.Unary
                    op: <Id.VTest_ColonHyphen _>
                    arg_word: {($ Id.VSub_DollarName WORKDIR) <Id.Lit_Slash '/'> <log>}
                  )
                right: <Id.Right_DollarBrace '}'>
              )
            }
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'OLDTREE='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'OLDTREE='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OLDTREE='> name:OLDTREE)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName WORKDIR) <'/old'>}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'NEWTREE='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'NEWTREE='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'NEWTREE='> name:NEWTREE)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName WORKDIR) <'/current'>}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'CONFLICTS='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'CONFLICTS='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'CONFLICTS='> name:CONFLICTS)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName WORKDIR) <'/conflicts'>}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'WARNINGS='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'WARNINGS='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'WARNINGS='> name:WARNINGS)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName WORKDIR) <'/warnings'>}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'EDITOR='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'EDITOR='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'EDITOR='> name:EDITOR)
          op: assign_op.Equal
          rhs: 
            {
              (BracedVarSub
                left: <Id.Left_DollarBrace '${'>
                token: <Id.VSub_Name EDITOR>
                var_name: EDITOR
                suffix_op: 
                  (suffix_op.Unary
                    op: <Id.VTest_ColonHyphen _>
                    arg_word: 
                      {<Id.Lit_Slash '/'> <usr> <Id.Lit_Slash '/'> <bin> <Id.Lit_Slash '/'> <vi>}
                  )
                right: <Id.Right_DollarBrace '}'>
              )
            }
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'PREWORLD_FILES='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'PREWORLD_FILES='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'PREWORLD_FILES='> name:PREWORLD_FILES)
          op: assign_op.Equal
          rhs: {(DQ <'etc/master.passwd etc/group'>)}
        )
      ]
      redirects: []
    )
    (command.Case
      case_kw: <Id.KW_Case case>
      to_match: (case_arg.Word w:{($ Id.VSub_DollarName command)})
      arms_start: <Id.KW_In in>
      arms: [
        (CaseArm
          left: <update>
          pattern: (pat.Words words:[{<update>}])
          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.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-n>}
                                {(DQ ($ Id.VSub_DollarName rerun))}
                                {<-a>}
                                {<-n>}
                                {(DQ ($ Id.VSub_DollarName tarball))}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'Only one of -r or -t can be specified.'>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <usage>
                      more_env: []
                      words: [{<usage>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [9655 9676]
                )
              ]
              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.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-n>}
                                {(DQ ($ Id.VSub_DollarName rerun))}
                                {<-a>}
                                {<-n>}
                                {(DQ ($ Id.VSub_DollarName preworld))}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'Only one of -p or -r can be specified.'>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <usage>
                      more_env: []
                      words: [{<usage>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [9695 9716]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
          ]
          right: <Id.Op_DSemi _>
        )
        (CaseArm
          left: <build>
          pattern: (pat.Words words:[{<build>} {<diff>} {<status>}])
          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.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-n>}
                                {(DQ ($ Id.VSub_DollarName dryrun))}
                                {<-o>}
                                {<-n>}
                                {(DQ ($ Id.VSub_DollarName rerun))}
                                {<-o>}
                                {<-n>}
                                {(DQ ($ Id.VSub_DollarName tarball))}
                                {<-o>}
                                {<-n>}
                                {(DQ ($ Id.VSub_DollarName preworld))}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <usage>
                      more_env: []
                      words: [{<usage>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [9746 9785]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
          ]
          right: <Id.Op_DSemi _>
        )
        (CaseArm
          left: <resolve>
          pattern: (pat.Words words:[{<resolve>}])
          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.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-n>}
                                {(DQ ($ Id.VSub_DollarName dryrun))}
                                {<-o>}
                                {<-n>}
                                {(DQ ($ Id.VSub_DollarName rerun))}
                                {<-o>}
                                {<-n>}
                                {(DQ ($ Id.VSub_DollarName tarball))}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <usage>
                      more_env: []
                      words: [{<usage>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [9801 9830]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
          ]
          right: <Id.Op_DSemi _>
        )
        (CaseArm
          left: <extract>
          pattern: (pat.Words words:[{<extract>}])
          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.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-n>}
                                {(DQ ($ Id.VSub_DollarName dryrun))}
                                {<-o>}
                                {<-n>}
                                {(DQ ($ Id.VSub_DollarName rerun))}
                                {<-o>}
                                {<-n>}
                                {(DQ ($ Id.VSub_DollarName preworld))}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <usage>
                      more_env: []
                      words: [{<usage>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [9846 9875]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
          ]
          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.Sentence
                  child: 
                    (command.Simple
                      blame_tok: <Id.Lit_LBracket '['>
                      more_env: []
                      words: [
                        {<Id.Lit_LBracket '['>}
                        {<-n>}
                        {(DQ ($ Id.VSub_DollarName preworld))}
                        {<Id.Lit_RBracket ']'>}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          then_kw: <Id.KW_Then then>
          action: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'OLDTREE='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'OLDTREE='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'OLDTREE='> name:OLDTREE)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_DollarName NEWTREE)}
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'NEWTREE='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'NEWTREE='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'NEWTREE='> name:NEWTREE)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_DollarName WORKDIR) <'/preworld'>}
                )
              ]
              redirects: []
            )
          ]
          spids: [9901 9914]
        )
      ]
      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.Sentence
                  child: 
                    (command.Pipeline
                      negated: <Id.KW_Bang '!'>
                      children: [
                        (command.Simple
                          blame_tok: <mkdir>
                          more_env: []
                          words: [{<mkdir>} {<-p>} {($ Id.VSub_DollarName WORKDIR)}]
                          redirects: [
                            (Redir
                              op: <Id.Redir_Great '2>'>
                              loc: (redir_loc.Fd fd:2)
                              arg: {<'/dev/null'>}
                            )
                          ]
                          do_fork: T
                        )
                      ]
                      ops: []
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          then_kw: <Id.KW_Then then>
          action: [
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [
                {<echo>}
                {(DQ <'Failed to create work directory '> ($ Id.VSub_DollarName WORKDIR))}
              ]
              redirects: []
              do_fork: T
            )
          ]
          spids: [9934 9948]
        )
      ]
      else_action: []
      fi_kw: <Id.KW_Fi fi>
      redirects: []
    )
    (command.Case
      case_kw: <Id.KW_Case case>
      to_match: (case_arg.Word w:{($ Id.VSub_DollarName command)})
      arms_start: <Id.KW_In in>
      arms: [
        (CaseArm
          left: <diff>
          pattern: (pat.Words words:[{<diff>} {<resolve>} {<status>}])
          middle: <Id.Right_CasePat _>
          action: [
            (command.Simple
              blame_tok: <exec>
              more_env: []
              words: [{<exec>}]
              redirects: [
                (Redir
                  op: <Id.Redir_DGreat '3>>'>
                  loc: (redir_loc.Fd fd:3)
                  arg: {($ Id.VSub_DollarName LOGFILE)}
                )
              ]
              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: <exec>
              more_env: []
              words: [{<exec>}]
              redirects: [
                (Redir
                  op: <Id.Redir_Great '3>'>
                  loc: (redir_loc.Fd fd:3)
                  arg: {($ Id.VSub_DollarName LOGFILE)}
                )
              ]
              do_fork: T
            )
          ]
          right: <Id.Op_DSemi _>
        )
      ]
      arms_end: <Id.KW_Esac esac>
      redirects: []
    )
    (command.Simple
      blame_tok: <Id.Left_DollarBrace '${'>
      more_env: []
      words: [{(${ Id.VSub_Name command) <_cmd>} {(DQ ($ Id.VSub_At '@'))}]
      redirects: []
      do_fork: T
    )
  ]
)