(CommandList
  children: [
    (FuncDef
      name: printUsageAndExit
      body: 
        (BraceGroup
          children: [
            (C {(echo)} {(DQ ("Usage:"))})
            (C {(echo)} {(DQ ("./RemoteRunSafely.sh <hostname> [-l <login_name>] [-p <port>] "))} 
              {(DQ ("<program> <args...>"))}
            )
            (C {(exit)} {(255)})
          ]
          spids: [65]
        )
      spids: [61 64]
    )
    (FuncDef
      name: moreArgsExpected
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (C {(Lit_Other "[")} {($ VSub_Number "$1")} {(-lt)} {($ VSub_Number "$2")} 
                      {(Lit_Other "]")}
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ("Error: Wrong number of argumants."))})
                    (C {(printUsageAndExit)})
                  ]
                  spids: [-1 123]
                )
              ]
              spids: [-1 136]
            )
          ]
          spids: [99]
        )
      spids: [95 98]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:ORIG_ARGS)
          op: Equal
          rhs: {(DQ ($ VSub_Star "$*"))}
          spids: [147]
        )
      ]
      spids: [147]
    )
    (C {(moreArgsExpected)} {($ VSub_Pound "$#")} {(1)})
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:RHOST) op:Equal rhs:{($ VSub_Number "$1")} spids:[162])]
      spids: [162]
    )
    (C {(shift)} {(1)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:RUSER)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(id)} {(-un)})])
                left_token: <Left_Backtick "`">
                spids: [171 175]
              )
            }
          spids: [170]
        )
      ]
      spids: [170]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:RCLIENT) op:Equal rhs:{(ssh)} spids:[177])]
      spids: [177]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:RPORT) op:Equal rhs:{(SQ )} spids:[180])]
      spids: [180]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:WORKING_DIR) op:Equal rhs:{(SQ )} spids:[182])]
      spids: [182]
    )
    (C {(moreArgsExpected)} {($ VSub_Pound "$#")} {(1)})
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other "[")} {($ VSub_Number "$1")} {(Lit_Other "=")} {(DQ (-l))} 
                  {(Lit_Other "]")}
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (C {(moreArgsExpected)} {($ VSub_Pound "$#")} {(2)})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:RUSER)
                  op: Equal
                  rhs: {($ VSub_Number "$2")}
                  spids: [216]
                )
              ]
              spids: [216]
            )
            (C {(shift)} {(2)})
          ]
          spids: [-1 206]
        )
      ]
      spids: [-1 224]
    )
    (C {(moreArgsExpected)} {($ VSub_Pound "$#")} {(1)})
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other "[")} {($ VSub_Number "$1")} {(Lit_Other "=")} {(DQ (-p))} 
                  {(Lit_Other "]")}
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (C {(moreArgsExpected)} {($ VSub_Pound "$#")} {(2)})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:RPORT)
                  op: Equal
                  rhs: {(DQ ("-p ") ($ VSub_Number "$2"))}
                  spids: [257]
                )
              ]
              spids: [257]
            )
            (C {(shift)} {(2)})
          ]
          spids: [-1 247]
        )
      ]
      spids: [-1 268]
    )
    (C {(moreArgsExpected)} {($ VSub_Pound "$#")} {(1)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:PROGRAM)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(basename)} {($ VSub_Number "$1")})])
                left_token: <Left_CommandSub "$(">
                spids: [278 282]
              )
            }
          spids: [277]
        )
      ]
      spids: [277]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:WORKING_DIR)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(dirname)} {($ VSub_Number "$1")})])
                left_token: <Left_CommandSub "$(">
                spids: [285 289]
              )
            }
          spids: [284]
        )
      ]
      spids: [284]
    )
    (C {(shift)} {(1)})
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other "[")} {(DQ ($ VSub_Name "$RHOST"))} {(Lit_Other "=")} {(DQ )} {(-o)} 
                  {(DQ ($ VSub_Name "$PROGRAM"))} {(Lit_Other "=")} {(DQ )} {(Lit_Other "]")}
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [(C {(printUsageAndExit)})]
          spids: [-1 345]
        )
      ]
      spids: [-1 350]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:local_program)
          op: Equal
          rhs: {($ VSub_Name "$WORKING_DIR") (DQ (/)) ($ VSub_Name "$PROGRAM")}
          spids: [356]
        )
      ]
      spids: [356]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other "[")} {(KW_Bang "!")} {(-x)} {(DQ ($ VSub_Name "$local_program"))} 
                  {(Lit_Other "]")}
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (C {(echo)} 
              {(DQ ("File ")) ($ VSub_Name "$local_program") 
                (DQ (" does not exist or is not an executable.."))
              }
            )
            (C {(exit)} {(255)})
          ]
          spids: [-1 378]
        )
      ]
      spids: [-1 396]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:connection)
          op: Equal
          rhs: {($ VSub_Name "$RUSER") (SQ <"@">) ($ VSub_Name "$RHOST")}
          spids: [399]
        )
      ]
      spids: [399]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:remote)
          op: Equal
          rhs: {(DQ (./)) ($ VSub_Name "$PROGRAM")}
          spids: [406]
        )
      ]
      spids: [406]
    )
    (Subshell
      child: 
        (Pipeline
          children: [
            (C {(cat)} {($ VSub_Name "$local_program")})
            (C {($ VSub_Name "$RCLIENT")} {($ VSub_Name "$connection")} {($ VSub_Name "$RPORT")} 
              {(SQ <"rm -f ">) ($ VSub_Name "$remote") (SQ <" ; ">)} 
              {(SQ <"cat > ">) ($ VSub_Name "$remote") (SQ <" ; chmod +x ">) ($ VSub_Name "$remote") 
                (SQ <" ; ">) ($ VSub_Name "$remote") (SQ <" ">) ($ VSub_Star "$*") (SQ <" ; ">)
              } {(SQ <"err=$? ; rm -f ">) ($ VSub_Name "$remote") (SQ <" ; exit $err">)}
            )
          ]
          negated: False
        )
      spids: [412 471]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:err) op:Equal rhs:{($ VSub_QMark "$?")} spids:[473])]
      spids: [473]
    )
    (C {(exit)} {($ VSub_Name "$err")})
  ]
)