(command.CommandList
  children: [
    (command.Pipeline
      children: [
        (command.Simple
          words: [
            {<dd>}
            {<Id.Lit_VarLike 'if='> <'/dev/zero'>}
            {<Id.Lit_VarLike 'bs='> <1048576>}
            {<Id.Lit_VarLike 'count='> <100>}
          ]
          redirects: [(redir op:<Id.Redir_Great '2>'> loc:(redir_loc.Fd fd:2) arg:{<'/dev/null'>})]
          do_fork: T
        )
        (command.Simple
          words: [{<'/usr/bin/time'>} {<'t/helper/test-sha1'>}]
          redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'/dev/null'>})]
          do_fork: T
        )
      ]
      negated: F
    )
    (command.WhileUntil
      keyword: <Id.KW_While while>
      cond: (condition.Shell commands:[(C {<read>} {<expect>} {<cnt>} {<pfx>})])
      body: 
        (command.DoGroup
          children: [
            (command.Case
              to_match: {(DQ ($ Id.VSub_DollarName '$expect'))}
              arms: [
                (case_arm
                  pat_list: [{(SQ <'#'>) <Id.Lit_Star '*'>}]
                  action: [(command.ControlFlow token:<Id.ControlFlow_Continue continue>)]
                  spids: [49 53 57 -1]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:actual)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (command.Pipeline
                            children: [
                              (BraceGroup
                                children: [
                                  (command.AndOr
                                    ops: [Id.Op_DPipe]
                                    children: [
                                      (C {<test>} {<-z>} {(DQ ($ Id.VSub_DollarName '$pfx'))})
                                      (C {<echo>} {(DQ ($ Id.VSub_DollarName '$pfx'))})
                                    ]
                                  )
                                  (command.Pipeline
                                    children: [
                                      (command.Simple
                                        words: [
                                          {<dd>}
                                          {<Id.Lit_VarLike 'if='> <'/dev/zero'>}
                                          {<Id.Lit_VarLike 'bs='> <1048576>}
                                          {<Id.Lit_VarLike 'count='> ($ Id.VSub_DollarName '$cnt')}
                                        ]
                                        redirects: [
                                          (redir
                                            op: <Id.Redir_Great '2>'>
                                            loc: (redir_loc.Fd fd:2)
                                            arg: {<'/dev/null'>}
                                          )
                                        ]
                                        do_fork: T
                                      )
                                      (C {<perl>} {<-pe>} {(SQ <'y/\\000/g/'>)})
                                    ]
                                    negated: F
                                  )
                                ]
                              )
                              (C {<'./t/helper/test-sha1'>} {($ Id.VSub_DollarName '$cnt')})
                            ]
                            negated: F
                          )
                      )
                    }
                  spids: [62]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (C {<test>} {(DQ ($ Id.VSub_DollarName '$expect'))} {<Id.Lit_Equals '='>} 
                          {(DQ ($ Id.VSub_DollarName '$actual'))}
                        )
                      ]
                    )
                  action: [
                    (C {<echo>} 
                      {
                        (DQ <'OK: '> ($ Id.VSub_DollarName '$expect') <' '> 
                          ($ Id.VSub_DollarName '$cnt') <' '> ($ Id.VSub_DollarName '$pfx')
                        )
                      }
                    )
                  ]
                  spids: [124 139]
                )
              ]
              else_action: [
                (command.Simple
                  words: [{<echo>} {(DQ <'OOPS: '> ($ Id.VSub_DollarName '$cnt'))}]
                  redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
                  do_fork: T
                )
                (command.Simple
                  words: [{<echo>} {(DQ <'expect: '> ($ Id.VSub_DollarName '$expect'))}]
                  redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
                  do_fork: T
                )
                (command.Simple
                  words: [{<echo>} {(DQ <'actual: '> ($ Id.VSub_DollarName '$actual'))}]
                  redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
                  do_fork: T
                )
                (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
              ]
            )
          ]
        )
      redirects: [
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {<EOF>}
              here_end_span_id: 222
              stdin_parts: [
                <'da39a3ee5e6b4b0d3255bfef95601890afd80709 0\n'>
                <'3f786850e387550fdab836ed7e6dc881de23001b 0 a\n'>
                <'5277cbb45a15902137d332d97e89cf8136545485 0 ab\n'>
                <'03cfd743661f07975fa2f1220c5194cbaff48451 0 abc\n'>
                <'3330b4373640f9e4604991e73c7e86bfd8da2dc3 0 abcd\n'>
                <'ec11312386ad561674f724b8cca7cf1796e26d1d 0 abcde\n'>
                <'bdc37c074ec4ee6050d68bc133c6b912f36474df 0 abcdef\n'>
                <'69bca99b923859f2dc486b55b87f49689b7358c7 0 abcdefg\n'>
                <'e414af7161c9554089f4106d6f1797ef14a73666 0 abcdefgh\n'>
                <'0707f2970043f9f7c22029482db27733deaec029 0 abcdefghi\n'>
                <'a4dd8aa74a5636728fe52451636e2e17726033aa 1\n'>
                <'9986b45e2f4d7086372533bb6953a8652fa3644a 1 frotz\n'>
                <'23d8d4f788e8526b4877548a32577543cbaaf51f 10\n'>
                <'8cd23f822ab44c7f481b8c92d591f6d1fcad431c 10 frotz\n'>
                <'f3b5604a4e604899c1233edb3bf1cc0ede4d8c32 512\n'>
                <'b095bd837a371593048136e429e9ac4b476e1bb3 512 frotz\n'>
                <'08fa81d6190948de5ccca3966340cc48c10cceac 1200 xyzzy\n'>
                <'e33a291f42c30a159733dd98b8b3e4ff34158ca0 4090 4G\n'>
                <'#a3bf783bc20caa958f6cb24dd140a7b21984838d 9999 nitfol\n'>
              ]
            )
        )
      ]
    )
    (command.ControlFlow token:<Id.ControlFlow_Exit exit>)
    (command.WhileUntil
      keyword: <Id.KW_While while>
      cond: (condition.Shell commands:[(C {<read>} {<cnt>} {<pfx>})])
      body: 
        (command.DoGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:actual)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (command.Pipeline
                            children: [
                              (BraceGroup
                                children: [
                                  (command.AndOr
                                    ops: [Id.Op_DPipe]
                                    children: [
                                      (C {<test>} {<-z>} {(DQ ($ Id.VSub_DollarName '$pfx'))})
                                      (C {<echo>} {(DQ ($ Id.VSub_DollarName '$pfx'))})
                                    ]
                                  )
                                  (command.Pipeline
                                    children: [
                                      (command.Simple
                                        words: [
                                          {<dd>}
                                          {<Id.Lit_VarLike 'if='> <'/dev/zero'>}
                                          {<Id.Lit_VarLike 'bs='> <1048576>}
                                          {<Id.Lit_VarLike 'count='> ($ Id.VSub_DollarName '$cnt')}
                                        ]
                                        redirects: [
                                          (redir
                                            op: <Id.Redir_Great '2>'>
                                            loc: (redir_loc.Fd fd:2)
                                            arg: {<'/dev/null'>}
                                          )
                                        ]
                                        do_fork: T
                                      )
                                      (C {<perl>} {<-pe>} {(SQ <'y/\\000/g/'>)})
                                    ]
                                    negated: F
                                  )
                                ]
                              )
                              (C {<sha1sum>})
                              (C {<sed>} {<-e>} {(SQ <'s/ .*//'>)})
                            ]
                            negated: F
                          )
                      )
                    }
                  spids: [245]
                )
              ]
            )
            (C {<echo>} 
              {
                (DQ ($ Id.VSub_DollarName '$actual') <' '> ($ Id.VSub_DollarName '$cnt') <' '> 
                  ($ Id.VSub_DollarName '$pfx')
                )
              }
            )
          ]
        )
      redirects: [
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {<EOF>}
              here_end_span_id: 351
              stdin_parts: [
                <'0\n'>
                <'0 a\n'>
                <'0 ab\n'>
                <'0 abc\n'>
                <'0 abcd\n'>
                <'0 abcde\n'>
                <'0 abcdef\n'>
                <'0 abcdefg\n'>
                <'0 abcdefgh\n'>
                <'0 abcdefghi\n'>
                <'1\n'>
                <'1 frotz\n'>
                <'10\n'>
                <'10 frotz\n'>
                <'512\n'>
                <'512 frotz\n'>
                <'1200 xyzzy\n'>
                <'4090 4G\n'>
                <'9999 nitfol\n'>
              ]
            )
        )
      ]
    )
  ]
)