(CommandList
  children: [
    (FuncDef
      name: err_exit
      body: 
        (BraceGroup
          children: [
            (C {(print)} {(-u2)} {(-n)} {(DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\t">))})
            (C {(print)} {(-u2)} {(-r)} {($ VSub_Name "$Command") (Lit_Other ":")} {(DQ ($ VSub_At "$@"))})
            (C {(let)} {(Lit_VarLike "Errors+=") (1)})
          ]
          spids: [61]
        )
      spids: [57 60]
    )
    (C {(alias)} {(Lit_VarLike "err_exit=") (SQ <"err_exit $LINENO">)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:Command)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Number 0>
                suffix_op: (StringUnary op_id:VOp1_DPound arg_word:{("*") (Lit_Slash /)})
                spids: [105 110]
              )
            }
          spids: [104]
        )
      ]
      spids: [104]
    )
    (C {(integer)} {(Lit_VarLike "Errors=") (0)})
    (AndOr
      children: [
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:tmp)
              op: Equal
              rhs: 
                {
                  (CommandSubPart
                    command_list: (CommandList children:[(C {(mktemp)} {(-dt)})])
                    left_token: <Left_CommandSub "$(">
                    spids: [119 123]
                  )
                }
              spids: [118]
            )
          ]
          spids: [118]
        )
        (BraceGroup
          children: [
            (Sentence
              child: (C {(err_exit)} {(mktemp)} {(-dt)} {(failed)})
              terminator: <Op_Semi ";">
            )
            (Sentence child:(C {(exit)} {(1)}) terminator:<Op_Semi ";">)
          ]
          spids: [127]
        )
      ]
      op_id: Op_DPipe
    )
    (C {(trap)} {(DQ ("cd /; rm -rf ") ($ VSub_Name "$tmp"))} {(EXIT)})
    (If
      arms: [
        (if_arm
          cond: [(C {($ VSub_Name "$SHELL")} {(-c)} {(SQ <"[[ ~root == /* ]]">)})]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:x)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(print)} {(-r)} {(--)} {(TildeSubPart prefix:root)})]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [168 177]
                      )
                    }
                  spids: [167]
                )
              ]
              spids: [167]
            )
            (AndOr
              children: [
                (DBracket
                  expr: 
                    (BoolBinary
                      op_id: BoolBinary_GlobDEqual
                      left: {($ VSub_Name "$x")}
                      right: {(Lit_Tilde "~") (root)}
                    )
                )
                (C {(err_exit)} {(SQ <"~user expanded in subshell prevent ~user from working">)})
              ]
              op_id: Op_DPipe
            )
          ]
          spids: [-1 165]
        )
      ]
      spids: [-1 199]
    )
    (FuncDef
      name: home
      body: 
        (BraceGroup
          children: [
            (C {(typeset)} {(Lit_VarLike "IFS=") (Lit_Other ":")} {(Lit_VarLike "pwd=") (/etc/passwd)})
            (C {(set)} {(-o)} {(noglob)})
            (If
              arms: [
                (if_arm
                  cond: [
                    (AndOr
                      children: [
                        (DBracket
                          expr: (BoolUnary op_id:BoolUnary_f child:{($ VSub_Name "$pwd")})
                        )
                        (SimpleCommand
                          words: [
                            {(grep)}
                            {(-c)}
                            {(DQ ("^") ($ VSub_Number "$1") (":"))}
                            {($ VSub_Name "$pwd")}
                          ]
                          redirects: [
                            (Redir
                              op_id: Redir_Great
                              fd: -1
                              arg_word: {(/dev/null)}
                              spids: [252]
                            )
                          ]
                        )
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  action: [
                    (C {(set)} {(--)} 
                      {
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (C {(grep)} {(DQ ("^") ($ VSub_Number "$1") (":"))} 
                                  {($ VSub_Name "$pwd")}
                                )
                              ]
                            )
                          left_token: <Left_CommandSub "$(">
                          spids: [263 273]
                        )
                      }
                    )
                    (C {(print)} {(-r)} {(--)} {(DQ ($ VSub_Number "$6"))})
                  ]
                  spids: [-1 257]
                )
              ]
              else_action: [(C {(print)} {(.)})]
              spids: [287 294]
            )
          ]
          spids: [209]
        )
      spids: [202 205]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:OLDPWD) op:Equal rhs:{(/bin)} spids:[299])]
      spids: [299]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (DBracket
              expr: 
                (BoolBinary
                  op_id: BoolBinary_GlobNEqual
                  left: {(Lit_Tilde "~")}
                  right: {($ VSub_Name "$HOME")}
                )
            )
          ]
          action: [(C {(err_exit)} {(SQ <"~">)} {(not)} {($ VSub_Name "$HOME")})]
          spids: [-1 314]
        )
      ]
      spids: [-1 326]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:x) op:Equal rhs:{(TildeSubPart prefix:"")} spids:[328])]
      spids: [328]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (DBracket
              expr: 
                (BoolBinary
                  op_id: BoolBinary_GlobNEqual
                  left: {($ VSub_Name "$x")}
                  right: {($ VSub_Name "$HOME")}
                )
            )
          ]
          action: [
            (C {(err_exit)} {(Lit_VarLike "x=") (Lit_Tilde "~")} {(not)} {($ VSub_Name "$HOME")})
          ]
          spids: [-1 343]
        )
      ]
      spids: [-1 354]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:x)
          op: Equal
          rhs: {(x) (Lit_Other ":") (Lit_Tilde "~")}
          spids: [356]
        )
      ]
      spids: [356]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (DBracket
              expr: 
                (BoolBinary
                  op_id: BoolBinary_GlobNEqual
                  left: {($ VSub_Name "$x")}
                  right: {(x) (Lit_Other ":") ($ VSub_Name "$HOME")}
                )
            )
          ]
          action: [
            (C {(err_exit)} {(Lit_VarLike "x=") (x) (Lit_Other ":") (Lit_Tilde "~")} {(not)} 
              {(x) (Lit_Other ":") ($ VSub_Name "$HOME")}
            )
          ]
          spids: [-1 375]
        )
      ]
      spids: [-1 390]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (DBracket
              expr: 
                (BoolBinary
                  op_id: BoolBinary_GlobNEqual
                  left: {(Lit_Tilde "~") (Lit_Other "+")}
                  right: {($ VSub_Name "$PWD")}
                )
            )
          ]
          action: [(C {(err_exit)} {(SQ <"~">)} {(not)} {($ VSub_Name "$PWD")})]
          spids: [-1 405]
        )
      ]
      spids: [-1 417]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:x) op:Equal rhs:{(TildeSubPart prefix:"+")} spids:[419])]
      spids: [419]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (DBracket
              expr: 
                (BoolBinary
                  op_id: BoolBinary_GlobNEqual
                  left: {($ VSub_Name "$x")}
                  right: {($ VSub_Name "$PWD")}
                )
            )
          ]
          action: [
            (C {(err_exit)} {(Lit_VarLike "x=") (Lit_Tilde "~") (Lit_Other "+")} {(not)} 
              {($ VSub_Name "$PWD")}
            )
          ]
          spids: [-1 435]
        )
      ]
      spids: [-1 447]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (DBracket
              expr: 
                (BoolBinary
                  op_id: BoolBinary_GlobNEqual
                  left: {(Lit_Tilde "~") (-)}
                  right: {($ VSub_Name "$OLDPWD")}
                )
            )
          ]
          action: [(C {(err_exit)} {(SQ <"~">)} {(not)} {($ VSub_Name "$PWD")})]
          spids: [-1 462]
        )
      ]
      spids: [-1 474]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:x) op:Equal rhs:{(TildeSubPart prefix:-)} spids:[476])]
      spids: [476]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (DBracket
              expr: 
                (BoolBinary
                  op_id: BoolBinary_GlobNEqual
                  left: {($ VSub_Name "$x")}
                  right: {($ VSub_Name "$OLDPWD")}
                )
            )
          ]
          action: [
            (C {(err_exit)} {(Lit_VarLike "x=") (Lit_Tilde "~") (-)} {(not)} {($ VSub_Name "$OLDPWD")})
          ]
          spids: [-1 492]
        )
      ]
      spids: [-1 504]
    )
    (ForEach
      iter_name: u
      iter_words: [{(root)} {(Administrator)}]
      do_arg_iter: False
      body: 
        (DoGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:h)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(home)} {($ VSub_Name "$u")})])
                        left_token: <Left_CommandSub "$(">
                        spids: [519 523]
                      )
                    }
                  spids: [518]
                )
              ]
              spids: [518]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (DBracket
                      expr: 
                        (BoolBinary
                          op_id: BoolBinary_GlobNEqual
                          left: {($ VSub_Name "$h")}
                          right: {(.)}
                        )
                    )
                  ]
                  action: [
                    (AndOr
                      children: [
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_ef
                              left: {(Lit_Tilde "~") ($ VSub_Name "$u")}
                              right: {($ VSub_Name "$h")}
                            )
                        )
                        (C {(err_exit)} {(DQ ("~") ($ VSub_Name "$u") (" not ") ($ VSub_Name "$h"))})
                      ]
                      op_id: Op_DPipe
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:x)
                          op: Equal
                          rhs: {(Lit_Tilde "~") ($ VSub_Name "$u")}
                          spids: [564]
                        )
                      ]
                      spids: [564]
                    )
                    (AndOr
                      children: [
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_ef
                              left: {($ VSub_Name "$x")}
                              right: {($ VSub_Name "$h")}
                            )
                        )
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:x)
                              op: Equal
                              rhs: {(DQ ("~") ($ VSub_Name "$u") (" not ") ($ VSub_Name "$h"))}
                              spids: [581]
                            )
                          ]
                          spids: [581]
                        )
                      ]
                      op_id: Op_DPipe
                    )
                    (ControlFlow token:<ControlFlow_Break break>)
                  ]
                  spids: [-1 539]
                )
              ]
              spids: [-1 593]
            )
          ]
          spids: [516 595]
        )
      spids: [511 -1]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:x)
          op: Equal
          rhs: {(TildeSubPart prefix:g.r.emlin)}
          spids: [597]
        )
      ]
      spids: [597]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (DBracket
              expr: 
                (BoolBinary
                  op_id: BoolBinary_GlobNEqual
                  left: {($ VSub_Name "$x")}
                  right: {(SQ <"~g.r.emlin">)}
                )
            )
          ]
          action: [
            (C {(err_exit)} 
              {(DQ ("x=~g.r.emlin failed -- expected '~g.r.emlin', got '") ($ VSub_Name "$x") ("'"))}
            )
          ]
          spids: [-1 615]
        )
      ]
      spids: [-1 625]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:x)
          op: Equal
          rhs: {(TildeSubPart prefix:":~")}
          spids: [627]
        )
      ]
      spids: [627]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (DBracket
              expr: 
                (BoolBinary
                  op_id: BoolBinary_GlobNEqual
                  left: {($ VSub_Name "$x")}
                  right: {(DQ ($ VSub_Name "$HOME") (":") ($ VSub_Name "$HOME"))}
                )
            )
          ]
          action: [
            (C {(err_exit)} 
              {
                (DQ ("x=~:~ failed, expected '") ($ VSub_Name "$HOME") (":") ($ VSub_Name "$HOME") 
                  ("', got '") ($ VSub_Name "$x") ("'")
                )
              }
            )
          ]
          spids: [-1 648]
        )
      ]
      spids: [-1 662]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:HOME) op:Equal rhs:{(/)} spids:[664])]
      spids: [664]
    )
    (AndOr
      children: [
        (DBracket
          expr: (BoolBinary op_id:BoolBinary_GlobDEqual left:{(Lit_Tilde "~")} right:{(/)})
        )
        (C {(err_exit)} {(SQ <"~ should be /">)})
      ]
      op_id: Op_DPipe
    )
    (AndOr
      children: [
        (DBracket
          expr: (BoolBinary op_id:BoolBinary_GlobDEqual left:{(Lit_Tilde "~") (/foo)} right:{(/foo)})
        )
        (C {(err_exit)} {(SQ <"~/foo should be /foo when ~==/">)})
      ]
      op_id: Op_DPipe
    )
    (SimpleCommand
      words: [{(print)} {(SQ <"print ~+"> <Lit_EscapedChar "\\n"> <"[[ $1 ]] && $0">)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{($ VSub_Name "$tmp") (/tilde)} spids:[712])
      ]
    )
    (C {(chmod)} {(Lit_Other "+") (x)} {($ VSub_Name "$tmp") (/tilde)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:nl)
          op: Equal
          rhs: {(SQ <Lit_EscapedChar "\\n">)}
          spids: [725]
        )
      ]
      spids: [725]
    )
    (AndOr
      children: [
        (DBracket
          expr: 
            (BoolBinary
              op_id: BoolBinary_GlobDEqual
              left: 
                {
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [(C {($ VSub_Name "$tmp") (/tilde)} {(foo)})]
                      )
                    left_token: <Left_CommandSub "$(">
                    spids: [732 737]
                  )
                }
              right: {(DQ ($ VSub_Name "$PWD") ($ VSub_Name "$nl") ($ VSub_Name "$PWD"))}
            )
          redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[749])]
        )
        (C {(err_exit)} {(SQ <"tilde fails inside a script run by name">)})
      ]
      op_id: Op_DPipe
    )
    (C {(exit)} 
      {
        (ArithSubPart
          anode: 
            (TernaryOp
              cond: 
                (ArithBinary
                  op_id: Arith_Less
                  left: (ArithVarRef name:Errors)
                  right: (ArithWord w:{(Lit_Digits 125)})
                )
              true_expr: (ArithVarRef name:Errors)
              false_expr: (ArithWord w:{(Lit_Digits 125)})
            )
          spids: [764 773]
        )
      }
    )
  ]
)