(CommandList
  children: [
    (C {(atf_test_case)} {(bad_namespace)})
    (FuncDef
      name: bad_namespace_head
      body: 
        (BraceGroup
          children: [
            (C {(atf_set)} {(DQ (descr))} {(DQ ("Can't set attributes for nonexistent namespaces"))})
          ]
          spids: [87]
        )
      spids: [83 86]
    )
    (FuncDef
      name: bad_namespace_body
      body: 
        (BraceGroup
          children: [
            (C {(check_fs)})
            (C {(touch)} {(foo)})
            (C {(atf_check)} {(-s)} {(not-exit) (Lit_Other ':') (0)} {(-e)} 
              {(match) (Lit_Other ':') (DQ ('Invalid argument'))} {(setextattr)} {(badnamespace)} {(myattr)} {(X)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(not-exit) (Lit_Other ':') (0)} {(-e)} 
              {(match) (Lit_Other ':') (DQ ('Invalid argument'))} {(lsextattr)} {(-q)} {(badnamespace)} {(foo)}
            )
          ]
          spids: [106]
        )
      spids: [102 105]
    )
    (C {(atf_test_case)} {(hex)})
    (FuncDef
      name: hex_head
      body: 
        (BraceGroup
          children: [
            (C {(atf_set)} {(DQ (descr))} {(DQ ('Set and get attribute values in hexadecimal'))})
          ]
          spids: [183]
        )
      spids: [179 182]
    )
    (FuncDef
      name: hex_body
      body: 
        (BraceGroup
          children: [
            (C {(check_fs)})
            (C {(touch)} {(foo)})
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(setextattr)} {(user)} 
              {(myattr)} {(XYZ)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} 
              {(inline) (Lit_Other ':') 
                (DQ ('58 59 5a') (EscapedLiteralPart token:<Lit_EscapedChar '\\n'>))
              } {(getextattr)} {(-qx)} {(user)} {(myattr)} {(foo)}
            )
          ]
          spids: [202]
        )
      spids: [198 201]
    )
    (C {(atf_test_case)} {(hex_nonascii)})
    (FuncDef
      name: hex_nonascii_head
      body: 
        (BraceGroup
          children: [
            (C {(atf_set)} {(DQ (descr))} {(DQ ('Get binary attribute values in hexadecimal'))})
          ]
          spids: [276]
        )
      spids: [272 275]
    )
    (FuncDef
      name: hex_nonascii_body
      body: 
        (BraceGroup
          children: [
            (C {(check_fs)})
            (C {(touch)} {(foo)})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:BINSTUFF)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C {(echo)} 
                                {
                                  (SQ <Lit_EscapedChar '\\x'> <20> <Lit_EscapedChar '\\x'> <30> 
                                    <Lit_EscapedChar '\\x'> <40> <Lit_EscapedChar '\\x'> <55> <Lit_EscapedChar '\\x'> <66> <Lit_EscapedChar '\\x'> <70> 
                                    <Lit_EscapedChar '\\x'> <81> <Lit_EscapedChar '\\x'> <a2> <Lit_EscapedChar '\\x'> <b3> <Lit_EscapedChar '\\x'> <ee> 
                                    <Lit_EscapedChar '\\x'> <ff>
                                  )
                                }
                              )
                            ]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [307 334]
                      )
                    }
                  spids: [306]
                )
              ]
              spids: [306]
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(setextattr)} {(user)} 
              {(myattr)} {(DQ ($ VSub_Name '$BINSTUFF'))} {(foo)}
            )
            (C {(getextattr)} {(user)} {(myattr)} {(foo)})
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} 
              {(inline) (Lit_Other ':') 
                (DQ ('20 30 40 55 66 70 81 a2 b3 ee ff') 
                  (EscapedLiteralPart token:<Lit_EscapedChar '\\n'>)
                )
              } {(getextattr)} {(-qx)} {(user)} {(myattr)} {(foo)}
            )
          ]
          spids: [295]
        )
      spids: [291 294]
    )
    (C {(atf_test_case)} {(long_name)})
    (FuncDef
      name: long_name_head
      body: 
        (BraceGroup
          children: [(C {(atf_set)} {(DQ (descr))} {(DQ ('A maximum length attribute name'))})]
          spids: [411]
        )
      spids: [407 410]
    )
    (FuncDef
      name: long_name_body
      body: 
        (BraceGroup
          children: [
            (C {(check_fs)})
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (Pipeline
                          children: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:NAME_MAX)
                                  op: Equal
                                  rhs: 
                                    {
                                      (CommandSubPart
                                        command_list: 
                                          (CommandList
                                            children: [(C {(getconf)} {(NAME_MAX)} {(.)})]
                                          )
                                        left_token: <Left_CommandSub '$('>
                                        spids: [442 448]
                                      )
                                    }
                                  spids: [441]
                                )
                              ]
                              spids: [441]
                            )
                          ]
                          negated: True
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(atf_skip)} {(DQ ('Filesystem not reporting NAME_MAX; skipping testcase'))})
                  ]
                  spids: [-1 451]
                )
              ]
              spids: [-1 461]
            )
            (C {(atf_expect_fail)} {(DQ ("BUG 208965 extattr(2) doesn't allow maxlen attr names"))})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:ATTRNAME)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C {(jot)} {(-b)} {(X)} {(-s)} {(DQ )} {($ VSub_Name '$NAME_MAX')} {(0)})
                            ]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [478 493]
                      )
                    }
                  spids: [477]
                )
              ]
              spids: [477]
            )
            (C {(touch)} {(foo)})
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(setextattr)} {(user)} 
              {($ VSub_Name '$ATTRNAME')} {(myvalue)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} 
              {(inline) (Lit_Other ':') 
                (DQ (${ VSub_Name ATTRNAME) (EscapedLiteralPart token:<Lit_EscapedChar '\\n'>))
              } {(lsextattr)} {(-q)} {(user)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} 
              {(inline) (Lit_Other ':') 
                (DQ (myvalue) (EscapedLiteralPart token:<Lit_EscapedChar '\\n'>))
              } {(getextattr)} {(-q)} {(user)} {(${ VSub_Name ATTRNAME)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(rmextattr)} {(user)} 
              {(${ VSub_Name ATTRNAME)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(lsextattr)} {(-q)} 
              {(user)} {(foo)}
            )
          ]
          spids: [430]
        )
      spids: [426 429]
    )
    (C {(atf_test_case)} {(loud)})
    (FuncDef
      name: loud_head
      body: 
        (BraceGroup
          children: [(C {(atf_set)} {(DQ (descr))} {(DQ ('Loud (non -q) output for each command'))})]
          spids: [638]
        )
      spids: [634 637]
    )
    (FuncDef
      name: loud_body
      body: 
        (BraceGroup
          children: [
            (C {(check_fs)})
            (C {(touch)} {(foo)})
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(setextattr)} {(user)} 
              {(myattr)} {(myvalue)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} 
              {(inline) (Lit_Other ':') (DQ ('foo myattr'))} {(printf)} {(DQ ('%s %s'))} 
              {
                (CommandSubPart
                  command_list: (CommandList children:[(C {(lsextattr)} {(user)} {(foo)})])
                  left_token: <Left_CommandSub '$('>
                  spids: [723 729]
                )
              }
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} 
              {(inline) (Lit_Other ':') (DQ ('foo myvalue'))} {(printf)} {(DQ ('%s %s'))} 
              {
                (CommandSubPart
                  command_list: 
                    (CommandList
                      children: [(C {(getextattr)} {(user)} {(myattr)} {(foo)})]
                    )
                  left_token: <Left_CommandSub '$('>
                  spids: [756 764]
                )
              }
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(rmextattr)} {(user)} 
              {(myattr)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} 
              {(inline) (Lit_Other ':') (DQ (foo))} {(printf)} {(Lit_Other '%') (s)} 
              {
                (CommandSubPart
                  command_list: (CommandList children:[(C {(lsextattr)} {(user)} {(foo)})])
                  left_token: <Left_CommandSub '$('>
                  spids: [809 815]
                )
              }
            )
          ]
          spids: [657]
        )
      spids: [653 656]
    )
    (C {(atf_test_case)} {(noattrs)})
    (FuncDef
      name: noattrs_head
      body: 
        (BraceGroup
          children: [(C {(atf_set)} {(DQ (descr))} {(DQ ('A file with no extended attributes'))})]
          spids: [828]
        )
      spids: [824 827]
    )
    (FuncDef
      name: noattrs_body
      body: 
        (BraceGroup
          children: [
            (C {(check_fs)})
            (C {(touch)} {(foo)})
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(lsextattr)} {(-q)} 
              {(user)} {(foo)}
            )
          ]
          spids: [847]
        )
      spids: [843 846]
    )
    (C {(atf_test_case)} {(nonexistent_file)})
    (FuncDef
      name: nonexistent_file_head
      body: 
        (BraceGroup
          children: [(C {(atf_set)} {(DQ (descr))} {(DQ ('A file that does not exist'))})]
          spids: [889]
        )
      spids: [885 888]
    )
    (FuncDef
      name: nonexistent_file_body
      body: 
        (BraceGroup
          children: [
            (C {(check_fs)})
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (1)} {(-e)} 
              {(match) (Lit_Other ':') (DQ ('No such file or directory'))} {(lsextattr)} {(user)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (1)} {(-e)} 
              {(match) (Lit_Other ':') (DQ ('No such file or directory'))} {(setextattr)} {(user)} {(myattr)} {(myvalue)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (1)} {(-e)} 
              {(match) (Lit_Other ':') (DQ ('No such file or directory'))} {(getextattr)} {(user)} {(myattr)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (1)} {(-e)} 
              {(match) (Lit_Other ':') (DQ ('No such file or directory'))} {(rmextattr)} {(user)} {(myattr)} {(foo)}
            )
          ]
          spids: [908]
        )
      spids: [904 907]
    )
    (C {(atf_test_case)} {(null)})
    (FuncDef
      name: null_head
      body: 
        (BraceGroup
          children: [(C {(atf_set)} {(DQ (descr))} {(DQ ('NUL-terminate an attribute value'))})]
          spids: [1032]
        )
      spids: [1028 1031]
    )
    (FuncDef
      name: null_body
      body: 
        (BraceGroup
          children: [
            (C {(check_fs)})
            (C {(touch)} {(foo)})
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(setextattr)} {(-n)} 
              {(user)} {(myattr)} {(myvalue)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} 
              {(inline) (Lit_Other ':') 
                (DQ (myvalue) (EscapedLiteralPart token:<Lit_EscapedChar '\\0'>) 
                  (EscapedLiteralPart token:<Lit_EscapedChar '\\n'>)
                )
              } {(getextattr)} {(-q)} {(user)} {(myattr)} {(foo)}
            )
          ]
          spids: [1051]
        )
      spids: [1047 1050]
    )
    (C {(atf_test_case)} {(one_user_attr)})
    (FuncDef
      name: one_user_attr_head
      body: 
        (BraceGroup
          children: [(C {(atf_set)} {(DQ (descr))} {(DQ ('A file with one extended attribute'))})]
          spids: [1126]
        )
      spids: [1122 1125]
    )
    (FuncDef
      name: one_user_attr_body
      body: 
        (BraceGroup
          children: [
            (C {(check_fs)})
            (C {(touch)} {(foo)})
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(setextattr)} {(user)} 
              {(myattr)} {(myvalue)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} 
              {(inline) (Lit_Other ':') 
                (DQ (myattr) (EscapedLiteralPart token:<Lit_EscapedChar '\\n'>))
              } {(lsextattr)} {(-q)} {(user)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} 
              {(inline) (Lit_Other ':') 
                (DQ (myvalue) (EscapedLiteralPart token:<Lit_EscapedChar '\\n'>))
              } {(getextattr)} {(-q)} {(user)} {(myattr)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(rmextattr)} {(user)} 
              {(myattr)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(lsextattr)} {(-q)} 
              {(user)} {(foo)}
            )
          ]
          spids: [1145]
        )
      spids: [1141 1144]
    )
    (C {(atf_test_case)} {(one_system_attr)})
    (FuncDef
      name: one_system_attr_head
      body: 
        (BraceGroup
          children: [
            (C {(atf_set)} {(DQ (descr))} {(DQ ('A file with one extended attribute'))})
            (C {(atf_set)} {(DQ (require.user))} {(DQ (root))})
          ]
          spids: [1285]
        )
      spids: [1281 1284]
    )
    (FuncDef
      name: one_system_attr_body
      body: 
        (BraceGroup
          children: [
            (C {(check_fs)})
            (C {(touch)} {(foo)})
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(setextattr)} {(system)} 
              {(myattr)} {(myvalue)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} 
              {(inline) (Lit_Other ':') 
                (DQ (myattr) (EscapedLiteralPart token:<Lit_EscapedChar '\\n'>))
              } {(lsextattr)} {(-q)} {(system)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} 
              {(inline) (Lit_Other ':') 
                (DQ (myvalue) (EscapedLiteralPart token:<Lit_EscapedChar '\\n'>))
              } {(getextattr)} {(-q)} {(system)} {(myattr)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(rmextattr)} {(system)} 
              {(myattr)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(lsextattr)} {(-q)} 
              {(system)} {(foo)}
            )
          ]
          spids: [1315]
        )
      spids: [1311 1314]
    )
    (C {(atf_test_case)} {(stdin)})
    (FuncDef
      name: stdin_head
      body: 
        (BraceGroup
          children: [(C {(atf_set)} {(DQ (descr))} {(DQ ('Set attribute value from stdin'))})]
          spids: [1455]
        )
      spids: [1451 1454]
    )
    (FuncDef
      name: stdin_body
      body: 
        (BraceGroup
          children: [
            (C {(check_fs)})
            (C {(dd)} {(Lit_VarLike 'if=') (/dev/random)} {(Lit_VarLike 'of=') (infile)} 
              {(Lit_VarLike 'bs=') (1k)} {(Lit_VarLike 'count=') (8)}
            )
            (C {(touch)} {(foo)})
            (AndOr
              children: [
                (SimpleCommand
                  words: [{(setextattr)} {(-i)} {(user)} {(myattr)} {(foo)}]
                  redirects: [(Redir op_id:Redir_Less fd:-1 arg_word:{(infile)} spids:[1510])]
                )
                (C {(atf_fail)} {(DQ ('setextattr failed'))})
              ]
              op_id: Op_DPipe
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} 
              {(inline) (Lit_Other ':') 
                (DQ (myattr) (EscapedLiteralPart token:<Lit_EscapedChar '\\n'>))
              } {(lsextattr)} {(-q)} {(user)} {(foo)}
            )
            (AndOr
              children: [
                (SimpleCommand
                  words: [{(getextattr)} {(-qq)} {(user)} {(myattr)} {(foo)}]
                  redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(outfile)} spids:[1559])]
                )
                (C {(atf_fail)} {(DQ ('getextattr failed'))})
              ]
              op_id: Op_DPipe
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(cmp)} {(-s)} {(infile)} {(outfile)})
          ]
          spids: [1474]
        )
      spids: [1470 1473]
    )
    (C {(atf_test_case)} {(stringify)})
    (FuncDef
      name: stringify_head
      body: 
        (BraceGroup
          children: [(C {(atf_set)} {(DQ (descr))} {(DQ ('Stringify the output of getextattr'))})]
          spids: [1599]
        )
      spids: [1595 1598]
    )
    (FuncDef
      name: stringify_body
      body: 
        (BraceGroup
          children: [
            (C {(check_fs)})
            (C {(touch)} {(foo)})
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(setextattr)} {(user)} 
              {(myattr)} {(DQ ('my value'))} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} 
              {(inline) (Lit_Other ':') 
                (DQ (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (my) 
                  (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) (EscapedLiteralPart token:<Lit_EscapedChar '\\0'>) (40value) 
                  (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (EscapedLiteralPart token:<Lit_EscapedChar '\\n'>)
                )
              } {(getextattr)} {(-qs)} {(user)} {(myattr)} {(foo)}
            )
          ]
          spids: [1618]
        )
      spids: [1614 1617]
    )
    (C {(atf_test_case)} {(symlink)})
    (FuncDef
      name: symlink_head
      body: 
        (BraceGroup
          children: [(C {(atf_set)} {(DQ (descr))} {(DQ ('A symlink to an ordinary file'))})]
          spids: [1699]
        )
      spids: [1695 1698]
    )
    (FuncDef
      name: symlink_body
      body: 
        (BraceGroup
          children: [
            (C {(check_fs)})
            (C {(touch)} {(foo)})
            (C {(ln)} {(-s)} {(foo)} {(foolink)})
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(setextattr)} {(user)} 
              {(myattr)} {(myvalue)} {(foolink)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} 
              {(inline) (Lit_Other ':') 
                (DQ (myvalue) (EscapedLiteralPart token:<Lit_EscapedChar '\\n'>))
              } {(getextattr)} {(-q)} {(user)} {(myattr)} {(foolink)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} 
              {(inline) (Lit_Other ':') 
                (DQ (myvalue) (EscapedLiteralPart token:<Lit_EscapedChar '\\n'>))
              } {(getextattr)} {(-q)} {(user)} {(myattr)} {(foo)}
            )
          ]
          spids: [1718]
        )
      spids: [1714 1717]
    )
    (C {(atf_test_case)} {(symlink_nofollow)})
    (FuncDef
      name: symlink_nofollow_head
      body: 
        (BraceGroup
          children: [(C {(atf_set)} {(DQ (descr))} {(DQ ('Operating directly on a symlink'))})]
          spids: [1829]
        )
      spids: [1825 1828]
    )
    (FuncDef
      name: symlink_nofollow_body
      body: 
        (BraceGroup
          children: [
            (C {(check_fs)})
            (C {(touch)} {(foo)})
            (C {(ln)} {(-s)} {(foo)} {(foolink)})
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(setextattr)} {(-h)} 
              {(user)} {(myattr)} {(myvalue)} {(foolink)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} 
              {(inline) (Lit_Other ':') 
                (DQ (myvalue) (EscapedLiteralPart token:<Lit_EscapedChar '\\n'>))
              } {(getextattr)} {(-qh)} {(user)} {(myattr)} {(foolink)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (1)} {(-e)} 
              {(match) (Lit_Other ':') (DQ ('Attribute not found'))} {(getextattr)} {(user)} {(myattr)} {(foolink)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (1)} {(-e)} 
              {(match) (Lit_Other ':') (DQ ('Attribute not found'))} {(getextattr)} {(user)} {(myattr)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(setextattr)} {(user)} 
              {(otherattr)} {(othervalue)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (1)} {(getextattr)} {(-qh)} {(user)} 
              {(otherattr)} {(foolink)}
            )
          ]
          spids: [1848]
        )
      spids: [1844 1847]
    )
    (C {(atf_test_case)} {(system_and_user_attrs)})
    (FuncDef
      name: system_and_user_attrs_head
      body: 
        (BraceGroup
          children: [
            (C {(atf_set)} {(DQ (descr))} {(DQ ('A file with both system and user extended attributes'))})
            (C {(atf_set)} {(DQ (require.user))} {(DQ (root))})
          ]
          spids: [2038]
        )
      spids: [2034 2037]
    )
    (FuncDef
      name: system_and_user_attrs_body
      body: 
        (BraceGroup
          children: [
            (C {(check_fs)})
            (C {(touch)} {(foo)})
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(setextattr)} {(user)} 
              {(userattr)} {(userval)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(setextattr)} {(system)} 
              {(sysattr)} {(sysval)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} 
              {(inline) (Lit_Other ':') 
                (DQ (userattr) (EscapedLiteralPart token:<Lit_EscapedChar '\\n'>))
              } {(lsextattr)} {(-q)} {(user)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} 
              {(inline) (Lit_Other ':') 
                (DQ (sysattr) (EscapedLiteralPart token:<Lit_EscapedChar '\\n'>))
              } {(lsextattr)} {(-q)} {(system)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} 
              {(inline) (Lit_Other ':') 
                (DQ (userval) (EscapedLiteralPart token:<Lit_EscapedChar '\\n'>))
              } {(getextattr)} {(-q)} {(user)} {(userattr)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} 
              {(inline) (Lit_Other ':') 
                (DQ (sysval) (EscapedLiteralPart token:<Lit_EscapedChar '\\n'>))
              } {(getextattr)} {(-q)} {(system)} {(sysattr)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(rmextattr)} {(user)} 
              {(userattr)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(rmextattr)} {(system)} 
              {(sysattr)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(lsextattr)} {(-q)} 
              {(user)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(lsextattr)} {(-q)} 
              {(system)} {(foo)}
            )
          ]
          spids: [2068]
        )
      spids: [2064 2067]
    )
    (C {(atf_test_case)} {(two_files)})
    (FuncDef
      name: two_files_head
      body: 
        (BraceGroup
          children: [(C {(atf_set)} {(DQ (descr))} {(DQ ('Manipulate two files'))})]
          spids: [2328]
        )
      spids: [2324 2327]
    )
    (FuncDef
      name: two_files_body
      body: 
        (BraceGroup
          children: [
            (C {(check_fs)})
            (C {(touch)} {(foo)} {(bar)})
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(setextattr)} {(user)} 
              {(myattr)} {(myvalue)} {(foo)} {(bar)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} 
              {(inline) (Lit_Other ':') 
                (DQ (foo) (EscapedLiteralPart token:<Lit_EscapedChar '\\t'>) (myattr) 
                  (EscapedLiteralPart token:<Lit_EscapedChar '\\n'>) (bar) (EscapedLiteralPart token:<Lit_EscapedChar '\\t'>) (myattr) 
                  (EscapedLiteralPart token:<Lit_EscapedChar '\\n'>)
                )
              } {(lsextattr)} {(user)} {(foo)} {(bar)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} 
              {(inline) (Lit_Other ':') 
                (DQ (foo) (EscapedLiteralPart token:<Lit_EscapedChar '\\t'>) (myvalue) 
                  (EscapedLiteralPart token:<Lit_EscapedChar '\\n'>) (bar) (EscapedLiteralPart token:<Lit_EscapedChar '\\t'>) (myvalue) 
                  (EscapedLiteralPart token:<Lit_EscapedChar '\\n'>)
                )
              } {(getextattr)} {(user)} {(myattr)} {(foo)} {(bar)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(rmextattr)} {(user)} 
              {(myattr)} {(foo)} {(bar)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(lsextattr)} {(-q)} 
              {(user)} {(foo)} {(bar)}
            )
          ]
          spids: [2347]
        )
      spids: [2343 2346]
    )
    (C {(atf_test_case)} {(two_files_force)})
    (FuncDef
      name: two_files_force_head
      body: 
        (BraceGroup
          children: [
            (C {(atf_set)} {(DQ (descr))} {(DQ ('Manipulate two files.  The first does not exist'))})
          ]
          spids: [2513]
        )
      spids: [2509 2512]
    )
    (FuncDef
      name: two_files_force_body
      body: 
        (BraceGroup
          children: [
            (C {(check_fs)})
            (C {(touch)} {(bar)})
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (1)} {(-e)} 
              {(match) (Lit_Other ':') (DQ ('No such file or directory'))} {(setextattr)} {(user)} {(myattr)} {(myvalue)} {(foo)} {(bar)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-e)} {(ignore)} {(setextattr)} {(-f)} 
              {(user)} {(myattr)} {(myvalue)} {(foo)} {(bar)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (1)} {(-e)} 
              {(match) (Lit_Other ':') (DQ ('No such file or directory'))} {(lsextattr)} {(user)} {(foo)} {(bar)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-e)} {(ignore)} {(-o)} 
              {(inline) (Lit_Other ':') 
                (DQ (bar) (EscapedLiteralPart token:<Lit_EscapedChar '\\t'>) (myattr) 
                  (EscapedLiteralPart token:<Lit_EscapedChar '\\n'>)
                )
              } {(lsextattr)} {(-f)} {(user)} {(foo)} {(bar)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (1)} {(-e)} 
              {(match) (Lit_Other ':') (DQ ('No such file or directory'))} {(getextattr)} {(user)} {(myattr)} {(foo)} {(bar)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-e)} {(ignore)} {(-o)} 
              {(inline) (Lit_Other ':') 
                (DQ (bar) (EscapedLiteralPart token:<Lit_EscapedChar '\\t'>) (myvalue) 
                  (EscapedLiteralPart token:<Lit_EscapedChar '\\n'>)
                )
              } {(getextattr)} {(-f)} {(user)} {(myattr)} {(foo)} {(bar)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (1)} {(-e)} 
              {(match) (Lit_Other ':') (DQ ('No such file or directory'))} {(rmextattr)} {(user)} {(myattr)} {(foo)} {(bar)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-e)} {(ignore)} {(rmextattr)} {(-f)} 
              {(user)} {(myattr)} {(foo)} {(bar)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(lsextattr)} {(-q)} 
              {(user)} {(bar)}
            )
          ]
          spids: [2532]
        )
      spids: [2528 2531]
    )
    (C {(atf_test_case)} {(two_user_attrs)})
    (FuncDef
      name: two_user_attrs_head
      body: 
        (BraceGroup
          children: [(C {(atf_set)} {(DQ (descr))} {(DQ ('A file with two extended attributes'))})]
          spids: [2820]
        )
      spids: [2816 2819]
    )
    (FuncDef
      name: two_user_attrs_body
      body: 
        (BraceGroup
          children: [
            (C {(check_fs)})
            (C {(touch)} {(foo)})
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(setextattr)} {(user)} 
              {(myattr1)} {(myvalue1)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(setextattr)} {(user)} 
              {(myattr2)} {(myvalue2)} {(foo)}
            )
            (AndOr
              children: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:raw_output)
                      op: Equal
                      rhs: 
                        {
                          (CommandSubPart
                            command_list: 
                              (CommandList
                                children: [(C {(lsextattr)} {(-q)} {(user)} {(foo)})]
                              )
                            left_token: <Left_Backtick '`'>
                            spids: [2905 2913]
                          )
                        }
                      spids: [2904]
                    )
                  ]
                  spids: [2904]
                )
                (C {(atf_fail)} {(DQ ('lsextattr failed'))})
              ]
              op_id: Op_DPipe
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:tabless_output)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(printf)} {(DQ ('%s %s'))} {(${ VSub_Name raw_output)})]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [2925 2935]
                      )
                    }
                  spids: [2924]
                )
              ]
              spids: [2924]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {(DQ ('myattr1 myattr2'))} {(KW_Bang '!') (Lit_Other '=')} 
                          {(DQ (${ VSub_Name tabless_output))} {(-a)} {(DQ ('myattr2 myattr1'))} {(KW_Bang '!') (Lit_Other '=')} {(DQ (${ VSub_Name tabless_output))} 
                          {(Lit_Other ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(C {(atf_fail)} {(DQ ('lsextattr printed ') (${ VSub_Name tabless_output))})]
                  spids: [-1 2975]
                )
              ]
              spids: [-1 2988]
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} 
              {(inline) (Lit_Other ':') 
                (DQ (myvalue1) (EscapedLiteralPart token:<Lit_EscapedChar '\\n'>))
              } {(getextattr)} {(-q)} {(user)} {(myattr1)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} 
              {(inline) (Lit_Other ':') 
                (DQ (myvalue2) (EscapedLiteralPart token:<Lit_EscapedChar '\\n'>))
              } {(getextattr)} {(-q)} {(user)} {(myattr2)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(rmextattr)} {(user)} 
              {(myattr2)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(rmextattr)} {(user)} 
              {(myattr1)} {(foo)}
            )
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (0)} {(-o)} {(empty)} {(lsextattr)} {(-q)} 
              {(user)} {(foo)}
            )
          ]
          spids: [2839]
        )
      spids: [2835 2838]
    )
    (C {(atf_test_case)} {(unprivileged_user_cannot_set_system_attr)})
    (FuncDef
      name: unprivileged_user_cannot_set_system_attr_head
      body: 
        (BraceGroup
          children: [
            (C {(atf_set)} {(DQ (descr))} {(DQ ("Unprivileged users can't set system attributes"))})
            (C {(atf_set)} {(DQ (require.user))} {(DQ (unprivileged))})
          ]
          spids: [3120]
        )
      spids: [3116 3119]
    )
    (FuncDef
      name: unprivileged_user_cannot_set_system_attr_body
      body: 
        (BraceGroup
          children: [
            (C {(check_fs)})
            (C {(touch)} {(foo)})
            (C {(atf_check)} {(-s)} {(exit) (Lit_Other ':') (1)} {(-e)} 
              {(match) (Lit_Other ':') (DQ ('Operation not permitted'))} {(setextattr)} {(system)} {(myattr)} {(myvalue)} {(foo)}
            )
          ]
          spids: [3150]
        )
      spids: [3146 3149]
    )
    (FuncDef
      name: atf_init_test_cases
      body: 
        (BraceGroup
          children: [
            (C {(atf_add_test_case)} {(bad_namespace)})
            (C {(atf_add_test_case)} {(hex)})
            (C {(atf_add_test_case)} {(hex_nonascii)})
            (C {(atf_add_test_case)} {(long_name)})
            (C {(atf_add_test_case)} {(loud)})
            (C {(atf_add_test_case)} {(noattrs)})
            (C {(atf_add_test_case)} {(nonexistent_file)})
            (C {(atf_add_test_case)} {(null)})
            (C {(atf_add_test_case)} {(symlink_nofollow)})
            (C {(atf_add_test_case)} {(one_user_attr)})
            (C {(atf_add_test_case)} {(one_system_attr)})
            (C {(atf_add_test_case)} {(stdin)})
            (C {(atf_add_test_case)} {(stringify)})
            (C {(atf_add_test_case)} {(symlink)})
            (C {(atf_add_test_case)} {(symlink_nofollow)})
            (C {(atf_add_test_case)} {(system_and_user_attrs)})
            (C {(atf_add_test_case)} {(two_files)})
            (C {(atf_add_test_case)} {(two_files_force)})
            (C {(atf_add_test_case)} {(two_user_attrs)})
            (C {(atf_add_test_case)} {(unprivileged_user_cannot_set_system_attr)})
          ]
          spids: [3197]
        )
      spids: [3193 3196]
    )
    (FuncDef
      name: check_fs
      body: 
        (BraceGroup
          children: [
            (Case
              to_match: 
                {
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [
                          (Pipeline
                            children: [
                              (C {(df)} {(-T)} {(.)})
                              (C {(tail)} {(-n)} {(1)})
                              (C {(cut)} {(-wf)} {(2)})
                            ]
                            negated: False
                          )
                        ]
                      )
                    left_token: <Left_Backtick '`'>
                    spids: [3311 3333]
                  )
                }
              arms: [
                (case_arm pat_list:[{(DQ (ufs))}] spids:[333933413343-1])
                (case_arm pat_list:[{(DQ (zfs))}] spids:[335033523354-1])
                (case_arm
                  pat_list: [{(DQ (tmpfs))}]
                  action: [(C {(atf_skip)} {(DQ ('tmpfs does not support extended attributes'))})]
                  spids: [3361 3363 3370 -1]
                )
              ]
              spids: [3309 3335 3373]
            )
          ]
          spids: [3306]
        )
      spids: [3302 3305]
    )
  ]
)