(command.CommandList
  children: [
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:PATH spids:[40])
          op: Equal
          rhs: {(/sbin) (Lit_Other ':') (/bin) (Lit_Other ':') (/usr/bin)}
          spids: [40]
        )
      ]
      spids: [40]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:FSCK_LOGFILE spids:[47])
          op: Equal
          rhs: {(/var/log/fsck/checkfs)}
          spids: [47]
        )
      ]
      spids: [47]
    )
    (command.AndOr
      ops: [Op_DPipe]
      children: [
        (C {(Lit_Other '[')} {(DQ ($ VSub_DollarName '$FSCKFIX'))} {(Lit_Other ']')})
        (command.Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (lhs_expr.LhsName name:FSCKFIX spids:[60])
              op: Equal
              rhs: {(no)}
              spids: [60]
            )
          ]
          spids: [60]
        )
      ]
    )
    (C {(.)} {(/lib/init/vars.sh)})
    (C {(.)} {(/lib/lsb/init-functions)})
    (C {(.)} {(/lib/init/mount-functions.sh)})
    (C {(.)} {(/lib/init/swap-functions.sh)})
    (command.FuncDef
      name: do_start
      body: 
        (command.BraceGroup
          children: [
            (C {(trap)} {(DQ )} {(INT)})
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:BAT spids:[148])
                  op: Equal
                  rhs: {(DQ )}
                  spids: [148]
                )
              ]
              spids: [148]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:fscheck spids:[153])
                  op: Equal
                  rhs: {(DQ (yes))}
                  spids: [153]
                )
              ]
              spids: [153]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [(C {(is_fastboot_active)})]
                  action: [
                    (command.AndOr
                      ops: [Op_DAmp]
                      children: [
                        (C {(Lit_Other '[')} {(DQ ($ VSub_DollarName '$fscheck'))} {(Lit_Other '=')} 
                          {(yes)} {(Lit_Other ']')}
                        )
                        (C {(log_warning_msg)} 
                          {(DQ ('Fast boot enabled, so skipping file system check.'))}
                        )
                      ]
                    )
                    (command.Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (lhs_expr.LhsName name:fscheck spids:[189])
                          op: Equal
                          rhs: {(no)}
                          spids: [189]
                        )
                      ]
                      spids: [189]
                    )
                  ]
                  spids: [16777215 165]
                )
              ]
              spids: [16777215 193]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.AndOr
                      ops: [Op_DAmp Op_DAmp]
                      children: [
                        (C {(Lit_Other '[')} {(DQ ($ VSub_DollarName '$fscheck'))} {(Lit_Other '=')} 
                          {(yes)} {(Lit_Other ']')}
                        )
                        (C {(Lit_Other '[')} {(KW_Bang '!')} {(DQ ($ VSub_DollarName '$BAT'))} 
                          {(Lit_Other ']')}
                        )
                        (C {(Lit_Other '[')} {(DQ ($ VSub_DollarName '$FSCKTYPES'))} 
                          {(KW_Bang '!') (Lit_Other '=')} {(DQ (none))} {(Lit_Other ']')}
                        )
                      ]
                    )
                  ]
                  action: [
                    (C {(swaponagain)} {(SQ <'lvm and md'>)})
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.AndOr
                              ops: [Op_DPipe]
                              children: [
                                (C {(Lit_Other '[')} {(-f)} {(/forcefsck)} {(Lit_Other ']')})
                                (C {(grep)} {(-q)} {(-s)} {(-w)} {(-i)} {(DQ (forcefsck))} {(/proc/cmdline)})
                              ]
                            )
                          ]
                          action: [
                            (command.Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (lhs_expr.LhsName name:force spids:[305])
                                  op: Equal
                                  rhs: {(DQ (-f))}
                                  spids: [305]
                                )
                              ]
                              spids: [305]
                            )
                          ]
                          spids: [16777215 302]
                        )
                      ]
                      else_action: [
                        (command.Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (lhs_expr.LhsName name:force spids:[314])
                              op: Equal
                              rhs: {(DQ )}
                              spids: [314]
                            )
                          ]
                          spids: [314]
                        )
                      ]
                      spids: [311 319]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (C {(Lit_Other '[')} {(DQ ($ VSub_DollarName '$FSCKFIX'))} {(Lit_Other '=')} 
                              {(yes)} {(Lit_Other ']')}
                            )
                          ]
                          action: [
                            (command.Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (lhs_expr.LhsName name:fix spids:[340])
                                  op: Equal
                                  rhs: {(DQ (-y))}
                                  spids: [340]
                                )
                              ]
                              spids: [340]
                            )
                          ]
                          spids: [16777215 337]
                        )
                      ]
                      else_action: [
                        (command.Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (lhs_expr.LhsName name:fix spids:[349])
                              op: Equal
                              rhs: {(DQ (-a))}
                              spids: [349]
                            )
                          ]
                          spids: [349]
                        )
                      ]
                      spids: [346 355]
                    )
                    (command.Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (lhs_expr.LhsName name:spinner spids:[358])
                          op: Equal
                          rhs: {(DQ (-C))}
                          spids: [358]
                        )
                      ]
                      spids: [358]
                    )
                    (command.Case
                      to_match: {(DQ ($ VSub_DollarName '$TERM'))}
                      arms: [
                        (case_arm
                          pat_list: [{(dumb)} {(network)} {(unknown)} {(DQ )}]
                          action: [
                            (command.Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (lhs_expr.LhsName name:spinner spids:[384])
                                  op: Equal
                                  rhs: {(DQ )}
                                  spids: [384]
                                )
                              ]
                              spids: [384]
                            )
                          ]
                          spids: [373 381 389 16777215]
                        )
                      ]
                      spids: [364 370 392]
                    )
                    (command.AndOr
                      ops: [Op_DAmp]
                      children: [
                        (C {(Lit_Other '[')} 
                          {
                            (DQ 
                              (word_part.CommandSubPart
                                command_list: (command.CommandList children:[(C {(uname)} {(-m)})])
                                left_token: <Left_CommandSub '$('>
                                spids: [398 402]
                              )
                            )
                          } {(Lit_Other '=')} {(s390x)} {(Lit_Other ']')}
                        )
                        (command.Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (lhs_expr.LhsName name:spinner spids:[413])
                              op: Equal
                              rhs: {(DQ )}
                              spids: [413]
                            )
                          ]
                          spids: [413]
                        )
                      ]
                    )
                    (command.Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (lhs_expr.LhsName name:FSCKTYPES_OPT spids:[421])
                          op: Equal
                          rhs: {(DQ )}
                          spids: [421]
                        )
                      ]
                      spids: [421]
                    )
                    (command.AndOr
                      ops: [Op_DAmp]
                      children: [
                        (C {(Lit_Other '[')} {(DQ ($ VSub_DollarName '$FSCKTYPES'))} {(Lit_Other ']')})
                        (command.Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (lhs_expr.LhsName name:FSCKTYPES_OPT spids:[436])
                              op: Equal
                              rhs: {(DQ ('-t ') ($ VSub_DollarName '$FSCKTYPES'))}
                              spids: [436]
                            )
                          ]
                          spids: [436]
                        )
                      ]
                    )
                    (command.FuncDef
                      name: handle_failed_fsck
                      body: 
                        (command.BraceGroup
                          children: [
                            (C {(log_failure_msg)} 
                              {
                                (DQ ('File system check failed. \n') ('A log is being saved in ') 
                                  (${ VSub_Name FSCK_LOGFILE) (' if that location is writable. \n') ('Please repair the file system manually.')
                                )
                              }
                            )
                            (C {(log_warning_msg)} 
                              {
                                (DQ ('A maintenance shell will now be started. \n') 
                                  ('CONTROL-D will terminate this shell and resume system boot.')
                                )
                              }
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (command.Pipeline
                                      children: [(C {(sulogin)} {($ VSub_DollarName '$CONSOLE')})]
                                      negated: T
                                    )
                                  ]
                                  action: [
                                    (C {(log_failure_msg)} 
                                      {
                                        (DQ ('Attempt to start maintenance shell failed. \n') 
                                          ('Continuing with system boot in 5 seconds.')
                                        )
                                      }
                                    )
                                    (C {(sleep)} {(5)})
                                  ]
                                  spids: [16777215 484]
                                )
                              ]
                              spids: [16777215 500]
                            )
                          ]
                          spids: [447]
                        )
                      spids: [443 446]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (C {(Lit_Other '[')} {(DQ ($ VSub_DollarName '$VERBOSE'))} {(Lit_Other '=')} 
                              {(no)} {(Lit_Other ']')}
                            )
                          ]
                          action: [
                            (C {(log_action_begin_msg)} {(DQ ('Checking file systems'))})
                            (C {(logsave)} {(-s)} {($ VSub_DollarName '$FSCK_LOGFILE')} {(fsck)} 
                              {($ VSub_DollarName '$spinner')} {(-M)} {(-A)} {($ VSub_DollarName '$fix')} {($ VSub_DollarName '$force')} 
                              {($ VSub_DollarName '$FSCKTYPES_OPT')}
                            )
                            (command.Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (lhs_expr.LhsName name:FSCKCODE spids:[552])
                                  op: Equal
                                  rhs: {($ VSub_QMark '$?')}
                                  spids: [552]
                                )
                              ]
                              spids: [552]
                            )
                            (command.If
                              arms: [
                                (if_arm
                                  cond: [
                                    (C {(Lit_Other '[')} {(DQ ($ VSub_DollarName '$FSCKCODE'))} {(-eq)} 
                                      {(32)} {(Lit_Other ']')}
                                    )
                                  ]
                                  action: [
                                    (C {(log_action_end_msg)} {(1)} 
                                      {(DQ ('code ') ($ VSub_DollarName '$FSCKCODE'))}
                                    )
                                    (C {(log_warning_msg)} 
                                      {(DQ ('File system check was interrupted by user'))}
                                    )
                                  ]
                                  spids: [16777215 572]
                                )
                                (if_arm
                                  cond: [
                                    (C {(Lit_Other '[')} {(DQ ($ VSub_DollarName '$FSCKCODE'))} {(-gt)} 
                                      {(1)} {(Lit_Other ']')}
                                    )
                                  ]
                                  action: [
                                    (C {(log_action_end_msg)} {(1)} 
                                      {(DQ ('code ') ($ VSub_DollarName '$FSCKCODE'))}
                                    )
                                    (C {(handle_failed_fsck)})
                                  ]
                                  spids: [592 607]
                                )
                              ]
                              else_action: [(C {(log_action_end_msg)} {(0)})]
                              spids: [623 631]
                            )
                          ]
                          spids: [16777215 521]
                        )
                      ]
                      else_action: [
                        (command.If
                          arms: [
                            (if_arm
                              cond: [
                                (C {(Lit_Other '[')} {(DQ ($ VSub_DollarName '$FSCKTYPES'))} 
                                  {(Lit_Other ']')}
                                )
                              ]
                              action: [
                                (C {(log_action_msg)} 
                                  {
                                    (DQ ('Will now check all file systems of types ') 
                                      ($ VSub_DollarName '$FSCKTYPES')
                                    )
                                  }
                                )
                              ]
                              spids: [16777215 648]
                            )
                          ]
                          else_action: [
                            (C {(log_action_msg)} {(DQ ('Will now check all file systems'))})
                          ]
                          spids: [659 669]
                        )
                        (C {(logsave)} {(-s)} {($ VSub_DollarName '$FSCK_LOGFILE')} {(fsck)} 
                          {($ VSub_DollarName '$spinner')} {(-V)} {(-M)} {(-A)} {($ VSub_DollarName '$fix')} {($ VSub_DollarName '$force')} 
                          {($ VSub_DollarName '$FSCKTYPES_OPT')}
                        )
                        (command.Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (lhs_expr.LhsName name:FSCKCODE spids:[695])
                              op: Equal
                              rhs: {($ VSub_QMark '$?')}
                              spids: [695]
                            )
                          ]
                          spids: [695]
                        )
                        (command.If
                          arms: [
                            (if_arm
                              cond: [
                                (C {(Lit_Other '[')} {(DQ ($ VSub_DollarName '$FSCKCODE'))} {(-eq)} 
                                  {(32)} {(Lit_Other ']')}
                                )
                              ]
                              action: [
                                (C {(log_warning_msg)} 
                                  {(DQ ('File system check was interrupted by user'))}
                                )
                              ]
                              spids: [16777215 714]
                            )
                            (if_arm
                              cond: [
                                (C {(Lit_Other '[')} {(DQ ($ VSub_DollarName '$FSCKCODE'))} {(-gt)} {(1)} 
                                  {(Lit_Other ']')}
                                )
                              ]
                              action: [(C {(handle_failed_fsck)})]
                              spids: [724 739]
                            )
                          ]
                          else_action: [
                            (C {(log_success_msg)} 
                              {
                                (DQ ('Done checking file systems. \n') ('A log is being saved in ') 
                                  (${ VSub_Name FSCK_LOGFILE) (' if that location is writable.')
                                )
                              }
                            )
                          ]
                          spids: [745 760]
                        )
                      ]
                      spids: [634 763]
                    )
                  ]
                  spids: [16777215 253]
                )
              ]
              spids: [16777215 766]
            )
            (command.SimpleCommand
              words: [{(rm)} {(-f)} {(/fastboot)} {(/forcefsck)}]
              redirects: [(redir.Redir op:<Redir_Great '2>'> fd:2 arg_word:{(/dev/null)})]
            )
          ]
          spids: [86]
        )
      spids: [81 85]
    )
    (command.Case
      to_match: {(DQ ($ VSub_Number '$1'))}
      arms: [
        (case_arm
          pat_list: [{(start)} {(DQ )}]
          action: [(C {(do_start)})]
          spids: [792 796 802 16777215]
        )
        (case_arm
          pat_list: [{(restart)} {(reload)} {(force-reload)}]
          action: [
            (command.SimpleCommand
              words: [{(echo)} {(DQ ("Error: argument '") ($ VSub_Number '$1') ("' not supported"))}]
              redirects: [(redir.Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})]
            )
            (command.ControlFlow token:<ControlFlow_Exit exit> arg_word:{(3)})
          ]
          spids: [805 810 830 16777215]
        )
        (case_arm pat_list:[{(stop)} {(status)}] spids:[833 836 843 16777215])
        (case_arm
          pat_list: [{(Lit_Other '*')}]
          action: [
            (command.SimpleCommand
              words: [{(echo)} {(DQ ('Usage: checkfs.sh [start|stop]'))}]
              redirects: [(redir.Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})]
            )
            (command.ControlFlow token:<ControlFlow_Exit exit> arg_word:{(3)})
          ]
          spids: [846 847 865 16777215]
        )
      ]
      spids: [783 789 867]
    )
    (C {(Lit_Other ':')})
  ]
)