(CommandList
  children: [
    (FuncDef
      name: check
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:credential_opts)
                  op: Equal
                  rhs: {(SQ )}
                  spids: [20]
                )
              ]
              spids: [20]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:credential_cmd)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [23]
                )
              ]
              spids: [23]
            )
            (C {(shift)})
            (ForEach
              iter_name: arg
              iter_words: [{(DQ ($ VSub_At '$@'))}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:credential_opts)
                          op: Equal
                          rhs: 
                            {
                              (DQ ($ VSub_Name '$credential_opts') (" -c credential.helper='") 
                                ($ VSub_Name '$arg') ("'")
                              )
                            }
                          spids: [44]
                        )
                      ]
                      spids: [44]
                    )
                  ]
                  spids: [41 53]
                )
              spids: [35 39]
            )
            (AndOr
              children: [
                (SimpleCommand
                  words: [{(read_chunk)}]
                  redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(stdin)} spids:[58])]
                )
                (AndOr
                  children: [
                    (SimpleCommand
                      words: [{(read_chunk)}]
                      redirects: [
                        (Redir
                          op_id: Redir_Great
                          fd: 16777215
                          arg_word: {(expect-stdout)}
                          spids: [66]
                        )
                      ]
                    )
                    (AndOr
                      children: [
                        (SimpleCommand
                          words: [{(read_chunk)}]
                          redirects: [
                            (Redir
                              op_id: Redir_Great
                              fd: 16777215
                              arg_word: {(expect-stderr)}
                              spids: [74]
                            )
                          ]
                        )
                        (AndOr
                          children: [
                            (If
                              arms: [
                                (if_arm
                                  cond: [
                                    (Sentence
                                      child: 
                                        (Pipeline
                                          children: [
                                            (C {(eval)} 
                                              {
                                                (DQ ('git ') ($ VSub_Name '$credential_opts') 
                                                  (' credential ') ($ VSub_Name '$credential_cmd') (' <stdin >stdout 2>stderr')
                                                )
                                              }
                                            )
                                          ]
                                          negated: True
                                        )
                                      terminator: <Op_Semi ';'>
                                    )
                                  ]
                                  action: [
                                    (AndOr
                                      children: [
                                        (C {(echo)} 
                                          {
                                            (DQ ('git credential failed with code ') 
                                              ($ VSub_QMark '$?')
                                            )
                                          }
                                        )
                                        (AndOr
                                          children: [(C {(cat)} {(stderr)}) (C {(false)})]
                                          op_id: Op_DAmp
                                        )
                                      ]
                                      op_id: Op_DAmp
                                    )
                                  ]
                                  spids: [16777215 95]
                                )
                              ]
                              spids: [16777215 118]
                            )
                            (AndOr
                              children: [
                                (C {(test_cmp)} {(expect-stdout)} {(stdout)})
                                (C {(test_cmp)} {(expect-stderr)} {(stderr)})
                              ]
                              op_id: Op_DAmp
                            )
                          ]
                          op_id: Op_DAmp
                        )
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  op_id: Op_DAmp
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [17]
        )
      spids: [13 16]
    )
    (FuncDef
      name: read_chunk
      body: 
        (BraceGroup
          children: [
            (While
              cond: [(Sentence child:(C {(read)} {(line)}) terminator:<Op_Semi ';'>)]
              body: 
                (DoGroup
                  children: [
                    (Case
                      to_match: {(DQ ($ VSub_Name '$line'))}
                      arms: [
                        (case_arm
                          pat_list: [{(--)}]
                          action: [(ControlFlow token:<ControlFlow_Break break>)]
                          spids: [167 168 172 16777215]
                        )
                        (case_arm
                          pat_list: [{(Lit_Other '*')}]
                          action: [(C {(echo)} {(DQ ($ VSub_Name '$line'))})]
                          spids: [175 176 184 16777215]
                        )
                      ]
                      spids: [158 164 187]
                    )
                  ]
                  spids: [155 190]
                )
            )
          ]
          spids: [145]
        )
      spids: [141 144]
    )
    (FuncDef
      name: helper_test_clean
      body: 
        (BraceGroup
          children: [
            (C {(reject)} {($ VSub_Number '$1')} {(https)} {(example.com)} {(store-user)})
            (C {(reject)} {($ VSub_Number '$1')} {(https)} {(example.com)} {(user1)})
            (C {(reject)} {($ VSub_Number '$1')} {(https)} {(example.com)} {(user2)})
            (C {(reject)} {($ VSub_Number '$1')} {(http)} {(path.tld)} {(user)})
            (C {(reject)} {($ VSub_Number '$1')} {(https)} {(timeout.tld)} {(user)})
          ]
          spids: [220]
        )
      spids: [216 219]
    )
    (FuncDef
      name: reject
      body: 
        (BraceGroup
          children: [
            (Pipeline
              children: [
                (Subshell
                  child: 
                    (CommandList
                      children: [
                        (C {(echo)} {(Lit_VarLike 'protocol=') ($ VSub_Number '$2')})
                        (C {(echo)} {(Lit_VarLike 'host=') ($ VSub_Number '$3')})
                        (C {(echo)} {(Lit_VarLike 'username=') ($ VSub_Number '$4')})
                      ]
                    )
                  spids: [287 308]
                )
                (C {(git)} {(-c)} {(credential.helper) (Lit_Other '=') ($ VSub_Number '$1')} 
                  {(credential)} {(reject)}
                )
              ]
              negated: False
            )
          ]
          spids: [284]
        )
      spids: [280 283]
    )
    (FuncDef
      name: helper_test
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:HELPER)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [334]
                )
              ]
              spids: [334]
            )
            (C {(test_expect_success)} 
              {(DQ ('helper (') ($ VSub_Name '$HELPER') (') has no existing data'))} 
              {
                (SQ <'\n'> <'\t\tcheck fill $HELPER <<-\\EOF\n'> <'\t\tprotocol=https\n'> 
                  <'\t\thost=example.com\n'> <'\t\t--\n'> <'\t\tprotocol=https\n'> <'\t\thost=example.com\n'> <'\t\tusername=askpass-username\n'> 
                  <'\t\tpassword=askpass-password\n'> <'\t\t--\n'> <'\t\taskpass: Username for '>
                ) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <'https://example.com'>) 
                (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <':\n'> <'\t\taskpass: Password for '>) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) 
                (SQ <'https://askpass-username@example.com'>) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <':\n'> <'\t\tEOF\n'> <'\t'>)
              }
            )
            (C {(test_expect_success)} {(DQ ('helper (') ($ VSub_Name '$HELPER') (') stores password'))} 
              {
                (SQ <'\n'> <'\t\tcheck approve $HELPER <<-\\EOF\n'> <'\t\tprotocol=https\n'> 
                  <'\t\thost=example.com\n'> <'\t\tusername=store-user\n'> <'\t\tpassword=store-pass\n'> <'\t\tEOF\n'> <'\t'>
                )
              }
            )
            (C {(test_expect_success)} 
              {(DQ ('helper (') ($ VSub_Name '$HELPER') (') can retrieve password'))} 
              {
                (SQ <'\n'> <'\t\tcheck fill $HELPER <<-\\EOF\n'> <'\t\tprotocol=https\n'> 
                  <'\t\thost=example.com\n'> <'\t\t--\n'> <'\t\tprotocol=https\n'> <'\t\thost=example.com\n'> <'\t\tusername=store-user\n'> 
                  <'\t\tpassword=store-pass\n'> <'\t\t--\n'> <'\t\tEOF\n'> <'\t'>
                )
              }
            )
            (C {(test_expect_success)} 
              {(DQ ('helper (') ($ VSub_Name '$HELPER') (') requires matching protocol'))} 
              {
                (SQ <'\n'> <'\t\tcheck fill $HELPER <<-\\EOF\n'> <'\t\tprotocol=http\n'> 
                  <'\t\thost=example.com\n'> <'\t\t--\n'> <'\t\tprotocol=http\n'> <'\t\thost=example.com\n'> <'\t\tusername=askpass-username\n'> 
                  <'\t\tpassword=askpass-password\n'> <'\t\t--\n'> <'\t\taskpass: Username for '>
                ) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <'http://example.com'>) 
                (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <':\n'> <'\t\taskpass: Password for '>) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) 
                (SQ <'http://askpass-username@example.com'>) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <':\n'> <'\t\tEOF\n'> <'\t'>)
              }
            )
            (C {(test_expect_success)} 
              {(DQ ('helper (') ($ VSub_Name '$HELPER') (') requires matching host'))} 
              {
                (SQ <'\n'> <'\t\tcheck fill $HELPER <<-\\EOF\n'> <'\t\tprotocol=https\n'> 
                  <'\t\thost=other.tld\n'> <'\t\t--\n'> <'\t\tprotocol=https\n'> <'\t\thost=other.tld\n'> <'\t\tusername=askpass-username\n'> 
                  <'\t\tpassword=askpass-password\n'> <'\t\t--\n'> <'\t\taskpass: Username for '>
                ) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <'https://other.tld'>) 
                (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <':\n'> <'\t\taskpass: Password for '>) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) 
                (SQ <'https://askpass-username@other.tld'>) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <':\n'> <'\t\tEOF\n'> <'\t'>)
              }
            )
            (C {(test_expect_success)} 
              {(DQ ('helper (') ($ VSub_Name '$HELPER') (') requires matching username'))} 
              {
                (SQ <'\n'> <'\t\tcheck fill $HELPER <<-\\EOF\n'> <'\t\tprotocol=https\n'> 
                  <'\t\thost=example.com\n'> <'\t\tusername=other\n'> <'\t\t--\n'> <'\t\tprotocol=https\n'> <'\t\thost=example.com\n'> 
                  <'\t\tusername=other\n'> <'\t\tpassword=askpass-password\n'> <'\t\t--\n'> <'\t\taskpass: Password for '>
                ) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <'https://other@example.com'>) 
                (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <':\n'> <'\t\tEOF\n'> <'\t'>)
              }
            )
            (C {(test_expect_success)} 
              {(DQ ('helper (') ($ VSub_Name '$HELPER') (') requires matching path'))} 
              {
                (SQ <'\n'> <'\t\ttest_config credential.usehttppath true &&\n'> 
                  <'\t\tcheck approve $HELPER <<-\\EOF &&\n'> <'\t\tprotocol=http\n'> <'\t\thost=path.tld\n'> <'\t\tpath=foo.git\n'> <'\t\tusername=user\n'> 
                  <'\t\tpassword=pass\n'> <'\t\tEOF\n'> <'\t\tcheck fill $HELPER <<-\\EOF\n'> <'\t\tprotocol=http\n'> <'\t\thost=path.tld\n'> 
                  <'\t\tpath=bar.git\n'> <'\t\t--\n'> <'\t\tprotocol=http\n'> <'\t\thost=path.tld\n'> <'\t\tpath=bar.git\n'> 
                  <'\t\tusername=askpass-username\n'> <'\t\tpassword=askpass-password\n'> <'\t\t--\n'> <'\t\taskpass: Username for '>
                ) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <'http://path.tld/bar.git'>) 
                (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <':\n'> <'\t\taskpass: Password for '>) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) 
                (SQ <'http://askpass-username@path.tld/bar.git'>) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <':\n'> <'\t\tEOF\n'> <'\t'>)
              }
            )
            (C {(test_expect_success)} {(DQ ('helper (') ($ VSub_Name '$HELPER') (') can forget host'))} 
              {
                (SQ <'\n'> <'\t\tcheck reject $HELPER <<-\\EOF &&\n'> <'\t\tprotocol=https\n'> 
                  <'\t\thost=example.com\n'> <'\t\tEOF\n'> <'\t\tcheck fill $HELPER <<-\\EOF\n'> <'\t\tprotocol=https\n'> <'\t\thost=example.com\n'> 
                  <'\t\t--\n'> <'\t\tprotocol=https\n'> <'\t\thost=example.com\n'> <'\t\tusername=askpass-username\n'> 
                  <'\t\tpassword=askpass-password\n'> <'\t\t--\n'> <'\t\taskpass: Username for '>
                ) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <'https://example.com'>) 
                (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <':\n'> <'\t\taskpass: Password for '>) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) 
                (SQ <'https://askpass-username@example.com'>) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <':\n'> <'\t\tEOF\n'> <'\t'>)
              }
            )
            (C {(test_expect_success)} 
              {(DQ ('helper (') ($ VSub_Name '$HELPER') (') can store multiple users'))} 
              {
                (SQ <'\n'> <'\t\tcheck approve $HELPER <<-\\EOF &&\n'> <'\t\tprotocol=https\n'> 
                  <'\t\thost=example.com\n'> <'\t\tusername=user1\n'> <'\t\tpassword=pass1\n'> <'\t\tEOF\n'> 
                  <'\t\tcheck approve $HELPER <<-\\EOF &&\n'> <'\t\tprotocol=https\n'> <'\t\thost=example.com\n'> <'\t\tusername=user2\n'> <'\t\tpassword=pass2\n'> 
                  <'\t\tEOF\n'> <'\t\tcheck fill $HELPER <<-\\EOF &&\n'> <'\t\tprotocol=https\n'> <'\t\thost=example.com\n'> 
                  <'\t\tusername=user1\n'> <'\t\t--\n'> <'\t\tprotocol=https\n'> <'\t\thost=example.com\n'> <'\t\tusername=user1\n'> 
                  <'\t\tpassword=pass1\n'> <'\t\tEOF\n'> <'\t\tcheck fill $HELPER <<-\\EOF\n'> <'\t\tprotocol=https\n'> <'\t\thost=example.com\n'> 
                  <'\t\tusername=user2\n'> <'\t\t--\n'> <'\t\tprotocol=https\n'> <'\t\thost=example.com\n'> <'\t\tusername=user2\n'> 
                  <'\t\tpassword=pass2\n'> <'\t\tEOF\n'> <'\t'>
                )
              }
            )
            (C {(test_expect_success)} {(DQ ('helper (') ($ VSub_Name '$HELPER') (') can forget user'))} 
              {
                (SQ <'\n'> <'\t\tcheck reject $HELPER <<-\\EOF &&\n'> <'\t\tprotocol=https\n'> 
                  <'\t\thost=example.com\n'> <'\t\tusername=user1\n'> <'\t\tEOF\n'> <'\t\tcheck fill $HELPER <<-\\EOF\n'> <'\t\tprotocol=https\n'> 
                  <'\t\thost=example.com\n'> <'\t\tusername=user1\n'> <'\t\t--\n'> <'\t\tprotocol=https\n'> <'\t\thost=example.com\n'> 
                  <'\t\tusername=user1\n'> <'\t\tpassword=askpass-password\n'> <'\t\t--\n'> <'\t\taskpass: Password for '>
                ) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <'https://user1@example.com'>) 
                (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <':\n'> <'\t\tEOF\n'> <'\t'>)
              }
            )
            (C {(test_expect_success)} 
              {(DQ ('helper (') ($ VSub_Name '$HELPER') (') remembers other user'))} 
              {
                (SQ <'\n'> <'\t\tcheck fill $HELPER <<-\\EOF\n'> <'\t\tprotocol=https\n'> 
                  <'\t\thost=example.com\n'> <'\t\tusername=user2\n'> <'\t\t--\n'> <'\t\tprotocol=https\n'> <'\t\thost=example.com\n'> 
                  <'\t\tusername=user2\n'> <'\t\tpassword=pass2\n'> <'\t\tEOF\n'> <'\t'>
                )
              }
            )
          ]
          spids: [331]
        )
      spids: [327 330]
    )
    (FuncDef
      name: helper_test_timeout
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:HELPER)
                  op: Equal
                  rhs: {(DQ ($ VSub_Star '$*'))}
                  spids: [769]
                )
              ]
              spids: [769]
            )
            (C {(test_expect_success)} {(DQ ('helper (') ($ VSub_Name '$HELPER') (') times out'))} 
              {
                (SQ <'\n'> <'\t\tcheck approve "$HELPER" <<-\\EOF &&\n'> <'\t\tprotocol=https\n'> 
                  <'\t\thost=timeout.tld\n'> <'\t\tusername=user\n'> <'\t\tpassword=pass\n'> <'\t\tEOF\n'> <'\t\tsleep 2 &&\n'> 
                  <'\t\tcheck fill "$HELPER" <<-\\EOF\n'> <'\t\tprotocol=https\n'> <'\t\thost=timeout.tld\n'> <'\t\t--\n'> <'\t\tprotocol=https\n'> 
                  <'\t\thost=timeout.tld\n'> <'\t\tusername=askpass-username\n'> <'\t\tpassword=askpass-password\n'> <'\t\t--\n'> 
                  <'\t\taskpass: Username for '>
                ) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <'https://timeout.tld'>) 
                (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <':\n'> <'\t\taskpass: Password for '>) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) 
                (SQ <'https://askpass-username@timeout.tld'>) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <':\n'> <'\t\tEOF\n'> <'\t'>)
              }
            )
          ]
          spids: [766]
        )
      spids: [762 765]
    )
    (SimpleCommand
      words: [{(write_script)} {(askpass)}]
      redirects: [
        (HereDoc
          op_id: Redir_DLess
          fd: 16777215
          body: 
            {('echo >&2 askpass: $*\n') 
              ('what=$(echo $1 | cut -d" " -f1 | tr A-Z a-z | tr -cd a-z)\n') ('echo "askpass-$what"\n')
            }
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [831]
        )
      ]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:GIT_ASKPASS)
          op: Equal
          rhs: {(DQ ($ VSub_Name '$PWD') (/askpass))}
          spids: [835]
        )
      ]
      spids: [835]
    )
    (C {(export)} {(GIT_ASKPASS)})
  ]
)