(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:TEST_NO_CREATE_REPO spids:[16])
          op: Equal
          rhs: {(NoThanks)}
          spids: [16]
        )
      ]
      spids: [16]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:RETRY_TIMEOUT spids:[26])
          op: Equal
          rhs: {(60)}
          spids: [26]
        )
      ]
      spids: [26]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:P4D_TIMEOUT spids:[36]) op:Equal rhs:{(300)} spids:[36])]
      spids: [36]
    )
    (C {(.)} {(./test-lib.sh)})
    (If
      arms: [
        (if_arm
          cond: [(Pipeline children:[(C {(test_have_prereq)} {(PYTHON)})] negated:T)]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:skip_all spids:[56])
                  op: Equal
                  rhs: {(SQ <'skipping git p4 tests; python not available'>)}
                  spids: [56]
                )
              ]
              spids: [56]
            )
            (C {(test_done)})
          ]
          spids: [16777215 53]
        )
      ]
      spids: [16777215 64]
    )
    (AndOr
      ops: [Op_DPipe]
      children: [
        (Subshell
          child: (AndOr ops:[Op_DAmp] children:[(C {(p4)} {(-h)}) (C {(p4d)} {(-h)})])
          redirects: [
            (Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(/dev/null)})
            (Redir op:<Redir_GreatAnd '2>&'> fd:2 arg_word:{(1)})
          ]
          spids: [66 78]
        )
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:skip_all spids:[91])
                  op: Equal
                  rhs: {(SQ <'skipping git p4 tests; no p4 or p4d'>)}
                  spids: [91]
                )
              ]
              spids: [91]
            )
            (C {(test_done)})
          ]
          spids: [88]
        )
      ]
    )
    (FuncDef
      name: native_path
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DAmp Op_DAmp]
              children: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:path spids:[131])
                      op: Equal
                      rhs: {(DQ ($ VSub_Number '$1'))}
                      spids: [131]
                    )
                  ]
                  spids: [131]
                )
                (If
                  arms: [
                    (if_arm
                      cond: [
                        (AndOr
                          ops: [Op_DAmp]
                          children: [
                            (C {(test_have_prereq)} {(CYGWIN)})
                            (Pipeline
                              children: [(C {(p4)} {(-V)}) (C {(grep)} {(-q)} {(CYGWIN)})]
                              negated: T
                            )
                          ]
                        )
                      ]
                      action: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:path spids:[165])
                              op: Equal
                              rhs: 
                                {
                                  (CommandSubPart
                                    command_list: 
                                      (CommandList
                                        children: [
                                          (C {(cygpath)} {(--windows)} {(DQ ($ VSub_Name '$path'))})
                                        ]
                                      )
                                    left_token: <Left_CommandSub '$('>
                                    spids: [166 174]
                                  )
                                }
                              spids: [165]
                            )
                          ]
                          spids: [165]
                        )
                      ]
                      spids: [16777215 162]
                    )
                  ]
                  else_action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:path spids:[180])
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (C {(test-path-utils)} {(real_path)} {(DQ ($ VSub_Name '$path'))})
                                    ]
                                  )
                                left_token: <Left_CommandSub '$('>
                                spids: [181 189]
                              )
                            }
                          spids: [180]
                        )
                      ]
                      spids: [180]
                    )
                  ]
                  spids: [177 192]
                )
                (C {(echo)} {(DQ ($ VSub_Name '$path'))})
              ]
            )
          ]
          spids: [128]
        )
      spids: [123 127]
    )
    (FuncDef
      name: time_in_seconds
      body: 
        (BraceGroup
          children: [
            (Subshell
              child: 
                (AndOr
                  ops: [Op_DAmp]
                  children: [
                    (C {(cd)} {(/)})
                    (C {(DQ ($ VSub_Name '$PYTHON_PATH'))} {(-c)} 
                      {(SQ <'import time; print(int(time.time()))'>)}
                    )
                  ]
                )
              spids: [229 245]
            )
          ]
          spids: [226]
        )
      spids: [221 225]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:testid spids:[265])
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name this_test>
                suffix_op: (StringUnary op_id:VOp1_Pound arg_word:{(t)})
                spids: [266 270]
              )
            }
          spids: [265]
        )
      ]
      spids: [265]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:git_p4_test_start spids:[272])
          op: Equal
          rhs: {(9800)}
          spids: [272]
        )
      ]
      spids: [272]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:P4DPORT spids:[275])
          op: Equal
          rhs: 
            {
              (ArithSubPart
                anode: 
                  (ArithBinary
                    op_id: Arith_Plus
                    left: (ArithWord w:{(Lit_Digits 10669)})
                    right: 
                      (ArithBinary
                        op_id: Arith_Minus
                        left: (ArithWord w:{($ VSub_Name '$testid')})
                        right: (ArithWord w:{($ VSub_Name '$git_p4_test_start')})
                      )
                  )
                spids: [276 289]
              )
            }
          spids: [275]
        )
      ]
      spids: [275]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:P4PORT spids:[292])
          op: Equal
          rhs: {(localhost) (Lit_Other ':') ($ VSub_Name '$P4DPORT')}
          spids: [292]
        )
      ]
      spids: [292]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:P4CLIENT spids:[297])
          op: Equal
          rhs: {(client)}
          spids: [297]
        )
      ]
      spids: [297]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:P4USER spids:[300]) op:Equal rhs:{(author)} spids:[300])]
      spids: [300]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:P4EDITOR spids:[303]) op:Equal rhs:{(true)} spids:[303])]
      spids: [303]
    )
    (C {(unset)} {(P4CHARSET)})
    (C {(export)} {(P4PORT)} {(P4CLIENT)} {(P4USER)} {(P4EDITOR)} {(P4CHARSET)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:db spids:[323])
          op: Equal
          rhs: {(DQ ($ VSub_Name '$TRASH_DIRECTORY') (/db))}
          spids: [323]
        )
      ]
      spids: [323]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:cli spids:[329])
          op: Equal
          rhs: {(DQ ($ VSub_Name '$TRASH_DIRECTORY') (/cli))}
          spids: [329]
        )
      ]
      spids: [329]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:git spids:[335])
          op: Equal
          rhs: {(DQ ($ VSub_Name '$TRASH_DIRECTORY') (/git))}
          spids: [335]
        )
      ]
      spids: [335]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:pidfile spids:[341])
          op: Equal
          rhs: {(DQ ($ VSub_Name '$TRASH_DIRECTORY') (/p4d.pid))}
          spids: [341]
        )
      ]
      spids: [341]
    )
    (FuncDef
      name: cleanup
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-f)} {(DQ ($ VSub_Name '$pidfile'))})]
                  action: [
                    (AndOr
                      ops: [Op_DAmp]
                      children: [
                        (SimpleCommand
                          words: [
                            {(kill)}
                            {(-9)}
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [(C {(cat)} {(DQ ($ VSub_Name '$pidfile'))})]
                                  )
                                left_token: <Left_CommandSub '$('>
                                spids: [377 383]
                              )
                            }
                          ]
                          redirects: [(Redir op:<Redir_Great '2>'> fd:2 arg_word:{(/dev/null)})]
                        )
                        (ControlFlow
                          token: <ControlFlow_Exit exit>
                          arg_word: {(255)}
                        )
                      ]
                    )
                  ]
                  spids: [16777215 370]
                )
              ]
              spids: [16777215 395]
            )
          ]
          spids: [356]
        )
      spids: [351 355]
    )
    (C {(trap)} {(cleanup)} {(EXIT)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:TMPDIR spids:[415])
          op: Equal
          rhs: {(DQ ($ VSub_Name '$TRASH_DIRECTORY'))}
          spids: [415]
        )
      ]
      spids: [415]
    )
    (C {(export)} {(TMPDIR)})
    (FuncDef
      name: start_p4d
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DAmp Op_DAmp Op_DAmp]
              children: [
                (C {(mkdir)} {(-p)} {(DQ ($ VSub_Name '$db'))} {(DQ ($ VSub_Name '$cli'))} 
                  {(DQ ($ VSub_Name '$git'))}
                )
                (C {(rm)} {(-f)} {(DQ ($ VSub_Name '$pidfile'))})
                (Subshell
                  child: 
                    (AndOr
                      ops: [Op_DAmp]
                      children: [
                        (C {(cd)} {(DQ ($ VSub_Name '$db'))})
                        (BraceGroup
                          children: [
                            (Sentence
                              child: 
                                (C {(p4d)} {(-q)} {(-p)} {($ VSub_Name '$P4DPORT')} {(DQ ($ VSub_At '$@'))})
                              terminator: <Op_Amp '&'>
                            )
                            (SimpleCommand
                              words: [{(echo)} {($ VSub_Bang '$!')}]
                              redirects: [
                                (Redir
                                  op: <Redir_Great '>'>
                                  fd: 16777215
                                  arg_word: {(DQ ($ VSub_Name '$pidfile'))}
                                )
                              ]
                            )
                          ]
                          spids: [475]
                        )
                      ]
                    )
                  spids: [463 506]
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:i spids:[532])
                      op: Equal
                      rhs: 
                        {
                          (BracedVarSub
                            token: <VSub_Name P4D_START_PATIENCE>
                            suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(300)})
                            spids: [533 537]
                          )
                        }
                      spids: [532]
                    )
                  ]
                  spids: [532]
                )
              ]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:pid spids:[540])
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(cat)} {(DQ ($ VSub_Name '$pidfile'))})]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [541 547]
                      )
                    }
                  spids: [540]
                )
              ]
              spids: [540]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:timeout spids:[551])
                  op: Equal
                  rhs: 
                    {
                      (ArithSubPart
                        anode: 
                          (ArithBinary
                            op_id: Arith_Plus
                            left: 
                              (ArithWord
                                w: 
                                  {
                                    (CommandSubPart
                                      command_list: (CommandList children:[(C {(time_in_seconds)})])
                                      left_token: <Left_CommandSub '$('>
                                      spids: [553 555]
                                    )
                                  }
                              )
                            right: (ArithWord w:{($ VSub_Name '$P4D_TIMEOUT')})
                          )
                        spids: [552 561]
                      )
                    }
                  spids: [551]
                )
              ]
              spids: [551]
            )
            (Sentence
              child: 
                (WhileUntil
                  keyword: <KW_While while>
                  cond: [(C {(true)})]
                  body: 
                    (DoGroup
                      children: [
                        (If
                          arms: [
                            (if_arm
                              cond: [
                                (C {(test)} 
                                  {
                                    (CommandSubPart
                                      command_list: (CommandList children:[(C {(time_in_seconds)})])
                                      left_token: <Left_CommandSub '$('>
                                      spids: [576 578]
                                    )
                                  } {(-gt)} {($ VSub_Name '$timeout')}
                                )
                              ]
                              action: [
                                (C {(kill)} {(-9)} {($ VSub_Name '$pid')})
                                (ControlFlow
                                  token: <ControlFlow_Exit exit>
                                  arg_word: {(1)}
                                )
                              ]
                              spids: [16777215 585]
                            )
                          ]
                          spids: [16777215 600]
                        )
                        (C {(sleep)} {(1)})
                      ]
                      spids: [569 608]
                    )
                )
              terminator: <Op_Amp '&'>
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:watchdog_pid spids:[613])
                  op: Equal
                  rhs: {($ VSub_Bang '$!')}
                  spids: [613]
                )
              ]
              spids: [613]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:ready spids:[618])
                  op: Equal
                  rhs: (EmptyWord)
                  spids: [618]
                )
              ]
              spids: [618]
            )
            (WhileUntil
              keyword: <KW_While while>
              cond: [(C {(test)} {($ VSub_Name '$i')} {(-gt)} {(0)})]
              body: 
                (DoGroup
                  children: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (SimpleCommand
                              words: [{(p4)} {(info)}]
                              redirects: [
                                (Redir
                                  op: <Redir_Great '>'>
                                  fd: 16777215
                                  arg_word: {(/dev/null)}
                                )
                                (Redir
                                  op: <Redir_GreatAnd '2>&'>
                                  fd: 2
                                  arg_word: {(1)}
                                )
                              ]
                            )
                          ]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:ready spids:[655])
                                  op: Equal
                                  rhs: {(true)}
                                  spids: [655]
                                )
                              ]
                              spids: [655]
                            )
                            (ControlFlow token:<ControlFlow_Break break>)
                          ]
                          spids: [16777215 652]
                        )
                      ]
                      spids: [16777215 662]
                    )
                    (AndOr
                      ops: [Op_DPipe]
                      children: [
                        (SimpleCommand
                          words: [{(kill)} {(-0)} {($ VSub_Name '$pid')}]
                          redirects: [(Redir op:<Redir_Great '2>'> fd:2 arg_word:{(/dev/null)})]
                        )
                        (ControlFlow token:<ControlFlow_Break break>)
                      ]
                    )
                    (C {(echo)} {(waiting)} {(KW_For for)} {(p4d)} {(to)} {(start)})
                    (C {(sleep)} {(1)})
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:i spids:[701])
                          op: Equal
                          rhs: 
                            {
                              (ArithSubPart
                                anode: 
                                  (ArithBinary
                                    op_id: Arith_Minus
                                    left: (ArithWord w:{($ VSub_Name '$i')})
                                    right: (ArithWord w:{(Lit_Digits 1)})
                                  )
                                spids: [702 711]
                              )
                            }
                          spids: [701]
                        )
                      ]
                      spids: [701]
                    )
                  ]
                  spids: [632 714]
                )
            )
            (If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-z)} {(DQ ($ VSub_Name '$ready'))})]
                  action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})]
                  spids: [16777215 729]
                )
              ]
              spids: [16777215 741]
            )
            (C {(p4_add_user)} {(author)})
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(client_view)} {(DQ ('//depot/... //client/...'))})
                (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})
              ]
            )
          ]
          spids: [430]
        )
      spids: [425 429]
    )
    (FuncDef
      name: p4_add_user
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DAmp]
              children: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:name spids:[784])
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [784]
                    )
                  ]
                  spids: [784]
                )
                (SimpleCommand
                  words: [{(p4)} {(user)} {(-f)} {(-i)}]
                  redirects: [
                    (HereDoc
                      op: <Redir_DLessDash '<<-'>
                      fd: 16777215
                      here_begin: {(EOF)}
                      here_end_span_id: 811
                      stdin_parts: [
                        ('User: ')
                        ($ VSub_Name '$name')
                        ('\n')
                        ('Email: ')
                        ($ VSub_Name '$name')
                        ('@example.com\n')
                        ('FullName: Dr. ')
                        ($ VSub_Name '$name')
                        ('\n')
                      ]
                    )
                  ]
                )
              ]
            )
          ]
          spids: [781]
        )
      spids: [776 780]
    )
    (FuncDef
      name: p4_add_job
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(p4)} {(job)} {(-f)} {(-i)}]
              redirects: [
                (HereDoc
                  op: <Redir_DLessDash '<<-'>
                  fd: 16777215
                  here_begin: {(EOF)}
                  here_end_span_id: 841
                  stdin_parts: [
                    ('Job: ')
                    ($ VSub_Number '$1')
                    ('\n')
                    ('Status: open\n')
                    ('User: dummy\n')
                    ('Description:\n')
                  ]
                )
              ]
            )
          ]
          spids: [820]
        )
      spids: [815 819]
    )
    (FuncDef
      name: retry_until_success
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:timeout spids:[853])
                  op: Equal
                  rhs: 
                    {
                      (ArithSubPart
                        anode: 
                          (ArithBinary
                            op_id: Arith_Plus
                            left: 
                              (ArithWord
                                w: 
                                  {
                                    (CommandSubPart
                                      command_list: (CommandList children:[(C {(time_in_seconds)})])
                                      left_token: <Left_CommandSub '$('>
                                      spids: [855 857]
                                    )
                                  }
                              )
                            right: (ArithWord w:{($ VSub_Name '$RETRY_TIMEOUT')})
                          )
                        spids: [854 863]
                      )
                    }
                  spids: [853]
                )
              ]
              spids: [853]
            )
            (WhileUntil
              keyword: <KW_Until until>
              cond: [
                (AndOr
                  ops: [Op_DPipe]
                  children: [
                    (SimpleCommand
                      words: [{(DQ ($ VSub_At '$@'))}]
                      redirects: [(Redir op:<Redir_Great '2>'> fd:2 arg_word:{(/dev/null)})]
                    )
                    (C {(test)} 
                      {
                        (CommandSubPart
                          command_list: (CommandList children:[(C {(time_in_seconds)})])
                          left_token: <Left_CommandSub '$('>
                          spids: [879 881]
                        )
                      } {(-gt)} {($ VSub_Name '$timeout')}
                    )
                  ]
                )
              ]
              body: (DoGroup children:[(C {(sleep)} {(1)})] spids:[888 896])
            )
          ]
          spids: [850]
        )
      spids: [845 849]
    )
    (FuncDef
      name: retry_until_fail
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:timeout spids:[909])
                  op: Equal
                  rhs: 
                    {
                      (ArithSubPart
                        anode: 
                          (ArithBinary
                            op_id: Arith_Plus
                            left: 
                              (ArithWord
                                w: 
                                  {
                                    (CommandSubPart
                                      command_list: (CommandList children:[(C {(time_in_seconds)})])
                                      left_token: <Left_CommandSub '$('>
                                      spids: [911 913]
                                    )
                                  }
                              )
                            right: (ArithWord w:{($ VSub_Name '$RETRY_TIMEOUT')})
                          )
                        spids: [910 919]
                      )
                    }
                  spids: [909]
                )
              ]
              spids: [909]
            )
            (WhileUntil
              keyword: <KW_Until until>
              cond: [
                (AndOr
                  ops: [Op_DPipe]
                  children: [
                    (Pipeline
                      children: [
                        (SimpleCommand
                          words: [{(DQ ($ VSub_At '$@'))}]
                          redirects: [(Redir op:<Redir_Great '2>'> fd:2 arg_word:{(/dev/null)})]
                        )
                      ]
                      negated: T
                    )
                    (C {(test)} 
                      {
                        (CommandSubPart
                          command_list: (CommandList children:[(C {(time_in_seconds)})])
                          left_token: <Left_CommandSub '$('>
                          spids: [937 939]
                        )
                      } {(-gt)} {($ VSub_Name '$timeout')}
                    )
                  ]
                )
              ]
              body: (DoGroup children:[(C {(sleep)} {(1)})] spids:[946 954])
            )
          ]
          spids: [906]
        )
      spids: [901 905]
    )
    (FuncDef
      name: kill_p4d
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:pid spids:[967])
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(cat)} {(DQ ($ VSub_Name '$pidfile'))})]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [968 974]
                      )
                    }
                  spids: [967]
                )
              ]
              spids: [967]
            )
            (C {(retry_until_fail)} {(kill)} {($ VSub_Name '$pid')})
            (C {(retry_until_fail)} {(kill)} {(-9)} {($ VSub_Name '$pid')})
            (AndOr
              ops: [Op_DAmp Op_DAmp]
              children: [
                (SimpleCommand
                  words: [{(test_must_fail)} {(kill)} {($ VSub_Name '$pid')}]
                  redirects: [
                    (Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(/dev/null)})
                    (Redir op:<Redir_GreatAnd '2>&'> fd:2 arg_word:{(1)})
                  ]
                )
                (C {(rm)} {(-rf)} {(DQ ($ VSub_Name '$db'))} {(DQ ($ VSub_Name '$cli'))} 
                  {(DQ ($ VSub_Name '$pidfile'))}
                )
                (C {(retry_until_fail)} {(kill)} {(-9)} {($ VSub_Name '$watchdog_pid')})
              ]
            )
          ]
          spids: [964]
        )
      spids: [959 963]
    )
    (FuncDef
      name: cleanup_git
      body: 
        (BraceGroup
          children: [
            (C {(retry_until_success)} {(rm)} {(-r)} {(DQ ($ VSub_Name '$git'))})
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(test_must_fail)} {(test)} {(-d)} {(DQ ($ VSub_Name '$git'))})
                (C {(retry_until_success)} {(mkdir)} {(DQ ($ VSub_Name '$git'))})
              ]
            )
          ]
          spids: [1047]
        )
      spids: [1042 1046]
    )
    (FuncDef
      name: marshal_dump
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DAmp Op_DAmp Op_DAmp]
              children: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:what spids:[1093])
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [1093]
                    )
                  ]
                  spids: [1093]
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:line spids:[1099])
                      op: Equal
                      rhs: 
                        {
                          (BracedVarSub
                            token: <VSub_Number 2>
                            suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(1)})
                            spids: [1100 1104]
                          )
                        }
                      spids: [1099]
                    )
                  ]
                  spids: [1099]
                )
                (SimpleCommand
                  words: [{(cat)}]
                  redirects: [
                    (Redir
                      op: <Redir_Great '>'>
                      fd: 16777215
                      arg_word: {(DQ ($ VSub_Name '$TRASH_DIRECTORY') (/marshal-dump.py))}
                    )
                    (HereDoc
                      op: <Redir_DLessDash '<<-'>
                      fd: 16777215
                      here_begin: {(EOF)}
                      here_end_span_id: 1133
                      stdin_parts: [
                        ('import marshal\n')
                        ('import sys\n')
                        ("instream = getattr(sys.stdin, 'buffer', sys.stdin)\n")
                        ('for i in range(')
                        ($ VSub_Name '$line')
                        ('):\n')
                        ('    d = marshal.load(instream)\n')
                        ("print(d[b'")
                        ($ VSub_Name '$what')
                        ("'].decode('utf-8'))\n")
                      ]
                    )
                  ]
                )
                (C {(DQ ($ VSub_Name '$PYTHON_PATH'))} 
                  {(DQ ($ VSub_Name '$TRASH_DIRECTORY') (/marshal-dump.py))}
                )
              ]
            )
          ]
          spids: [1090]
        )
      spids: [1085 1089]
    )
    (FuncDef
      name: client_view
      body: 
        (BraceGroup
          children: [
            (Pipeline
              children: [
                (Subshell
                  child: 
                    (AndOr
                      ops: [Op_DAmp]
                      children: [
                        (SimpleCommand
                          words: [{(cat)}]
                          redirects: [
                            (HereDoc
                              op: <Redir_DLessDash '<<-'>
                              fd: 16777215
                              here_begin: {(EOF)}
                              here_end_span_id: 1195
                              stdin_parts: [
                                ('Client: ')
                                ($ VSub_Name '$P4CLIENT')
                                ('\n')
                                ('Description: ')
                                ($ VSub_Name '$P4CLIENT')
                                ('\n')
                                ('Root: ')
                                ($ VSub_Name '$cli')
                                ('\n')
                                ('AltRoots: ')
                                (CommandSubPart
                                  command_list: 
                                    (CommandList
                                      children: [(C {(native_path)} {(DQ ($ VSub_Name '$cli'))})]
                                    )
                                  left_token: <Left_CommandSub '$('>
                                  spids: [1184 1190]
                                )
                                ('\n')
                                ('LineEnd: unix\n')
                                ('View:\n')
                              ]
                            )
                          ]
                        )
                        (C {(printf)} {(DQ (Lit_Other '\\') ('t%s') (Lit_Other '\\') (n))} 
                          {(DQ ($ VSub_At '$@'))}
                        )
                      ]
                    )
                  spids: [1164 1211]
                )
                (C {(p4)} {(client)} {(-i)})
              ]
              negated: F
            )
          ]
          spids: [1161]
        )
      spids: [1156 1160]
    )
    (FuncDef
      name: is_cli_file_writeable
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DAmp]
              children: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:file spids:[1240])
                      op: Equal
                      rhs: {(DQ ($ VSub_Number '$1'))}
                      spids: [1240]
                    )
                  ]
                  spids: [1240]
                )
                (If
                  arms: [
                    (if_arm
                      cond: [
                        (AndOr
                          ops: [Op_DAmp]
                          children: [
                            (C {(test_have_prereq)} {(CYGWIN)})
                            (Pipeline
                              children: [(C {(p4)} {(-V)}) (C {(grep)} {(-q)} {(CYGWIN)})]
                              negated: F
                            )
                          ]
                        )
                      ]
                      action: [
                        (AndOr
                          ops: [Op_DAmp]
                          children: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:stat spids:[1272])
                                  op: Equal
                                  rhs: 
                                    {
                                      (CommandSubPart
                                        command_list: 
                                          (CommandList
                                            children: [
                                              (C {(stat)} 
                                                {(--format) (Lit_Other '=') (Lit_Other '%') (a)} {(DQ ($ VSub_Name '$file'))}
                                              )
                                            ]
                                          )
                                        left_token: <Left_CommandSub '$('>
                                        spids: [1273 1284]
                                      )
                                    }
                                  spids: [1272]
                                )
                              ]
                              spids: [1272]
                            )
                            (C {(test)} {($ VSub_Name '$stat')} {(Lit_Other '=')} {(644)})
                          ]
                        )
                      ]
                      spids: [16777215 1269]
                    )
                  ]
                  else_action: [(C {(test)} {(-w)} {(DQ ($ VSub_Name '$file'))})]
                  spids: [1298 1310]
                )
              ]
            )
          ]
          spids: [1229]
        )
      spids: [1224 1228]
    )
  ]
)