(command.CommandList
  children: [
    (C {<Id.KW_Set set>} {<-o>} {<nounset>})
    (C {<Id.KW_Set set>} {<-o>} {<pipefail>})
    (C {<Id.KW_Set set>} {<-o>} {<errexit>})
    (C {<source>} {<test/common.sh>})
    (C {<source>} {<benchmarks/common.sh>})
    (C {<readonly>} {<Id.Lit_VarLike 'BASE_DIR='> <_tmp/vm-baseline>})
    (command.ShFunction
      name: measure
      body: 
        (command.BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'provenance='> ($ Id.VSub_Number '$1')})
            (C {<local>} 
              {<Id.Lit_VarLike 'base_dir='> 
                (braced_var_sub
                  token: <Id.VSub_Number 2>
                  suffix_op: 
                    (suffix_op.Unary
                      op_id: Id.VTest_ColonHyphen
                      arg_word: {<_tmp> <Id.Lit_Slash /> <vm-baseline>}
                    )
                )
              }
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'name='> 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  command_list: 
                    (command.CommandList
                      children: [(C {<basename>} {($ Id.VSub_DollarName '$provenance')})]
                    )
                )
              }
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'prefix='> 
                (braced_var_sub
                  token: <Id.VSub_Name name>
                  suffix_op: (suffix_op.Unary op_id:Id.VOp1_Percent arg_word:{<.provenance.txt>})
                )
              }
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'host='> 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  command_list: (command.CommandList children:[(C {<hostname>})])
                )
              }
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'out_dir='> 
                (DQ ($ Id.VSub_DollarName '$base_dir') </> ($ Id.VSub_DollarName '$prefix'))
              }
            )
            (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$out_dir')})
            (command.Pipeline
              children: [
                (C {<cat>} {($ Id.VSub_DollarName '$provenance')})
                (command.WhileUntil
                  keyword: <Id.KW_While while>
                  cond: [
                    (command.Sentence
                      child: (C {<read>} {<_>} {<_>} {<_>} {<sh_path>} {<shell_hash>})
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  body: 
                    (command.DoGroup
                      children: [
                        (C {<local>} 
                          {<Id.Lit_VarLike 'sh_name='> 
                            (command_sub
                              left_token: <Id.Left_DollarParen '$('>
                              command_list: 
                                (command.CommandList
                                  children: [(C {<basename>} {($ Id.VSub_DollarName '$sh_path')})]
                                )
                            )
                          }
                        )
                        (C {<local>} 
                          {<Id.Lit_VarLike 'out='> 
                            (DQ ($ Id.VSub_DollarName '$out_dir') </> (${ Id.VSub_Name sh_name) <-> 
                              (${ Id.VSub_Name shell_hash) <.txt>
                            )
                          }
                        )
                        (command.Simple
                          words: [
                            {($ Id.VSub_DollarName '$sh_path')}
                            {<-c>}
                            {(SQ <'sleep 0.001; cat /proc/$$/status'>)}
                          ]
                          redirects: [
                            (redir.Redir
                              op: <Id.Redir_Great '>'>
                              fd: -1
                              arg_word: {($ Id.VSub_DollarName '$out')}
                            )
                          ]
                        )
                      ]
                    )
                )
              ]
              negated: F
            )
            (C {<echo>})
            (C {<echo>} {(DQ ($ Id.VSub_DollarName '$out_dir') <':'>)})
            (C {<ls>} {<-l>} {($ Id.VSub_DollarName '$out_dir')})
          ]
        )
    )
    (command.ShFunction
      name: demo
      body: 
        (command.BraceGroup
          children: [
            (C {<local>} {<-a>} 
              {<Id.Lit_VarLike 'job_dirs='> 
                (sh_array_literal
                  left: <Id.Op_LParen _>
                  words: [{($ Id.VSub_DollarName '$BASE_DIR') </lisa.2017-> <Id.Lit_Star '*'>}]
                )
              }
            )
            (C {<local>} {<Id.Lit_VarLike 'dir1='> ($ Id.VSub_DollarName '$BASE_DIR') </stage1>})
            (C {<local>} {<Id.Lit_VarLike 'dir2='> ($ Id.VSub_DollarName '$BASE_DIR') </stage2>})
            (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$dir1')} {($ Id.VSub_DollarName '$dir2')})
            (command.Simple
              words: [
                {<benchmarks/virtual_memory.py>}
                {<baseline>}
                {
                  (braced_var_sub
                    token: <Id.VSub_Name job_dirs>
                    bracket_op: 
                      (bracket_op.ArrayIndex
                        expr: 
                          (arith_expr.Unary
                            op_id: Id.Node_UnaryMinus
                            child: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>})
                          )
                      )
                  )
                }
              ]
              redirects: [
                (redir.Redir
                  op: <Id.Redir_Great '>'>
                  fd: -1
                  arg_word: {($ Id.VSub_DollarName '$dir1') </vm-baseline.csv>}
                )
              ]
            )
            (C {<benchmarks/report.R>} {<vm-baseline>} {($ Id.VSub_DollarName '$dir1')} 
              {($ Id.VSub_DollarName '$dir2')}
            )
          ]
        )
    )
    (command.ShFunction
      name: stage1
      body: 
        (command.BraceGroup
          children: [
            (C {<local>} 
              {<Id.Lit_VarLike 'raw_dir='> 
                (braced_var_sub
                  token: <Id.VSub_Number 1>
                  suffix_op: 
                    (suffix_op.Unary
                      op_id: Id.VTest_ColonHyphen
                      arg_word: {($ Id.VSub_DollarName '$BASE_DIR') <Id.Lit_Slash /> <raw>}
                    )
                )
              }
            )
            (C {<local>} {<Id.Lit_VarLike 'out='> ($ Id.VSub_DollarName '$BASE_DIR') </stage1>})
            (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$out')})
            (C {<local>} {<-a>} 
              {<Id.Lit_VarLike 'm1='> 
                (sh_array_literal
                  left: <Id.Op_LParen _>
                  words: [{<../benchmark-data/vm-baseline/flanders.> <Id.Lit_Star '*'>}]
                )
              }
            )
            (C {<local>} {<-a>} 
              {<Id.Lit_VarLike 'm2='> 
                (sh_array_literal
                  left: <Id.Op_LParen _>
                  words: [{<../benchmark-data/vm-baseline/lisa.> <Id.Lit_Star '*'>}]
                )
              }
            )
            (C {<local>} {<-a>} 
              {<Id.Lit_VarLike 'latest='> 
                (sh_array_literal
                  left: <Id.Op_LParen _>
                  words: [
                    {
                      (braced_var_sub
                        token: <Id.VSub_Name m1>
                        bracket_op: 
                          (bracket_op.ArrayIndex
                            expr: 
                              (arith_expr.Unary
                                op_id: Id.Node_UnaryMinus
                                child: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>})
                              )
                          )
                      )
                    }
                    {
                      (braced_var_sub
                        token: <Id.VSub_Name m2>
                        bracket_op: 
                          (bracket_op.ArrayIndex
                            expr: 
                              (arith_expr.Unary
                                op_id: Id.Node_UnaryMinus
                                child: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>})
                              )
                          )
                      )
                    }
                  ]
                )
              }
            )
            (command.Pipeline
              children: [
                (C {<benchmarks/virtual_memory.py>} {<baseline>} 
                  {
                    (DQ 
                      (braced_var_sub
                        token: <Id.VSub_Name latest>
                        bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                      )
                    )
                  }
                )
                (C {<tee>} {($ Id.VSub_DollarName '$out') </vm-baseline.csv>})
              ]
              negated: F
            )
          ]
        )
    )
    (command.ShFunction
      name: print-report
      body: 
        (command.BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'in_dir='> ($ Id.VSub_Number '$1')})
            (C {<local>} {<Id.Lit_VarLike 'base_url='> (SQ <../../web>)})
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir.HereDoc
                  op: <Id.Redir_DLess '<<'>
                  fd: -1
                  here_begin: {<EOF>}
                  here_end_span_id: 520
                  stdin_parts: [
                    <'<!DOCTYPE html>\n'>
                    <'<html>\n'>
                    <'  <head>\n'>
                    <'    <title>Virtual Memory Baseline</title>\n'>
                    <'    <script type='>
                    <Id.Right_DoubleQuote '"'>
                    <text/javascript>
                    <Id.Right_DoubleQuote '"'>
                    <' src='>
                    <Id.Right_DoubleQuote '"'>
                    ($ Id.VSub_DollarName '$base_url')
                    </table/table-sort.js>
                    <Id.Right_DoubleQuote '"'>
                    <'></script>\n'>
                    <'    <link rel='>
                    <Id.Right_DoubleQuote '"'>
                    <stylesheet>
                    <Id.Right_DoubleQuote '"'>
                    <' type='>
                    <Id.Right_DoubleQuote '"'>
                    <text/css>
                    <Id.Right_DoubleQuote '"'>
                    <' href='>
                    <Id.Right_DoubleQuote '"'>
                    ($ Id.VSub_DollarName '$base_url')
                    </table/table-sort.css>
                    <Id.Right_DoubleQuote '"'>
                    <' />\n'>
                    <'    <link rel='>
                    <Id.Right_DoubleQuote '"'>
                    <stylesheet>
                    <Id.Right_DoubleQuote '"'>
                    <' type='>
                    <Id.Right_DoubleQuote '"'>
                    <text/css>
                    <Id.Right_DoubleQuote '"'>
                    <' href='>
                    <Id.Right_DoubleQuote '"'>
                    ($ Id.VSub_DollarName '$base_url')
                    </benchmarks.css>
                    <Id.Right_DoubleQuote '"'>
                    <' />\n'>
                    <'\n'>
                    <'  </head>\n'>
                    <'  <body>\n'>
                    <'    <p id='>
                    <Id.Right_DoubleQuote '"'>
                    <home-link>
                    <Id.Right_DoubleQuote '"'>
                    <'>\n'>
                    <'      <a href='>
                    <Id.Right_DoubleQuote '"'>
                    </>
                    <Id.Right_DoubleQuote '"'>
                    <'>oilshell.org</a>\n'>
                    <'    </p>\n'>
                    <'    <h2>Virtual Memory Baseline</h2>\n'>
                    <'\n'>
                    <'    <h3>Memory Used at Startup (MB)</h3>\n'>
                    <'\n'>
                    <'    <p>Running under <code>osh-ovm</code>.  Memory usage is measured in MB\n'>
                    <'    (powers of 10), not MiB (powers of 2).</p>\n'>
                    <'\n'>
                  ]
                )
              ]
            )
            (C {<csv2html>} {($ Id.VSub_DollarName '$in_dir') </vm-baseline.csv>})
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir.HereDoc
                  op: <Id.Redir_DLess '<<'>
                  fd: -1
                  here_begin: {<EOF>}
                  here_end_span_id: 540
                  stdin_parts: [<'    <!-- <h3>Shell and Host Details</h3> -->\n'>]
                )
              ]
            )
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir.HereDoc
                  op: <Id.Redir_DLess '<<'>
                  fd: -1
                  here_begin: {<EOF>}
                  here_end_span_id: 559
                  stdin_parts: [<'  </body>\n'> <'</html>\n'>]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: parser-dump-demo
      body: 
        (command.BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'out_dir='> <_tmp/virtual-memory>})
            (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$out_dir')})
            (C {<local>} {<Id.Lit_VarLike 'input='> <benchmarks/testdata/abuild>})
            (C {<bin/osh>} {<--parser-mem-dump>} {($ Id.VSub_DollarName '$out_dir') </parser.txt>} {<-n>} 
              {<--ast-format>} {<none>} {($ Id.VSub_DollarName '$input')}
            )
            (C {<grep>} {(SQ <'^Vm'>)} {($ Id.VSub_DollarName '$out_dir') </parser.txt>})
          ]
        )
    )
    (command.ShFunction
      name: runtime-dump-demo
      body: 
        (command.BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'out_dir='> <_tmp/virtual-memory>})
            (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$out_dir')})
            (C {<bin/osh>} {<--parser-mem-dump>} {($ Id.VSub_DollarName '$out_dir') </parser.txt>} 
              {<--runtime-mem-dump>} {($ Id.VSub_DollarName '$out_dir') </runtime.txt>} {<-c>} {(SQ <'echo $(echo hi)'>)}
            )
            (C {<grep>} {(SQ <'^Vm'>)} {($ Id.VSub_DollarName '$out_dir') </parser.txt>} 
              {($ Id.VSub_DollarName '$out_dir') </runtime.txt>}
            )
          ]
        )
    )
    (C {(DQ ($ Id.VSub_At '$@'))})
  ]
)