(command.CommandList
  children: [
    (C {<Id.KW_Set set>} {<-e>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:cur_ksyms_file)
          op: assign_op.Equal
          rhs: {(DQ <'include/generated/autoksyms.h'>)}
          spids: [59]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:new_ksyms_file)
          op: assign_op.Equal
          rhs: {(DQ <'include/generated/autoksyms.h.tmpnew'>)}
          spids: [64]
        )
      ]
    )
    (command.ShFunction
      name: info
      body: 
        (BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$quiet'))} 
                          {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <silent_>)} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (C {<printf>} {(DQ <'  %-7s %s'> <Id.Lit_Other '\\'> <n>)} 
                      {(DQ ($ Id.VSub_Number '$1'))} {(DQ ($ Id.VSub_Number '$2'))}
                    )
                  ]
                  spids: [77 95]
                )
              ]
            )
          ]
        )
    )
    (C {<info>} {(DQ <CHK>)} {(DQ ($ Id.VSub_DollarName '$cur_ksyms_file'))})
    (command.Case
      to_match: {(DQ ($ Id.VSub_DollarName '$KBUILD_VERBOSE'))}
      arms: [
        (case_arm
          pat_list: [{<Id.Lit_Star '*'> <1> <Id.Lit_Star '*'>}]
          action: [(C {<Id.KW_Set set>} {<-x>})]
          spids: [142 145 153 -1]
        )
      ]
    )
    (command.Case
      to_match: {(DQ (${ Id.VSub_Name KCONFIG_CONFIG))}
      arms: [
        (case_arm
          pat_list: [{<Id.Lit_Star '*'> <'/'> <Id.Lit_Star '*'>}]
          action: [(C {<.>} {(DQ (${ Id.VSub_Name KCONFIG_CONFIG))})]
          spids: [171 174 186 -1]
        )
        (case_arm
          pat_list: [{<Id.Lit_Star '*'>}]
          action: [(C {<.>} {(DQ <'./'> (${ Id.VSub_Name KCONFIG_CONFIG))})]
          spids: [188 189 -1 205]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {<Id.Lit_LBracket '['>} {<-e>} {(DQ ($ Id.VSub_DollarName '$cur_ksyms_file'))} 
                  {<Id.Lit_RBracket ']'>}
                )
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (command.Sentence
              child: (C {<touch>} {(DQ ($ Id.VSub_DollarName '$cur_ksyms_file'))})
              terminator: <Id.Op_Semi _>
            )
          ]
          spids: [211 224]
        )
      ]
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {(DQ ($ Id.VSub_DollarName '$new_ksyms_file'))}
        )
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.MultiLine
              here_begin: {<EOT>}
              here_end_span_id: 259
              stdin_parts: [
                <'/*\n'>
                <' * Automatically generated file; DO NOT EDIT.\n'>
                <' */\n'>
                <'\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (command.Pipeline
      children: [
        (C {<sed>} {<-ns>} {<-e>} {(SQ <'3{s/ /\\n/g;/^$/!p;}'>)} 
          {(DQ ($ Id.VSub_DollarName '$MODVERDIR')) <'/'> <Id.Lit_Star '*'> <.mod>}
        )
        (C {<sort>} {<-u>})
        (command.WhileUntil
          keyword: <Id.KW_While while>
          cond: [(command.Sentence child:(C {<read>} {<sym>}) terminator:<Id.Op_Semi _>)]
          body: 
            (command.DoGroup
              children: [
                (command.If
                  arms: [
                    (if_arm
                      cond: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {<-n>} 
                              {(DQ ($ Id.VSub_DollarName '$CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX'))} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                      action: [
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:sym)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ 
                                    (braced_var_sub
                                      token: <Id.VSub_Name sym>
                                      suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{<_>})
                                    )
                                  )
                                }
                              spids: [311]
                            )
                          ]
                        )
                      ]
                      spids: [295 308]
                    )
                  ]
                )
                (C {<echo>} {(DQ <'#define __KSYM_'> (${ Id.VSub_Name sym) <' 1'>)})
              ]
            )
          redirects: [
            (redir
              op: <Id.Redir_DGreat '>>'>
              loc: (redir_loc.Fd fd:1)
              arg: {(DQ ($ Id.VSub_DollarName '$new_ksyms_file'))}
            )
          ]
        )
      ]
      negated: F
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName '$CONFIG_MODVERSIONS'))} 
                  {<Id.Lit_RBracket ']'>}
                )
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (command.Simple
              words: [{<echo>} {(DQ <'#define __KSYM_module_layout 1'>)}]
              redirects: [
                (redir
                  op: <Id.Redir_DGreat '>>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {(DQ ($ Id.VSub_DollarName '$new_ksyms_file'))}
                )
              ]
              do_fork: T
            )
          ]
          spids: [346 359]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:changed)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (command.CommandList
                    children: [
                      (command.ShAssignment
                        pairs: [
                          (assign_pair
                            lhs: (sh_lhs_expr.Name name:count)
                            op: assign_op.Equal
                            rhs: {<0>}
                            spids: [386]
                          )
                        ]
                      )
                      (command.Pipeline
                        children: [
                          (C {<sort>} {(DQ ($ Id.VSub_DollarName '$cur_ksyms_file'))} 
                            {(DQ ($ Id.VSub_DollarName '$new_ksyms_file'))}
                          )
                          (C {<uniq>} {<-u>})
                          (C {<sed>} {<-n>} {(SQ <'s/^#define __KSYM_\\(.*\\) 1/\\1/p'>)})
                          (C {<tr>} {(DQ <A-Z_>)} {(DQ <'a-z/'>)})
                          (command.WhileUntil
                            keyword: <Id.KW_While while>
                            cond: [
                              (command.Sentence
                                child: (C {<read>} {<sympath>})
                                terminator: <Id.Op_Semi _>
                              )
                            ]
                            body: 
                              (command.DoGroup
                                children: [
                                  (command.If
                                    arms: [
                                      (if_arm
                                        cond: [
                                          (command.Sentence
                                            child: 
                                              (C {<Id.Lit_LBracket '['>} {<-z>} 
                                                {(DQ ($ Id.VSub_DollarName '$sympath'))} {<Id.Lit_RBracket ']'>}
                                              )
                                            terminator: <Id.Op_Semi _>
                                          )
                                        ]
                                        action: [
                                          (command.Sentence
                                            child: 
                                              (command.ControlFlow
                                                token: <Id.ControlFlow_Continue continue>
                                              )
                                            terminator: <Id.Op_Semi _>
                                          )
                                        ]
                                        spids: [439 452]
                                      )
                                    ]
                                  )
                                  (command.ShAssignment
                                    pairs: [
                                      (assign_pair
                                        lhs: (sh_lhs_expr.Name name:depfile)
                                        op: assign_op.Equal
                                        rhs: 
                                          {
                                            (DQ <'include/config/ksym/'> (${ Id.VSub_Name sympath) <.h>)
                                          }
                                        spids: [460]
                                      )
                                    ]
                                  )
                                  (C {<mkdir>} {<-p>} 
                                    {
                                      (DQ 
                                        (command_sub
                                          left_token: <Id.Left_DollarParen '$('>
                                          child: 
                                            (C {<dirname>} {(DQ ($ Id.VSub_DollarName '$depfile'))})
                                        )
                                      )
                                    }
                                  )
                                  (C {<touch>} {(DQ ($ Id.VSub_DollarName '$depfile'))})
                                  (C {<echo>} 
                                    {
                                      (word_part.ArithSub
                                        anode: 
                                          (arith_expr.BinaryAssign
                                            op_id: Id.Arith_PlusEqual
                                            left: <Id.Lit_ArithVarLike count>
                                            right: {<Id.Lit_Digits 1>}
                                          )
                                      )
                                    }
                                  )
                                ]
                              )
                          )
                          (C {<tail>} {<-1>})
                        ]
                        negated: F
                      )
                    ]
                  )
              )
            }
          spids: [383]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:changed)
          op: assign_op.Equal
          rhs: 
            {
              (braced_var_sub
                token: <Id.VSub_Name changed>
                suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{<0>})
              )
            }
          spids: [513]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName '$changed')} {<-gt>} {<0>} 
                  {<Id.Lit_RBracket ']'>}
                )
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:old)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (command.AndOr
                            ops: [Id.Op_DPipe]
                            children: [
                              (C {<grep>} {<-c>} {(DQ <'^#define __KSYM_'>)} 
                                {(DQ ($ Id.VSub_DollarName '$cur_ksyms_file'))}
                              )
                              (C {<true>})
                            ]
                          )
                      )
                    }
                  spids: [541]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:new)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (command.AndOr
                            ops: [Id.Op_DPipe]
                            children: [
                              (C {<grep>} {<-c>} {(DQ <'^#define __KSYM_'>)} 
                                {(DQ ($ Id.VSub_DollarName '$new_ksyms_file'))}
                              )
                              (C {<true>})
                            ]
                          )
                      )
                    }
                  spids: [561]
                )
              ]
            )
            (C {<info>} {(DQ <KSYMS>)} 
              {
                (DQ <'symbols: before='> ($ Id.VSub_DollarName '$old') <', after='> 
                  ($ Id.VSub_DollarName '$new') <', changed='> ($ Id.VSub_DollarName '$changed')
                )
              }
            )
            (C {<info>} {(DQ <UPD>)} {(DQ ($ Id.VSub_DollarName '$cur_ksyms_file'))})
            (C {<mv>} {<-f>} {(DQ ($ Id.VSub_DollarName '$new_ksyms_file'))} 
              {(DQ ($ Id.VSub_DollarName '$cur_ksyms_file'))}
            )
            (C {<exec>} {($ Id.VSub_At '$@')})
          ]
          spids: [521 534]
        )
      ]
      else_action: [(C {<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName '$new_ksyms_file'))})]
    )
  ]
)