(CommandList
  children: [
    (C {(set)} {(-o)} {(nounset)})
    (C {(set)} {(-o)} {(pipefail)})
    (C {(set)} {(-o)} {(errexit)})
    (C {(source)} {(test/common.sh)})
    (FuncDef
      name: _banner
      body: 
        (BraceGroup
          children: [(C {(echo)} {(-----)}) (C {(echo)} {(DQ ($ VSub_At '$@'))}) (C {(echo)} {(-----)})]
          spids: [80]
        )
      spids: [76 79]
    )
    (FuncDef
      name: prereq
      body: 
        (BraceGroup
          children: [(C {(test/unit.sh)} {(all)}) (C {(test/spec.sh)} {(all)})]
          spids: [109]
        )
      spids: [105 108]
    )
    (FuncDef
      name: record-provenance
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:job_id)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [155]
                )
              ]
              spids: [153]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:host) op:Equal spids:[162])]
              spids: [160]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:host)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(hostname)})])
                        left_token: <Left_CommandSub '$('>
                        spids: [166 168]
                      )
                    }
                  spids: [165]
                )
              ]
              spids: [165]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:tmp_dir)
                  op: Equal
                  rhs: {(_tmp/host-id/) ($ VSub_Name '$host')}
                  spids: [183]
                )
              ]
              spids: [181]
            )
            (C {(benchmarks/id.sh)} {(dump-host-id)} {($ VSub_Name '$tmp_dir')})
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:host_hash) op:Equal spids:[198])]
              spids: [196]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:host_hash)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C {(benchmarks/id.sh)} {(publish-host-id)} {($ VSub_Name '$tmp_dir')})
                            ]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [202 208]
                      )
                    }
                  spids: [201]
                )
              ]
              spids: [201]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:shell_hash) op:Equal spids:[218])]
              spids: [216]
            )
            (ForEach
              iter_name: sh_path
              iter_words: [{(bash)} {(dash)} {(mksh)} {(zsh)} {(bin/osh)} {(_bin/osh)}]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:name)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [(C {(basename)} {($ VSub_Name '$sh_path')})]
                                  )
                                left_token: <Left_CommandSub '$('>
                                spids: [255 259]
                              )
                            }
                          spids: [254]
                        )
                      ]
                      spids: [252]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:tmp_dir)
                          op: Equal
                          rhs: {(_tmp/shell-id/) ($ VSub_Name '$name')}
                          spids: [263]
                        )
                      ]
                      spids: [263]
                    )
                    (C {(benchmarks/id.sh)} {(dump-shell-id)} {($ VSub_Name '$sh_path')} 
                      {($ VSub_Name '$tmp_dir')}
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:shell_hash)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (C {(benchmarks/id.sh)} {(publish-shell-id)} 
                                        {($ VSub_Name '$tmp_dir')}
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub '$('>
                                spids: [279 285]
                              )
                            }
                          spids: [278]
                        )
                      ]
                      spids: [278]
                    )
                    (C {(echo)} 
                      {
                        (DQ ($ VSub_Name '$job_id') (' ') ($ VSub_Name '$host') (' ') 
                          ($ VSub_Name '$host_hash') (' ') ($ VSub_Name '$sh_path') (' ') ($ VSub_Name '$shell_hash')
                        )
                      }
                    )
                  ]
                  spids: [245 309]
                )
              spids: [231 243]
            )
          ]
          spids: [150]
        )
      spids: [146 149]
    )
    (FuncDef
      name: gen-prefix
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:job_id)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [323]
                )
              ]
              spids: [321]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:host) op:Equal spids:[330])]
              spids: [328]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:host)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(hostname)})])
                        left_token: <Left_CommandSub '$('>
                        spids: [334 336]
                      )
                    }
                  spids: [333]
                )
              ]
              spids: [333]
            )
            (C {(echo)} {(_tmp/) (${ VSub_Name host) (.) (${ VSub_Name job_id) (.provenance.txt)})
          ]
          spids: [318]
        )
      spids: [314 317]
    )
    (FuncDef
      name: write-provenance-txt
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:job_id) op:Equal spids:[364])]
              spids: [362]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:job_id)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (C {(date)} 
                                  {(Lit_Other '+') (Lit_Other '%') (Y-) (Lit_Other '%') (m-) 
                                    (Lit_Other '%') (d__) (Lit_Other '%') (H-) (Lit_Other '%') (M-) (Lit_Other '%') (S)
                                  }
                                )
                              ]
                            )
                          left_token: <Left_CommandSub '$('>
                          spids: [369 385]
                        )
                      )
                    }
                  spids: [367]
                )
              ]
              spids: [367]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:out)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 1>
                        suffix_op: 
                          (StringUnary
                            op_id: VTest_ColonHyphen
                            arg_word: 
                              {
                                (CommandSubPart
                                  command_list: 
                                    (CommandList
                                      children: [(C {(gen-prefix)} {($ VSub_Name '$job_id')})]
                                    )
                                  left_token: <Left_CommandSub '$('>
                                  spids: [396 400]
                                )
                              }
                          )
                        spids: [393 401]
                      )
                    }
                  spids: [392]
                )
              ]
              spids: [390]
            )
            (SimpleCommand
              words: [{(record-provenance)} {($ VSub_Name '$job_id')}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {($ VSub_Name '$out')}
                  spids: [409]
                )
              ]
            )
            (C {(log)} {(DQ ('Wrote ') ($ VSub_Name '$out'))})
          ]
          spids: [359]
        )
      spids: [355 358]
    )
    (FuncDef
      name: measure-all
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:provenance)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [434]
                )
              ]
              spids: [432]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:base_dir)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 2>
                        suffix_op: 
                          (StringUnary
                            op_id: VTest_ColonHyphen
                            arg_word: {(..) (Lit_Slash /) (benchmark-data)}
                          )
                        spids: [441 447]
                      )
                    }
                  spids: [440]
                )
              ]
              spids: [438]
            )
            (C {(benchmarks/vm-baseline.sh)} {(measure)} {($ VSub_Name '$provenance')} 
              {($ VSub_Name '$base_dir') (/vm-baseline)}
            )
            (C {(benchmarks/osh-runtime.sh)} {(measure)} {($ VSub_Name '$provenance')} 
              {($ VSub_Name '$base_dir') (/osh-runtime)}
            )
            (C {(benchmarks/osh-parser.sh)} {(measure)} {($ VSub_Name '$provenance')} 
              {($ VSub_Name '$base_dir') (/osh-parser)}
            )
          ]
          spids: [429]
        )
      spids: [425 428]
    )
    (FuncDef
      name: all
      body: 
        (BraceGroup
          children: [
            (C {(test/spec.sh)} {(install-shells)})
            (C {(sudo)} {(apt)} {(install)} {(python-dev)})
            (C {(make)} {(clean)})
            (C {(build/dev.sh)} {(all)})
            (C {(_banner)} {(SQ <'OSH dev build'>)})
            (C {(bin/osh)} {(-c)} {(SQ <'echo OSH dev build'>)})
            (C {(build/prepare.sh)} {(configure)})
            (C {(build/prepare.sh)} {(build-python)})
            (C {(make)} {(_bin/oil.ovm)})
            (C {(scripts/run.sh)} {(make-bin-links)})
            (C {(_banner)} {(SQ <'OSH production build'>)})
            (C {(_bin/osh)} {(-c)} {(SQ <'echo OSH production build'>)})
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:job_id) op:Equal spids:[620])]
              spids: [618]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:job_id)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (C {(date)} 
                                  {(Lit_Other '+') (Lit_Other '%') (Y-) (Lit_Other '%') (m-) 
                                    (Lit_Other '%') (d__) (Lit_Other '%') (H-) (Lit_Other '%') (M-) (Lit_Other '%') (S)
                                  }
                                )
                              ]
                            )
                          left_token: <Left_CommandSub '$('>
                          spids: [625 641]
                        )
                      )
                    }
                  spids: [623]
                )
              ]
              spids: [623]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:provenance)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(gen-prefix)} {($ VSub_Name '$job_id')})]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [649 653]
                      )
                    }
                  spids: [648]
                )
              ]
              spids: [646]
            )
            (SimpleCommand
              words: [{(record-provenance)} {($ VSub_Name '$job_id')}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {($ VSub_Name '$provenance')}
                  spids: [661]
                )
              ]
            )
            (C {(measure-all)} {($ VSub_Name '$provenance')})
          ]
          spids: [496]
        )
      spids: [492 495]
    )
    (FuncDef
      name: demo-tasks
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:provenance)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [693]
                )
              ]
              spids: [691]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:name)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(basename)} {($ VSub_Name '$provenance')})]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [705 709]
                      )
                    }
                  spids: [704]
                )
              ]
              spids: [702]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:job_id)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Name name>
                        suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{(.provenance.txt)})
                        spids: [715 719]
                      )
                    }
                  spids: [714]
                )
              ]
              spids: [712]
            )
            (C {(echo)} {(DQ ('JOB ID: ') ($ VSub_Name '$job_id'))})
            (Pipeline
              children: [
                (C {(cat)} {($ VSub_Name '$provenance')})
                (While
                  cond: [
                    (Sentence
                      child: (C {(read)} {(_)} {(_)} {(_)} {(sh_path)} {(_)})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  body: 
                    (DoGroup
                      children: [
                        (ForEach
                          iter_name: i
                          iter_words: [{(1)} {(2)} {(3)}]
                          do_arg_iter: F
                          body: 
                            (DoGroup
                              children: [(C {(echo)} {($ VSub_Name '$i')} {($ VSub_Name '$sh_path')})]
                              spids: [773 783]
                            )
                          spids: [765 771]
                        )
                      ]
                      spids: [757 786]
                    )
                )
              ]
              negated: F
            )
          ]
          spids: [688]
        )
      spids: [684 687]
    )
    (C {(DQ ($ VSub_At '$@'))})
  ]
)