(CommandList
  children: [
    (C {(hash)} {(-r)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:PROG)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Number 0>
                suffix_op: (StringUnary op_id:VOp1_DPound arg_word:{("*") (Lit_Slash /)})
                spids: [9 14]
              )
            }
          spids: [8]
        )
      ]
      spids: [8]
    )
    (FuncDef
      name: usage
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:ret)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 1>
                        suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(0)})
                        spids: [26 30]
                      )
                    }
                  spids: [25]
                )
              ]
              spids: [23]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other "[")} {($ VSub_Name "$ret")} {(-eq)} {(0)} {(Lit_Other "]")})
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (SimpleCommand
                      words: [{(exec)}]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:3 arg_word:{(1)} spids:[52])]
                    )
                  ]
                  spids: [-1 47]
                )
              ]
              else_action: [
                (SimpleCommand
                  words: [{(exec)}]
                  redirects: [(Redir op_id:Redir_GreatAnd fd:3 arg_word:{(2)} spids:[61])]
                )
              ]
              spids: [56 65]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: {(DQ (${ VSub_Name PROG) (" path-to-keyfile\n"))}
                  do_expansion: True
                  here_end: EoF
                  was_filled: True
                  spids: [70]
                )
                (Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(3)} spids:[73])
              ]
            )
            (SimpleCommand
              words: [{(exec)}]
              redirects: [(Redir op_id:Redir_GreatAnd fd:3 arg_word:{(-)} spids:[83])]
            )
            (C {(exit)} {(${ VSub_Name ret)})
          ]
          spids: [20]
        )
      spids: [17 20]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:keypath)
          op: Equal
          rhs: 
            {
              (DQ 
                (BracedVarSub
                  token: <VSub_Number 1>
                  suffix_op: 
                    (StringUnary
                      op_id: VTest_ColonHyphen
                      arg_word: 
                        {($ VSub_Name "$HOME") (Lit_Slash /) (.ssh) (Lit_Slash /) (id_rsa.bcpc)}
                    )
                  spids: [98 106]
                )
              )
            }
          spids: [96]
        )
      ]
      spids: [96]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:distroot)
          op: Equal
          rhs: {(/var/www/cobbler/pub/keys)}
          spids: [109]
        )
      ]
      spids: [109]
    )
    (Pipeline
      children: [(C {(yes)}) (C {(ssh-keygen)} {(-N)} {(SQ )} {(-f)} {(DQ (${ VSub_Name keypath))})]
      negated: False
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (C {(Lit_Other "[")} {(-n)} {(DQ (${ VSub_Name SUDO_UID))} {(Lit_Other "]")})
              terminator: <Op_Semi ";">
            )
          ]
          action: [(C {(chown)} {(DQ (${ VSub_Name SUDO_UID))} {(DQ (${ VSub_Name keypath))})]
          spids: [-1 148]
        )
      ]
      spids: [-1 165]
    )
    (C {(install)} {(-D)} {(DQ (${ VSub_Name keypath) (.pub))} {(DQ (${ VSub_Name distroot) (/root))})
  ]
)