(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:BALLS_LIB)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (C {(readlink)} {(-f)} 
                        {
                          (CommandSubPart
                            command_list: 
                              (CommandList
                                children: [(C {(dirname)} {($ VSub_Number '$0')})]
                              )
                            left_token: <Left_CommandSub '$('>
                            spids: [9 13]
                          ) (/../lib)
                        }
                      )
                    ]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [4 15]
              )
            }
          spids: [3]
        )
      ]
      spids: [3]
    )
    (C {(shopt)} {(-s)} {(extglob)})
    (C {(.)} {($ VSub_Name '$BALLS_LIB') (/balls.sh)})
    (FuncDef
      name: dash_trim_r
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:str)
                  op: Equal
                  rhs: {(DQ (BracedVarSub token:<VSub_Number 1> prefix_op:VSub_Bang spids:[4245]))}
                  spids: [40]
                )
              ]
              spids: [38]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:str)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (BracedVarSub
                          token: <VSub_Name str>
                          suffix_op: (StringUnary op_id:VOp1_DPercent arg_word:{('*( )')})
                          spids: [51 55]
                        )
                      )
                    }
                  spids: [49]
                )
              ]
              spids: [49]
            )
            (C {(export)} {(DQ ($ VSub_Number '$1')) (Lit_Other '=') (DQ ($ VSub_Name '$str'))})
          ]
          spids: [35]
        )
      spids: [31 34]
    )
    (FuncDef
      name: compile
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:code) op:Equal spids:[81])]
              spids: [79]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:chunk) op:Equal spids:[86])]
              spids: [84]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:trim_next) op:Equal rhs:{(0)} spids:[91])]
              spids: [89]
            )
            (While
              cond: [
                (Sentence
                  child: (C {(read_until)} {(SQ <'<%'>)} {(chunk)})
                  terminator: <Op_Semi ';'>
                )
              ]
              body: 
                (DoGroup
                  children: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$FOUND'))} {(Lit_Other '=')} 
                                  {(1)} {(Lit_Other ']')}
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C {(read_until)} {(SQ <'%>'>)} {(code)})
                            (C {(trim)} {(code)})
                            (Case
                              to_match: 
                                {
                                  (DQ 
                                    (BracedVarSub
                                      token: <VSub_Name code>
                                      suffix_op: 
                                        (Slice
                                          begin: (ArithWord w:{(Lit_Digits 0)})
                                          length: (ArithWord w:{(Lit_Digits 1)})
                                        )
                                      spids: [145 151]
                                    )
                                  )
                                }
                              arms: [
                                (case_arm
                                  pat_list: [{(Lit_Other '=')}]
                                  action: [
                                    (Assignment
                                      keyword: Assign_None
                                      pairs: [
                                        (assign_pair
                                          lhs: (LhsName name:code)
                                          op: Equal
                                          rhs: 
                                            {
                                              (DQ 
                                                (BracedVarSub
                                                  token: <VSub_Name code>
                                                  suffix_op: 
                                                    (Slice
                                                      begin: (ArithWord w:{(Lit_Digits 1)})
                                                    )
                                                  spids: [163 167]
                                                )
                                              )
                                            }
                                          spids: [161]
                                        )
                                      ]
                                      spids: [161]
                                    )
                                    (C {(trim)} {(code)})
                                    (Assignment
                                      keyword: Assign_None
                                      pairs: [
                                        (assign_pair
                                          lhs: (LhsName name:code)
                                          op: Equal
                                          rhs: {(DQ ('echo -n ') ($ VSub_Name '$code'))}
                                          spids: [176]
                                        )
                                      ]
                                      spids: [176]
                                    )
                                  ]
                                  spids: [157 158 183 -1]
                                )
                                (case_arm
                                  pat_list: [{(-)}]
                                  action: [
                                    (Assignment
                                      keyword: Assign_None
                                      pairs: [
                                        (assign_pair
                                          lhs: (LhsName name:code)
                                          op: Equal
                                          rhs: 
                                            {
                                              (DQ 
                                                (BracedVarSub
                                                  token: <VSub_Name code>
                                                  suffix_op: 
                                                    (Slice
                                                      begin: (ArithWord w:{(Lit_Digits 1)})
                                                    )
                                                  spids: [192 196]
                                                )
                                              )
                                            }
                                          spids: [190]
                                        )
                                      ]
                                      spids: [190]
                                    )
                                    (C {(dash_trim_r)} {(chunk)})
                                    (C {(trim)} {(code)})
                                  ]
                                  spids: [186 187 210 -1]
                                )
                              ]
                              spids: [142 154 213]
                            )
                            (Case
                              to_match: 
                                {
                                  (DQ 
                                    (BracedVarSub
                                      token: <VSub_Name code>
                                      suffix_op: 
                                        (Slice
                                          begin: 
                                            (ArithBinary
                                              op_id: Arith_Minus
                                              left: 
                                                (ArithWord
                                                  w: 
                                                    {
                                                      (BracedVarSub
                                                        token: <VSub_Name code>
                                                        prefix_op: VSub_Pound
                                                        spids: [223 226]
                                                      )
                                                    }
                                                )
                                              right: (ArithWord w:{(Lit_Digits 1)})
                                            )
                                        )
                                      spids: [220 229]
                                    )
                                  )
                                }
                              arms: [
                                (case_arm
                                  pat_list: [{(-)}]
                                  action: [
                                    (C {(read)})
                                    (Assignment
                                      keyword: Assign_None
                                      pairs: [
                                        (assign_pair
                                          lhs: (LhsName name:code)
                                          op: Equal
                                          rhs: 
                                            {
                                              (DQ 
                                                (BracedVarSub
                                                  token: <VSub_Name code>
                                                  suffix_op: 
                                                    (Slice
                                                      begin: (ArithWord w:{(Lit_Digits 0)})
                                                      length: 
                                                        (ArithBinary
                                                          op_id: Arith_Minus
                                                          left: 
                                                            (ArithWord
                                                              w: 
                                                                {
                                                                  (BracedVarSub
                                                                    token: <VSub_Name code>
                                                                    prefix_op: VSub_Pound
                                                                    spids: [253 256]
                                                                  )
                                                                }
                                                            )
                                                          right: (ArithWord w:{(Lit_Digits 1)})
                                                        )
                                                    )
                                                  spids: [248 259]
                                                )
                                              )
                                            }
                                          spids: [246]
                                        )
                                      ]
                                      spids: [246]
                                    )
                                    (C {(trim)} {(code)})
                                  ]
                                  spids: [235 236 268 -1]
                                )
                              ]
                              spids: [217 232 271]
                            )
                          ]
                          spids: [-1 124]
                        )
                      ]
                      spids: [-1 275]
                    )
                    (C {(bash_safe)} {(chunk)})
                    (C {(echo)} {(DQ ('echo -n ') ($ VSub_Name '$chunk'))})
                    (AndOr
                      children: [
                        (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$FOUND'))} {(Lit_Other '=')} {(1)} 
                          {(Lit_Other ']')}
                        )
                        (C {(echo)} {(DQ ($ VSub_Name '$code'))})
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  spids: [106 322]
                )
            )
            (C {(true)})
          ]
          spids: [76]
        )
      spids: [72 75]
    )
    (Sentence
      child: 
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:fname)
              op: Equal
              rhs: {($ VSub_Number '$1')}
              spids: [333]
            )
          ]
          spids: [333]
        )
      terminator: <Op_Semi ';'>
    )
    (C {(shift)})
    (C {(export)} 
      {(Lit_VarLike 'eof=') 
        (DQ 
          (CommandSubPart
            command_list: (CommandList children:[(C {(echo)} {(-e)} {(SQ <'\\004'>)})])
            left_token: <Left_CommandSub '$('>
            spids: [344 352]
          )
        )
      }
    )
    (Pipeline
      children: [
        (If
          arms: [
            (if_arm
              cond: [
                (Sentence
                  child: (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$fname'))} {(Lit_Other ']')})
                  terminator: <Op_Semi ';'>
                )
              ]
              action: [
                (AndOr
                  children: [(C {(cat)} {($ VSub_Name '$fname')}) (C {(exit)} {(1)})]
                  op_id: Op_DPipe
                )
              ]
              spids: [-1 369]
            )
          ]
          else_action: [(C {(cat)} {(-)})]
          spids: [382 389]
        )
        (C {(compile)})
      ]
      negated: False
    )
  ]
)