(command.CommandList
  children: [
    (C {(Id.KW_Set set)} {(-o)} {(errexit)})
    (C {(Id.KW_Set set)} {(-o)} {(nounset)})
    (C {(Id.KW_Set set)} {(-o)} {(pipefail)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:KUBE_ROOT)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:80)
                command_list: 
                  (command.CommandList
                    children: [(C {(dirname)} {(DQ (${ Id.VSub_Name BASH_SOURCE))})]
                  )
              ) (/..)
            }
          spids: [79]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Id.Lit_LBracket '[')} {(-f)} {(DQ (${ Id.VSub_Name KUBE_ROOT) (/cluster/env.sh))} 
                  {(Id.Lit_RBracket ']')}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:106)
            )
          ]
          action: [(C {(source)} {(DQ (${ Id.VSub_Name KUBE_ROOT) (/cluster/env.sh))})]
          spids: [92 108]
        )
      ]
    )
    (C {(source)} {(DQ (${ Id.VSub_Name KUBE_ROOT) (/cluster/kube-util.sh))})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:DEPRECATED_PROVIDERS)
          op: assign_op.Equal
          rhs: 
            {
              (sh_array_literal
                left: (Token id:Id.Op_LParen val:'(' span_id:134)
                words: [
                  {(DQ (centos))}
                  {(DQ (libvert-coreos))}
                  {(DQ (local))}
                  {(DQ (openstack-heat))}
                  {(DQ (photon-controller))}
                  {(DQ (vagrant))}
                  {(DQ (vsphere))}
                  {(DQ (windows))}
                ]
              )
            }
          spids: [133]
        )
      ]
    )
    (command.ForEach
      iter_name: provider
      iter_words: [
        {
          (DQ 
            (braced_var_sub
              token: (Token id:Id.VSub_Name val:DEPRECATED_PROVIDERS span_id:187)
              bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
            )
          )
        }
      ]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DBracket
                          expr: 
                            (bool_expr.Binary
                              op_id: Id.BoolBinary_GlobDEqual
                              left: {(DQ (${ Id.VSub_Name KUBERNETES_PROVIDER))}
                              right: {(DQ (${ Id.VSub_Name provider))}
                            )
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:217)
                    )
                  ]
                  action: [
                    (command.Simple
                      words: [{(cat)}]
                      redirects: [
                        (redir.HereDoc
                          op: (Token id:Id.Redir_DLess val:'<<' span_id:224)
                          fd: -1
                          here_begin: {(EOF)}
                          here_end_span_id: 243
                          stdin_parts: [
                            ('\n')
                            ('!!! DEPRECATION NOTICE !!!\n')
                            ('\n')
                            ("The '")
                            (${ Id.VSub_Name provider)
                            ("' kube-up provider is deprecated and will be removed in a future\n")
                            (
'release of kubernetes. Deprecated providers will be removed within 2 releases.\n'
                            )
                            ('\n')
                            (
'See https://github.com/kubernetes/kubernetes/issues/49213 for more info.\n'
                            )
                            ('\n')
                          ]
                        )
                        (redir.Redir
                          op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:227)
                          fd: 1
                          arg_word: {(2)}
                        )
                      ]
                    )
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Break val:break span_id:245)
                    )
                  ]
                  spids: [198 219]
                )
              ]
            )
          ]
        )
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Id.Lit_LBracket '[')} {(-z)} 
                  {
                    (DQ 
                      (braced_var_sub
                        token: (Token id:Id.VSub_Name val:ZONE span_id:261)
                        suffix_op: (suffix_op.Unary op_id:Id.VTest_Hyphen arg_word:(word.Empty))
                      )
                    )
                  } {(Id.Lit_RBracket ']')}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:267)
            )
          ]
          action: [
            (command.Simple
              words: [
                {(echo)}
                {(DQ ('... Starting cluster using provider: ') (${ Id.VSub_Name KUBERNETES_PROVIDER))}
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:281)
                  fd: -1
                  arg_word: {(2)}
                )
              ]
            )
          ]
          spids: [253 269]
        )
      ]
      else_action: [
        (command.Simple
          words: [
            {(echo)}
            {
              (DQ ('... Starting cluster in ') (${ Id.VSub_Name ZONE) (' using provider ') 
                (${ Id.VSub_Name KUBERNETES_PROVIDER)
              )
            }
          ]
          redirects: [
            (redir.Redir
              op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:300)
              fd: -1
              arg_word: {(2)}
            )
          ]
        )
      ]
    )
    (command.Simple
      words: [{(echo)} {(DQ ('... calling verify-prereqs'))}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_GreatAnd val:'>&' span_id:312) fd:-1 arg_word:{(2)})
      ]
    )
    (C {(verify-prereqs)})
    (command.Simple
      words: [{(echo)} {(DQ ('... calling verify-kube-binaries'))}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_GreatAnd val:'>&' span_id:323) fd:-1 arg_word:{(2)})
      ]
    )
    (C {(verify-kube-binaries)})
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (command.DBracket
                  expr: 
                    (bool_expr.Binary
                      op_id: Id.BoolBinary_GlobDEqual
                      left: 
                        {
                          (DQ 
                            (braced_var_sub
                              token: (Token id:Id.VSub_Name val:KUBE_STAGE_IMAGES span_id:335)
                              suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:(word.Empty))
                            )
                          )
                        }
                      right: {(DQ (true))}
                    )
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:347)
            )
          ]
          action: [
            (command.Simple
              words: [{(echo)} {(DQ ('... staging images'))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:358)
                  fd: -1
                  arg_word: {(2)}
                )
              ]
            )
            (C {(stage-images)})
          ]
          spids: [329 349]
        )
      ]
    )
    (command.Simple
      words: [{(echo)} {(DQ ('... calling kube-up'))}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_GreatAnd val:'>&' span_id:373) fd:-1 arg_word:{(2)})
      ]
    )
    (C {(kube-up)})
    (command.Simple
      words: [{(echo)} {(DQ ('... calling validate-cluster'))}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_GreatAnd val:'>&' span_id:385) fd:-1 arg_word:{(2)})
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp Id.Op_DPipe]
      children: [
        (command.Subshell
          command_list: (command.CommandList children:[(C {(validate-cluster)})])
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:validate_result)
              op: assign_op.Equal
              rhs: {(DQ ($ Id.VSub_QMark '$?'))}
              spids: [397]
            )
          ]
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:validate_result)
              op: assign_op.Equal
              rhs: {(DQ ($ Id.VSub_QMark '$?'))}
              spids: [404]
            )
          ]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (command.DBracket
                  expr: 
                    (bool_expr.Binary
                      op_id: Id.BoolBinary_GlobDEqual
                      left: {(DQ (${ Id.VSub_Name validate_result))}
                      right: {(DQ (1))}
                    )
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:439)
            )
          ]
          action: [
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Exit val:exit span_id:444)
              arg_word: {(1)}
            )
          ]
          spids: [422 441]
        )
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (command.DBracket
                  expr: 
                    (bool_expr.Binary
                      op_id: Id.BoolBinary_GlobDEqual
                      left: {(DQ (${ Id.VSub_Name validate_result))}
                      right: {(DQ (2))}
                    )
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:465)
            )
          ]
          action: [
            (command.Simple
              words: [{(echo)} {(DQ ('...ignoring non-fatal errors in validate-cluster'))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:476)
                  fd: -1
                  arg_word: {(2)}
                )
              ]
            )
          ]
          spids: [448 467]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (command.DBracket
                  expr: 
                    (bool_expr.Binary
                      op_id: Id.BoolBinary_GlobDEqual
                      left: 
                        {
                          (DQ 
                            (braced_var_sub
                              token: (Token id:Id.VSub_Name val:ENABLE_PROXY span_id:488)
                              suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:(word.Empty))
                            )
                          )
                        }
                      right: {(DQ (true))}
                    )
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:500)
            )
          ]
          action: [
            (C {(.)} {(/tmp/kube-proxy-env)})
            (C {(echo)} {(DQ )})
            (C {(echo)} 
              {
                (DQ 
                  (
'*** Please run the following to add the kube-apiserver endpoint to your proxy white-list ***'
                  )
                )
              }
            )
            (C {(cat)} {(/tmp/kube-proxy-env)})
            (C {(echo)} 
              {
                (DQ 
                  (
'***                                                                                      ***'
                  )
                )
              }
            )
            (C {(echo)} {(DQ )})
          ]
          spids: [482 502]
        )
      ]
    )
    (command.Simple
      words: [{(echo)} {(-e)} {(DQ ('Done, listing cluster services:') (Id.Lit_Other '\\') (n))}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_GreatAnd val:'>&' span_id:553) fd:-1 arg_word:{(2)})
      ]
    )
    (C {(DQ (${ Id.VSub_Name KUBE_ROOT) (/cluster/kubectl.sh))} {(cluster-info)})
    (C {(echo)})
    (command.ControlFlow token:(Token id:Id.ControlFlow_Exit val:exit span_id:568) arg_word:{(0)})
  ]
)