(command.CommandList children: [ (command.CommandList children: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:IFS) op: assign_op.Equal rhs: { (single_quoted left: (Token id:Id.Left_SingleQuoteC val:"$'" span_id:37) tokens: [ (Token id:Id.Char_Literals val:' ' span_id:38) (Token id:Id.Char_OneChar val:'\\t' span_id:39) (Token id:Id.Char_OneChar val:'\\r' span_id:40) ] ) } spids: [36] ) (assign_pair lhs: (sh_lhs_expr.Name name:VERSION) op: assign_op.Equal rhs: {(5.1.2-bashcached)} spids: [43] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:45) ) (C {(export)} {(Id.Lit_VarLike 'LANG=') (C)}) ] ) (C {(trap)} {(SQ (Token id:Id.Lit_Chars val:'exit 0' span_id:55))} {(INT)} {(TERM)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.WordTest w:{(DQ ($ Id.VSub_DollarName '$SOCAT_VERSION'))}) ) terminator: (Token id:Id.Op_Semi val:';' span_id:72) ) ] action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:send) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:79) command_list: (command.CommandList children:[(C {(mktemp)} {(-u)})]) ) ) } spids: [77] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:85) ) (C {(mkfifo)} {(-m)} {(600)} {(DQ ($ Id.VSub_DollarName '$send'))}) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:recv) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:100) command_list: (command.CommandList children:[(C {(mktemp)} {(-u)})]) ) ) } spids: [98] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:106) ) (command.Sentence child: (C {(mkfifo)} {(-m)} {(600)} {(DQ ($ Id.VSub_DollarName '$recv'))}) terminator: (Token id:Id.Op_Semi val:';' span_id:117) ) (command.Sentence child: (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:119) cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_p child: {(DQ ($ Id.VSub_DollarName '$recv'))} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:130) ) ] body: (command.DoGroup children: [ (command.Sentence child: (command.Simple words: [{(cat)} {(DQ ($ Id.VSub_DollarName '$recv'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:140) fd: 2 arg_word: {(/dev/null)} ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:142) ) ] ) ) terminator: (Token id:Id.Op_Amp val:'&' span_id:146) ) (command.Sentence child: (C {(trap)} {(SQ (Token id:Id.Lit_Chars val:'rm -f "$recv" "$send"' span_id:152))} {(EXIT)} ) terminator: (Token id:Id.Op_Semi val:';' span_id:156) ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:158) cond: [ (command.Sentence child: (C {(read)} {(-ra)} {(cmd)}) terminator: (Token id:Id.Op_Semi val:';' span_id:165) ) ] body: (command.DoGroup children: [ (command.Sentence child: (command.Case to_match: { (braced_var_sub token: (Token id:Id.VSub_Name val:cmd span_id:172) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 0)}) ) ) } arms: [ (case_arm pat_list: [ {(Id.KW_Set set)} {(add)} {(replace)} {(append)} {(prepend)} {(cas)} ] action: [ (command.Sentence child: (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:195) cond: [ (command.Sentence child: (C {(true)}) terminator: (Token id:Id.Op_Semi val:';' span_id:198) ) ] body: (command.DoGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (command.Simple words: [ {(printf)} { (SQ (Token id: Id.Lit_Chars val: 'recv=%q send=%q cmd=%q\\n' span_id: 205 ) ) } {(DQ ($ Id.VSub_DollarName '$recv'))} {(DQ ($ Id.VSub_DollarName '$send'))} { (DQ (braced_var_sub token: (Token id: Id.VSub_Name val: cmd span_id: 218 ) bracket_op: (bracket_op.WholeArray op_id: Id.Arith_Star ) ) ) } ] redirects: [ (redir.Redir op: (Token id: Id.Redir_Great val: '>' span_id: 225 ) fd: -1 arg_word: { (DQ ($ Id.VSub_DollarName '$BASHCACHED_PIPE') ) } ) (redir.Redir op: (Token id: Id.Redir_Great val: '2>' span_id: 230 ) fd: 2 arg_word: {(/dev/null)} ) ] ) (command.ControlFlow token: (Token id: Id.ControlFlow_Break val: break span_id: 235 ) ) ] ) ] ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:239) ) (command.Simple words: [ {(head)} {(-c)} { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:cmd span_id:247) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 4)}) ) suffix_op: (suffix_op.Unary op_id: Id.VTest_Hyphen arg_word: {(0)} ) ) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:256) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$send'))} ) ] ) ] spids: [181 192 260 -1] ) (case_arm pat_list: [{(quit)}] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:266) ) ] spids: [263 264 267 -1] ) (case_arm pat_list: [{(SQ )}] spids: [269 271 273 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:278) cond: [ (command.Sentence child: (C {(true)}) terminator: (Token id:Id.Op_Semi val:';' span_id:281) ) ] body: (command.DoGroup children: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp] children: [ (command.Simple words: [ {(printf)} { (SQ (Token id: Id.Lit_Chars val: 'recv=%q send=%q cmd=%q\\n' span_id: 289 ) ) } {(DQ ($ Id.VSub_DollarName '$recv'))} {(DQ ($ Id.VSub_DollarName '$send'))} { (DQ (braced_var_sub token: (Token id: Id.VSub_Name val: cmd span_id: 302 ) bracket_op: (bracket_op.WholeArray op_id: Id.Arith_Star ) ) ) } ] redirects: [ (redir.Redir op: (Token id: Id.Redir_Great val: '>' span_id: 309 ) fd: -1 arg_word: { (DQ ($ Id.VSub_DollarName '$BASHCACHED_PIPE') ) } ) (redir.Redir op: (Token id: Id.Redir_Great val: '2>' span_id: 314 ) fd: 2 arg_word: {(/dev/null)} ) ] ) (command.ControlFlow token: (Token id: Id.ControlFlow_Break val: break span_id: 319 ) ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:320) ) ] ) ) ] spids: [275 276 323 -1] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:327) ) ] ) ) ] spids: [63 74] ) ] else_action: [ (command.Sentence child: (command.ShFunction name: help body: (command.BraceGroup children: [ (command.Sentence child: (command.Pipeline children: [ (command.Simple words: [{(tail)} {(-n) (Id.Lit_Other '+') (2)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:346) fd: -1 arg_word: {(DQ ($ Id.VSub_Number '$0'))} ) ] ) (C {(head)} {(-n11)}) (C {(cut)} {(-c3-)}) ] negated: F ) terminator: (Token id:Id.Op_Semi val:';' span_id:362) ) (command.Sentence child: (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:364) ) terminator: (Token id:Id.Op_Semi val:';' span_id:365) ) ] ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:368) ) (command.ShFunction name: version body: (command.BraceGroup children: [ (command.Sentence child: (C {(echo)} {($ Id.VSub_DollarName '$VERSION')}) terminator: (Token id:Id.Op_Semi val:';' span_id:379) ) (command.Sentence child: (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:381) ) terminator: (Token id:Id.Op_Semi val:';' span_id:382) ) ] ) ) (command.ShFunction name: license body: (command.BraceGroup children: [ (command.Sentence child: (C {(curl)} { (SQ (Token id: Id.Lit_Chars val: 'https://raw.githubusercontent.com/MakeNowJust/bashcached/master/LICENSE.MIT.md' span_id: 396 ) ) } ) terminator: (Token id:Id.Op_Semi val:';' span_id:398) ) (command.Sentence child: (C {(echo)}) terminator: (Token id:Id.Op_Semi val:';' span_id:401) ) (command.Sentence child: (C {(curl)} { (SQ (Token id: Id.Lit_Chars val: 'https://raw.githubusercontent.com/MakeNowJust/bashcached/master/LICENSE.%F0%9F%8D%A3.md' span_id: 407 ) ) } ) terminator: (Token id:Id.Op_Semi val:';' span_id:409) ) (command.Sentence child: (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:411) ) terminator: (Token id:Id.Op_Semi val:';' span_id:412) ) ] ) ) (command.ForEach iter_name: v iter_words: [{(DQ ($ Id.VSub_At '$@'))}] do_arg_iter: F body: (command.DoGroup children: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {($ Id.VSub_DollarName '$v')} right: {(--) (Id.Lit_Other '*')} ) ) (C {(eval)} { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:v span_id:447) suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{(Id.Lit_Digits 2)}) ) ) ) } ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:452) ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:unique) op: assign_op.Equal rhs: {(1)} spids: [462] ) (assign_pair lhs: (sh_lhs_expr.Name name:before) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:466) command_list: (command.CommandList children: [ (C {(printf)} {(SQ (Token id:Id.Lit_Chars val:'%(%s)T' span_id:470))} {(-1)}) ] ) ) } spids: [465] ) ] ) (C {(declare)} {(-A)} {(Id.Lit_VarLike 'flags=') (sh_array_literal left:(Token id:Id.Op_LParen val:'(' span_id:482)) } {(Id.Lit_VarLike 'exptime=') (sh_array_literal left:(Token id:Id.Op_LParen val:'(' span_id:486))} {(Id.Lit_VarLike 'casUnique=') (sh_array_literal left:(Token id:Id.Op_LParen val:'(' span_id:490)) } {(Id.Lit_VarLike 'data=') (sh_array_literal left:(Token id:Id.Op_LParen val:'(' span_id:494))} ) (command.ShFunction name: cache_has body: (command.BraceGroup children: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:t) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:exptime span_id:511) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{($ Id.VSub_Number '$1')}) ) ) } spids: [509] ) ] ) (command.DBracket expr: (bool_expr.LogicalAnd left: (bool_expr.WordTest w:{($ Id.VSub_DollarName '$t')}) right: (bool_expr.LogicalOr left: (bool_expr.Binary op_id: Id.BoolBinary_eq left: {($ Id.VSub_DollarName '$t')} right: {(0)} ) right: (bool_expr.Binary op_id: Id.BoolBinary_gt left: {($ Id.VSub_DollarName '$t')} right: {($ Id.VSub_DollarName '$time')} ) ) ) ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:544) ) ] ) ) (command.ShFunction name: cache_update body: (command.BraceGroup children: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: data index: (arith_expr.ArithWord w:{($ Id.VSub_Number '$1')}) ) op: assign_op.Equal rhs: {($ Id.VSub_Number '$2')} spids: [555] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:559) ) (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp Id.Op_DPipe] children: [ (command.DBracket expr: (bool_expr.WordTest w:{($ Id.VSub_Number '$3')}) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: casUnique index: (arith_expr.ArithWord w:{($ Id.VSub_Number '$1')}) ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$3'))} spids: [571] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: casUnique index: (arith_expr.ArithWord w:{($ Id.VSub_Number '$1')}) ) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.UnaryAssign op_id: Id.Node_PostDPlus child: (sh_lhs_expr.Name name:unique) ) ) } spids: [582] ) ] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:590) ) ] ) ) (command.ShFunction name: cache_set body: (command.BraceGroup children: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: flags index: (arith_expr.ArithWord w:{($ Id.VSub_Number '$1')}) ) op: assign_op.Equal rhs: {($ Id.VSub_Number '$2')} spids: [603] ) (assign_pair lhs: (sh_lhs_expr.IndexedName name: exptime index: (arith_expr.ArithWord w:{($ Id.VSub_Number '$1')}) ) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.TernaryOp cond: (arith_expr.Binary op_id: Id.Arith_DAmp left: (arith_expr.Binary op_id: Id.Arith_Less left: (arith_expr.ArithWord w:{(Id.Lit_Digits 0)}) right: (arith_expr.ArithWord w:{($ Id.VSub_Number '$3')}) ) right: (arith_expr.Binary op_id: Id.Arith_LessEqual left: (arith_expr.ArithWord w:{($ Id.VSub_Number '$3')}) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 2592000)}) ) ) true_expr: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.ArithWord w:{($ Id.VSub_Number '$3')}) right: (arith_expr.VarRef token: (Token id: Id.Lit_ArithVarLike val: time span_id: 632 ) ) ) false_expr: (arith_expr.ArithWord w:{($ Id.VSub_Number '$3')}) ) ) } spids: [608] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:639) ) (command.Sentence child: (C {(cache_update)} {(DQ ($ Id.VSub_Number '$1'))} {(DQ ($ Id.VSub_Number '$4'))} {(DQ ($ Id.VSub_Number '$5'))} ) terminator: (Token id:Id.Op_Semi val:';' span_id:658) ) ] ) ) (command.ShFunction name: cache_get body: (command.BraceGroup children: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp] children: [ (C {(cache_has)} {(DQ ($ Id.VSub_Number '$1'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:d) op: assign_op.Equal rhs: { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:data span_id:680) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{($ Id.VSub_Number '$1')}) ) ) ) } spids: [677] ) ] ) (C {(printf)} { (single_quoted left: (Token id:Id.Left_SingleQuoteC val:"$'" span_id:691) tokens: [ (Token id: Id.Char_Literals val: 'VALUE %s %s %s%s' span_id: 692 ) (Token id: Id.Char_OneChar val: '\\r' span_id: 693 ) (Token id: Id.Char_OneChar val: '\\n' span_id: 694 ) ] ) } {(DQ ($ Id.VSub_Number '$1'))} { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:flags span_id:705) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{($ Id.VSub_Number '$1')}) ) ) ) } { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:713) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(-n)} {(DQ ($ Id.VSub_DollarName '$d'))}) (C {(base64)} {(-d)}) (C {(wc)} {(-c)}) ] negated: F ) ] ) ) ) } { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:737) command_list: (command.CommandList children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.WordTest w:{($ Id.VSub_Number '$2')}) ) (C {(echo)} { (DQ (' ') (braced_var_sub token: (Token id: Id.VSub_Name val: casUnique span_id: 751 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {($ Id.VSub_Number '$1')} ) ) ) ) } ) ] ) ] ) ) ) } ) (command.Pipeline children: [ (C {(echo)} {(-n)} {(DQ ($ Id.VSub_DollarName '$d'))}) (C {(base64)} {(-d)}) ] negated: F ) (C {(echo)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'\\r' span_id:784))}) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:786) ) ] ) ) (command.ShFunction name: cache_delete body: (command.BraceGroup children: [ (command.Sentence child: (C {(unset)} {(DQ ('flags[') ($ Id.VSub_Number '$1') (']'))} {(DQ ('exptime[') ($ Id.VSub_Number '$1') (']'))} {(DQ ('casUnique[') ($ Id.VSub_Number '$1') (']'))} {(DQ ('data[') ($ Id.VSub_Number '$1') (']'))} ) terminator: (Token id:Id.Op_Semi val:';' span_id:822) ) ] ) ) (command.ShFunction name: read_data body: (command.BraceGroup children: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:d) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:840) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(head)} {(-c)} {(DQ ($ Id.VSub_Number '$1'))} {(DQ ($ Id.VSub_DollarName '$send'))} ) (C {(base64)}) ] negated: F ) ] ) ) ) } spids: [838] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:858) ) ] ) ) (command.ShFunction name: base64_cat body: (command.BraceGroup children: [ (command.Sentence child: (command.Pipeline children: [ (C {(cat)} { (command_sub left_token: (Token id:Id.Left_ProcSubIn val:'<(' span_id:871) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(-n)} {(DQ ($ Id.VSub_Number '$1'))}) (C {(base64)} {(-d)}) ] negated: F ) ] ) ) } { (command_sub left_token: (Token id:Id.Left_ProcSubIn val:'<(' span_id:887) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(-n)} {(DQ ($ Id.VSub_Number '$2'))}) (C {(base64)} {(-d)}) ] negated: F ) ] ) ) } ) (C {(base64)}) ] negated: F ) terminator: (Token id:Id.Op_Semi val:';' span_id:906) ) ] ) ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BASHCACHED_PIPE) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:914) command_list: (command.CommandList children:[(C {(mktemp)} {(-u)})]) ) ) } spids: [912] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:920) ) (command.Sentence child: (C {(export)} {(BASHCACHED_PIPE)}) terminator: (Token id:Id.Op_Semi val:';' span_id:925) ) (C {(mkfifo)} {(-m)} {(600)} {(DQ ($ Id.VSub_DollarName '$BASHCACHED_PIPE'))}) (C {(trap)} {(SQ (Token id:Id.Lit_Chars val:'rm -f "$BASHCACHED_PIPE"' span_id:941))} {(EXIT)}) (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DParen child: (arith_expr.Binary op_id: Id.Arith_NEqual left: (arith_expr.ArithWord w: { (braced_var_sub token: (Token id:Id.VSub_Name val:check span_id:950) suffix_op: (suffix_op.Unary op_id:Id.VTest_Hyphen arg_word:{(60)}) ) } ) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 0)}) ) ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:964) cond: [ (command.Sentence child: (C {(echo)}) terminator: (Token id:Id.Op_Semi val:';' span_id:967) ) ] body: (command.DoGroup children: [ (command.Sentence child: (C {(sleep)} { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:check span_id:975) suffix_op: (suffix_op.Unary op_id:Id.VTest_Hyphen arg_word:{(60)}) ) ) } ) terminator: (Token id:Id.Op_Semi val:';' span_id:980) ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:984) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$BASHCACHED_PIPE'))} ) ] ) ] ) terminator: (Token id:Id.Op_Amp val:'&' span_id:989) ) (command.Sentence child: (command.Pipeline children: [ (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:993) cond: [ (command.Sentence child: (C {(true)}) terminator: (Token id:Id.Op_Semi val:';' span_id:996) ) ] body: (command.DoGroup children: [ (command.Sentence child: (C {(cat)} {(DQ ($ Id.VSub_DollarName '$BASHCACHED_PIPE'))}) terminator: (Token id:Id.Op_Semi val:';' span_id:1005) ) ] ) ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:1011) cond: [ (command.Sentence child: (C {(read)} {(-r)} {(line)}) terminator: (Token id:Id.Op_Semi val:';' span_id:1018) ) ] body: (command.DoGroup children: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cmd) op: assign_op.Equal rhs: {(SQ )} spids: [1023] ) (assign_pair lhs: (sh_lhs_expr.Name name:recv) op: assign_op.Equal rhs: {(SQ )} spids: [1027] ) (assign_pair lhs: (sh_lhs_expr.Name name:send) op: assign_op.Equal rhs: (word.Empty) spids: [1031] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:1032) ) (command.Sentence child: (C {(eval)} {(DQ ($ Id.VSub_DollarName '$line'))}) terminator: (Token id:Id.Op_Semi val:';' span_id:1039) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cmd) op: assign_op.Equal rhs: { (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:1042) words: [{($ Id.VSub_DollarName '$cmd')}] ) } spids: [1041] ) (assign_pair lhs: (sh_lhs_expr.Name name:time) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1047) command_list: (command.CommandList children: [ (C {(printf)} {(SQ (Token id:Id.Lit_Chars val:'%(%s)T' span_id:1051))} {(-1)} ) ] ) ) } spids: [1046] ) ] ) (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (command.DParen child: (arith_expr.Binary op_id: Id.Arith_GreatEqual left: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.VarRef token: (Token id:Id.Lit_ArithVarLike val:time span_id:1060) ) right: (arith_expr.VarRef token: (Token id: Id.Lit_ArithVarLike val: before span_id: 1064 ) ) ) right: (arith_expr.ArithWord w: { (braced_var_sub token: (Token id:Id.VSub_Name val:check span_id:1069) suffix_op: (suffix_op.Unary op_id: Id.VTest_Hyphen arg_word: {(60)} ) ) } ) ) ) (command.ForEach iter_name: k iter_words: [ { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:exptime span_id:1088) prefix_op: (Id.VSub_Bang) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ] do_arg_iter: F body: (command.DoGroup children: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp] children: [ (command.Pipeline children: [ (C {(cache_has)} {($ Id.VSub_DollarName '$k')}) ] negated: T ) (C {(cache_delete)} {($ Id.VSub_DollarName '$k')}) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:1110) ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:before) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$time')} spids: [1116] ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.LogicalNot child: (bool_expr.Unary op_id: Id.BoolUnary_p child: {($ Id.VSub_DollarName '$recv')} ) ) ) (command.ControlFlow token: (Token id:Id.ControlFlow_Continue val:continue span_id:1132) ) ] ) (command.Sentence child: (command.Case to_match: { (braced_var_sub token: (Token id:Id.VSub_Name val:cmd span_id:1138) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 0)}) ) ) } arms: [ (case_arm pat_list: [{(Id.KW_Set set)}] action: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(read_data)} { (braced_var_sub token: (Token id:Id.VSub_Name val:cmd span_id:1153) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {(Id.Lit_Digits 4)} ) ) ) } ) (command.ControlFlow token: (Token id: Id.ControlFlow_Return val: return span_id: 1161 ) arg_word: {(1)} ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:1164) ) (C {(cache_set)} { (braced_var_sub token: (Token id:Id.VSub_Name val:cmd span_id:1169) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } { (braced_var_sub token: (Token id:Id.VSub_Name val:cmd span_id:1176) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 2)}) ) ) } { (braced_var_sub token: (Token id:Id.VSub_Name val:cmd span_id:1183) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 3)}) ) ) } {(DQ ($ Id.VSub_DollarName '$d'))} ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: { (braced_var_sub token: (Token id: Id.VSub_Name val: cmd span_id: 1197 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {(Id.Lit_Digits 5)} ) ) ) } right: {(noreply)} ) ) (command.Simple words: [{(echo)} {(-e)} {(DQ (STORED) (Id.Lit_Other '\\') (r))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1220) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$recv'))} ) ] ) ] ) ] spids: [1147 1148 1224 -1] ) (case_arm pat_list: [{(add)}] action: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(read_data)} { (braced_var_sub token: (Token id:Id.VSub_Name val:cmd span_id:1233) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {(Id.Lit_Digits 4)} ) ) ) } ) (command.ControlFlow token: (Token id: Id.ControlFlow_Return val: return span_id: 1241 ) arg_word: {(1)} ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:1244) ) (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DPipe] children: [ (command.Pipeline children: [ (C {(cache_has)} { (braced_var_sub token: (Token id:Id.VSub_Name val:cmd span_id:1251) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {(Id.Lit_Digits 1)} ) ) ) } ) ] negated: T ) (C {(cache_set)} { (braced_var_sub token: (Token id:Id.VSub_Name val:cmd span_id:1262) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } { (braced_var_sub token: (Token id:Id.VSub_Name val:cmd span_id:1269) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 2)}) ) ) } { (braced_var_sub token: (Token id:Id.VSub_Name val:cmd span_id:1276) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 3)}) ) ) } {(DQ ($ Id.VSub_DollarName '$d'))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:result) op: assign_op.Equal rhs: {(STORED)} spids: [1289] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:result) op: assign_op.Equal rhs: {(NOT_STORED)} spids: [1294] ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: { (braced_var_sub token: (Token id: Id.VSub_Name val: cmd span_id: 1301 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {(Id.Lit_Digits 5)} ) ) ) } right: {(noreply)} ) ) (command.Simple words: [ {(echo)} {(-e)} { (DQ ($ Id.VSub_DollarName '$result') (Id.Lit_Other '\\') (r) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1324) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$recv'))} ) ] ) ] ) ] spids: [1227 1228 1328 -1] ) (case_arm pat_list: [{(replace)}] action: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(read_data)} { (braced_var_sub token: (Token id:Id.VSub_Name val:cmd span_id:1337) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {(Id.Lit_Digits 4)} ) ) ) } ) (command.ControlFlow token: (Token id: Id.ControlFlow_Return val: return span_id: 1345 ) arg_word: {(1)} ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:1348) ) (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DPipe] children: [ (C {(cache_has)} { (braced_var_sub token: (Token id:Id.VSub_Name val:cmd span_id:1353) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } ) (C {(cache_set)} { (braced_var_sub token: (Token id:Id.VSub_Name val:cmd span_id:1364) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } { (braced_var_sub token: (Token id:Id.VSub_Name val:cmd span_id:1371) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 2)}) ) ) } { (braced_var_sub token: (Token id:Id.VSub_Name val:cmd span_id:1378) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 3)}) ) ) } {(DQ ($ Id.VSub_DollarName '$d'))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:result) op: assign_op.Equal rhs: {(STORED)} spids: [1391] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:result) op: assign_op.Equal rhs: {(NOT_STORED)} spids: [1396] ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: { (braced_var_sub token: (Token id: Id.VSub_Name val: cmd span_id: 1403 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {(Id.Lit_Digits 5)} ) ) ) } right: {(noreply)} ) ) (command.Simple words: [ {(echo)} {(-e)} { (DQ ($ Id.VSub_DollarName '$result') (Id.Lit_Other '\\') (r) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1426) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$recv'))} ) ] ) ] ) ] spids: [1331 1332 1430 -1] ) (case_arm pat_list: [{(append)}] action: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(read_data)} { (braced_var_sub token: (Token id:Id.VSub_Name val:cmd span_id:1439) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {(Id.Lit_Digits 4)} ) ) ) } ) (command.ControlFlow token: (Token id: Id.ControlFlow_Return val: return span_id: 1447 ) arg_word: {(1)} ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:1450) ) (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DPipe] children: [ (C {(cache_has)} { (braced_var_sub token: (Token id:Id.VSub_Name val:cmd span_id:1455) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } ) (C {(cache_update)} { (braced_var_sub token: (Token id:Id.VSub_Name val:cmd span_id:1466) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } { (DQ (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 1475 ) command_list: (command.CommandList children: [ (C {(base64_cat)} { (DQ (braced_var_sub token: (Token id: Id.VSub_Name val: data span_id: 1480 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: { (braced_var_sub token: (Token id: Id.VSub_Name val: cmd span_id: 1483 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: { ( Id.Lit_Digits 1 ) } ) ) ) } ) ) ) ) } {(DQ ($ Id.VSub_DollarName '$d'))} ) ] ) ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:result) op: assign_op.Equal rhs: {(STORED)} spids: [1500] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:result) op: assign_op.Equal rhs: {(NOT_STORED)} spids: [1505] ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: { (braced_var_sub token: (Token id: Id.VSub_Name val: cmd span_id: 1512 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {(Id.Lit_Digits 5)} ) ) ) } right: {(noreply)} ) ) (command.Simple words: [ {(echo)} {(-e)} { (DQ ($ Id.VSub_DollarName '$result') (Id.Lit_Other '\\') (r) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1535) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$recv'))} ) ] ) ] ) ] spids: [1433 1434 1539 -1] ) (case_arm pat_list: [{(prepend)}] action: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(read_data)} { (braced_var_sub token: (Token id:Id.VSub_Name val:cmd span_id:1548) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {(Id.Lit_Digits 4)} ) ) ) } ) (command.ControlFlow token: (Token id: Id.ControlFlow_Return val: return span_id: 1556 ) arg_word: {(1)} ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:1559) ) (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DPipe] children: [ (C {(cache_has)} { (braced_var_sub token: (Token id:Id.VSub_Name val:cmd span_id:1564) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } ) (C {(cache_update)} { (braced_var_sub token: (Token id:Id.VSub_Name val:cmd span_id:1575) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } { (DQ (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 1584 ) command_list: (command.CommandList children: [ (C {(base64_cat)} {(DQ ($ Id.VSub_DollarName '$d'))} { (DQ (braced_var_sub token: (Token id: Id.VSub_Name val: data span_id: 1593 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: { (braced_var_sub token: (Token id: Id.VSub_Name val: cmd span_id: 1596 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: { ( Id.Lit_Digits 1 ) } ) ) ) } ) ) ) ) } ) ] ) ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:result) op: assign_op.Equal rhs: {(STORED)} spids: [1609] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:result) op: assign_op.Equal rhs: {(NOT_STORED)} spids: [1614] ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: { (braced_var_sub token: (Token id: Id.VSub_Name val: cmd span_id: 1621 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {(Id.Lit_Digits 5)} ) ) ) } right: {(noreply)} ) ) (command.Simple words: [ {(echo)} {(-e)} { (DQ ($ Id.VSub_DollarName '$result') (Id.Lit_Other '\\') (r) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1644) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$recv'))} ) ] ) ] ) ] spids: [1542 1543 1648 -1] ) (case_arm pat_list: [{(cas)}] action: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(read_data)} { (braced_var_sub token: (Token id:Id.VSub_Name val:cmd span_id:1657) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {(Id.Lit_Digits 4)} ) ) ) } ) (command.ControlFlow token: (Token id: Id.ControlFlow_Return val: return span_id: 1665 ) arg_word: {(1)} ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:1668) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {(cache_has)} { (braced_var_sub token: (Token id: Id.VSub_Name val: cmd span_id: 1677 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {(Id.Lit_Digits 1)} ) ) ) } ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:1682) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:result) op: assign_op.Equal rhs: {(NOT_FOUND)} spids: [1686] ) ] ) ] spids: [1670 1684] ) ] else_action: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DPipe] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_eq left: { (braced_var_sub token: (Token id: Id.VSub_Name val: casUnique span_id: 1695 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: { (braced_var_sub token: (Token id: Id.VSub_Name val: cmd span_id: 1698 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: { ( Id.Lit_Digits 1 ) } ) ) ) } ) ) ) } right: { (braced_var_sub token: (Token id: Id.VSub_Name val: cmd span_id: 1709 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {(Id.Lit_Digits 5)} ) ) ) } ) ) (C {(cache_set)} { (braced_var_sub token: (Token id: Id.VSub_Name val: cmd span_id: 1722 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {(Id.Lit_Digits 1)} ) ) ) } { (braced_var_sub token: (Token id: Id.VSub_Name val: cmd span_id: 1729 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {(Id.Lit_Digits 2)} ) ) ) } { (braced_var_sub token: (Token id: Id.VSub_Name val: cmd span_id: 1736 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {(Id.Lit_Digits 3)} ) ) ) } {(DQ ($ Id.VSub_DollarName '$d'))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:result) op: assign_op.Equal rhs: {(STORED)} spids: [1749] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:result) op: assign_op.Equal rhs: {(EXISTS)} spids: [1754] ) ] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:1756) ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: { (braced_var_sub token: (Token id: Id.VSub_Name val: cmd span_id: 1764 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {(Id.Lit_Digits 6)} ) ) ) } right: {(noreply)} ) ) (command.Simple words: [ {(echo)} {(-e)} { (DQ ($ Id.VSub_DollarName '$result') (Id.Lit_Other '\\') (r) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1787) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$recv'))} ) ] ) ] ) ] spids: [1651 1652 1791 -1] ) (case_arm pat_list: [{(get)}] action: [ (command.Subshell command_list: (command.CommandList children: [ (command.ForExpr init: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: (sh_lhs_expr.Name name:i) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) cond: (arith_expr.Binary op_id: Id.Arith_Less left: (arith_expr.VarRef token: (Token id: Id.Lit_ArithVarLike val: i span_id: 1806 ) ) right: (arith_expr.ArithWord w: { (braced_var_sub token: (Token id: Id.VSub_Name val: cmd span_id: 1812 ) prefix_op: (Id.VSub_Pound) bracket_op: (bracket_op.WholeArray op_id: Id.Lit_At ) ) } ) ) update: (arith_expr.UnaryAssign op_id: Id.Node_PostDPlus child: (sh_lhs_expr.Name name:i) ) body: (command.DoGroup children: [ (command.Sentence child: (C {(cache_get)} { (braced_var_sub token: (Token id: Id.VSub_Name val: cmd span_id: 1830 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$i')} ) ) ) } ) terminator: (Token id: Id.Op_Semi val: ';' span_id: 1835 ) ) ] ) ) (C {(echo)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'END\\r' span_id:1845))} ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1848) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$recv'))} ) ] ) ] spids: [1794 1795 1852 -1] ) (case_arm pat_list: [{(gets)}] action: [ (command.Subshell command_list: (command.CommandList children: [ (command.ForExpr init: (arith_expr.BinaryAssign op_id: Id.Arith_Equal left: (sh_lhs_expr.Name name:i) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) cond: (arith_expr.Binary op_id: Id.Arith_Less left: (arith_expr.VarRef token: (Token id: Id.Lit_ArithVarLike val: i span_id: 1867 ) ) right: (arith_expr.ArithWord w: { (braced_var_sub token: (Token id: Id.VSub_Name val: cmd span_id: 1873 ) prefix_op: (Id.VSub_Pound) bracket_op: (bracket_op.WholeArray op_id: Id.Lit_At ) ) } ) ) update: (arith_expr.UnaryAssign op_id: Id.Node_PostDPlus child: (sh_lhs_expr.Name name:i) ) body: (command.DoGroup children: [ (command.Sentence child: (C {(cache_get)} { (braced_var_sub token: (Token id: Id.VSub_Name val: cmd span_id: 1891 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$i')} ) ) ) } {(1)} ) terminator: (Token id: Id.Op_Semi val: ';' span_id: 1898 ) ) ] ) ) (C {(echo)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'END\\r' span_id:1908))} ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1911) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$recv'))} ) ] ) ] spids: [1855 1856 1915 -1] ) (case_arm pat_list: [{(delete)}] action: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DPipe] children: [ (C {(cache_has)} { (braced_var_sub token: (Token id:Id.VSub_Name val:cmd span_id:1924) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } ) (C {(cache_delete)} { (braced_var_sub token: (Token id:Id.VSub_Name val:cmd span_id:1935) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:result) op: assign_op.Equal rhs: {(DELETED)} spids: [1944] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:result) op: assign_op.Equal rhs: {(NOT_FOUND)} spids: [1949] ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: { (braced_var_sub token: (Token id: Id.VSub_Name val: cmd span_id: 1956 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {(Id.Lit_Digits 2)} ) ) ) } right: {(noreply)} ) ) (command.Simple words: [ {(echo)} {(-e)} { (DQ ($ Id.VSub_DollarName '$result') (Id.Lit_Other '\\') (r) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1979) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$recv'))} ) ] ) ] ) ] spids: [1918 1919 1983 -1] ) (case_arm pat_list: [{(incr)}] action: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DPipe] children: [ (C {(cache_has)} { (braced_var_sub token: (Token id:Id.VSub_Name val:cmd span_id:1992) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:result) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.ArithWord w: { (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 2002 ) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(-n)} { (DQ (braced_var_sub token: (Token id: Id.VSub_Name val: data span_id: 2009 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: { (braced_var_sub token: (Token id: Id.VSub_Name val: cmd span_id: 2012 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: { ( Id.Lit_Digits 1 ) } ) ) ) } ) ) ) ) } ) (C {(base64)} {(-d)}) ] negated: F ) ] ) ) } ) right: (arith_expr.ArithWord w: { (braced_var_sub token: (Token id: Id.VSub_Name val: cmd span_id: 2031 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {(Id.Lit_Digits 2)} ) ) suffix_op: (suffix_op.Unary op_id: Id.VTest_Hyphen arg_word: {(0)} ) ) } ) ) ) } spids: [2000] ) ] ) (C {(cache_update)} { (braced_var_sub token: (Token id:Id.VSub_Name val:cmd span_id:2047) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } { (DQ (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 2054 ) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(-n)} {($ Id.VSub_DollarName '$result')} ) (C {(base64)}) ] negated: F ) ] ) ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:result) op: assign_op.Equal rhs: {(NOT_FOUND)} spids: [2069] ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: { (braced_var_sub token: (Token id: Id.VSub_Name val: cmd span_id: 2076 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {(Id.Lit_Digits 3)} ) ) ) } right: {(noreply)} ) ) (command.Simple words: [ {(echo)} {(-e)} { (DQ ($ Id.VSub_DollarName '$result') (Id.Lit_Other '\\') (r) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:2099) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$recv'))} ) ] ) ] ) ] spids: [1986 1987 2103 -1] ) (case_arm pat_list: [{(decr)}] action: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DPipe] children: [ (C {(cache_has)} { (braced_var_sub token: (Token id:Id.VSub_Name val:cmd span_id:2112) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:result) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.ArithWord w: { (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 2122 ) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(-n)} { (DQ (braced_var_sub token: (Token id: Id.VSub_Name val: data span_id: 2129 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: { (braced_var_sub token: (Token id: Id.VSub_Name val: cmd span_id: 2132 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: { ( Id.Lit_Digits 1 ) } ) ) ) } ) ) ) ) } ) (C {(base64)} {(-d)}) ] negated: F ) ] ) ) } ) right: (arith_expr.ArithWord w: { (braced_var_sub token: (Token id: Id.VSub_Name val: cmd span_id: 2151 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {(Id.Lit_Digits 2)} ) ) suffix_op: (suffix_op.Unary op_id: Id.VTest_Hyphen arg_word: {(0)} ) ) } ) ) ) } spids: [2120] ) ] ) (C {(cache_update)} { (braced_var_sub token: (Token id:Id.VSub_Name val:cmd span_id:2167) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } { (DQ (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 2174 ) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(-n)} {($ Id.VSub_DollarName '$result')} ) (C {(base64)}) ] negated: F ) ] ) ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:result) op: assign_op.Equal rhs: {(NOT_FOUND)} spids: [2189] ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: { (braced_var_sub token: (Token id: Id.VSub_Name val: cmd span_id: 2196 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {(Id.Lit_Digits 3)} ) ) ) } right: {(noreply)} ) ) (command.Simple words: [ {(echo)} {(-e)} { (DQ ($ Id.VSub_DollarName '$result') (Id.Lit_Other '\\') (r) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:2219) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$recv'))} ) ] ) ] ) ] spids: [2106 2107 2223 -1] ) (case_arm pat_list: [{(touch)}] action: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DPipe] children: [ (C {(cache_has)} { (braced_var_sub token: (Token id:Id.VSub_Name val:cmd span_id:2232) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } ) (C {(cache_set)} { (braced_var_sub token: (Token id:Id.VSub_Name val:cmd span_id:2244) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:flags span_id:2252) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: { (braced_var_sub token: (Token id: Id.VSub_Name val: cmd span_id: 2255 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {(Id.Lit_Digits 1)} ) ) ) } ) ) ) ) } { (braced_var_sub token: (Token id:Id.VSub_Name val:cmd span_id:2265) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 2)}) ) ) } { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:data span_id:2273) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: { (braced_var_sub token: (Token id: Id.VSub_Name val: cmd span_id: 2276 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {(Id.Lit_Digits 1)} ) ) ) } ) ) ) ) } { (braced_var_sub token: (Token id: Id.VSub_Name val: casUnique span_id: 2286 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: { (braced_var_sub token: (Token id: Id.VSub_Name val: cmd span_id: 2289 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {(Id.Lit_Digits 1)} ) ) ) } ) ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:result) op: assign_op.Equal rhs: {(TOUCHED)} spids: [2300] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:result) op: assign_op.Equal rhs: {(NOT_FOUND)} spids: [2305] ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: { (braced_var_sub token: (Token id: Id.VSub_Name val: cmd span_id: 2312 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {(Id.Lit_Digits 3)} ) ) ) } right: {(noreply)} ) ) (command.Simple words: [ {(echo)} {(-e)} { (DQ ($ Id.VSub_DollarName '$result') (Id.Lit_Other '\\') (r) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:2335) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$recv'))} ) ] ) ] ) ] spids: [2226 2227 2339 -1] ) (case_arm pat_list: [{(flush_all)}] action: [ (command.ForEach iter_name: k iter_words: [ { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:exptime span_id:2354) prefix_op: (Id.VSub_Bang) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ] do_arg_iter: F body: (command.DoGroup children: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: exptime index: (arith_expr.ArithWord w: {($ Id.VSub_DollarName '$k')} ) ) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.VarRef token: (Token id: Id.Lit_ArithVarLike val: time span_id: 2368 ) ) right: (arith_expr.ArithWord w: { (braced_var_sub token: (Token id: Id.VSub_Name val: cmd span_id: 2373 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: { ( Id.Lit_Digits 1 ) } ) ) suffix_op: (suffix_op.Unary op_id: Id.VTest_Hyphen arg_word: {(0)} ) ) } ) ) ) } spids: [2364] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:2382) ) ] ) ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: { (braced_var_sub token: (Token id: Id.VSub_Name val: cmd span_id: 2392 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.Unary op_id: Id.Node_UnaryMinus child: (arith_expr.ArithWord w: {(Id.Lit_Digits 1)} ) ) ) ) } right: {(noreply)} ) ) (command.Simple words: [{(echo)} {(-e)} {(DQ (OK) (Id.Lit_Other '\\') (r))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:2416) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$recv'))} ) ] ) ] ) ] spids: [2342 2343 2420 -1] ) (case_arm pat_list: [{(version)}] action: [ (command.Sentence child: (command.Simple words: [ {(echo)} {(-e)} { (DQ ('VERSION ') ($ Id.VSub_DollarName '$VERSION') (Id.Lit_Other '\\') (r) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:2436) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$recv'))} ) ] ) terminator: (Token id:Id.Op_Amp val:'&' span_id:2441) ) ] spids: [2423 2424 2442 -1] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:2446) ) ] ) ) ] negated: F ) terminator: (Token id:Id.Op_Amp val:'&' span_id:2450) ) (C {(socat)} { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:protocol span_id:2457) suffix_op: (suffix_op.Unary op_id:Id.VTest_Hyphen arg_word:{(tcp)}) ) ('-listen:') (braced_var_sub token: (Token id:Id.VSub_Name val:port span_id:2463) suffix_op: (suffix_op.Unary op_id:Id.VTest_Hyphen arg_word:{(25252)}) ) (',reuseaddr,fork') ) } {(system) (Id.Lit_Other ':') (DQ ($ Id.VSub_Number '$0'))} ) ] ) ] )