(CommandList
  children: [
    (C {(set)} {(-o)} {(errexit)})
    (C {(set)} {(-o)} {(nounset)})
    (C {(set)} {(-o)} {(pipefail)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_ROOT)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [(C {(dirname)} {(DQ (${ VSub_Name BASH_SOURCE))})]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [68 76]
              ) (/..)
            }
          spids: [67]
        )
      ]
      spids: [67]
    )
    (C {(source)} {(DQ (${ VSub_Name KUBE_ROOT) (/hack/lib/init.sh))})
    (C {(kube) (Lit_Other ':') (Lit_Other ':') (golang) (Lit_Other ':') (Lit_Other ':') (setup_env)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:API_REFERENCE_DOCS_ROOT)
          op: Equal
          rhs: {(DQ (${ VSub_Name KUBE_ROOT) (/docs/api-reference))}
          spids: [98]
        )
      ]
      spids: [98]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:OUTPUT_DIR)
          op: Equal
          rhs: {(DQ (${ VSub_Name KUBE_ROOT) (/_tmp/api-reference))}
          spids: [106]
        )
      ]
      spids: [106]
    )
    (C {(mkdir)} {(-p)} {(${ VSub_Name OUTPUT_DIR)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:TMP_ROOT)
          op: Equal
          rhs: {(DQ (${ VSub_Name KUBE_ROOT) (/_tmp))}
          spids: [122]
        )
      ]
      spids: [122]
    )
    (C {(trap)} {(DQ ('rm -rf ') (${ VSub_Name TMP_ROOT))} {(EXIT)} {(SIGINT)})
    (C {(DQ (./hack/update-api-reference-docs.sh))} {(DQ (${ VSub_Name OUTPUT_DIR))})
    (C {(echo)} 
      {(DQ ('diffing ') (${ VSub_Name API_REFERENCE_DOCS_ROOT) (' against freshly generated docs'))}
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:ret) op:Equal rhs:{(0)} spids:[168])]
      spids: [168]
    )
    (AndOr
      children: [
        (C {(diff)} {(-NauprB)} {(-I)} {(SQ <'Last update'>)} 
          {(--exclude) (Lit_Other '=') (Lit_Other '*') (.md)} {(DQ (${ VSub_Name API_REFERENCE_DOCS_ROOT))} {(DQ (${ VSub_Name OUTPUT_DIR))}
        )
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:ret) op:Equal rhs:{($ VSub_QMark '$?')} spids:[200])]
          spids: [200]
        )
      ]
      op_id: Op_DPipe
    )
    (If
      arms: [
        (if_arm
          cond: [
            (DBracket
              expr: (BoolBinary op_id:BoolBinary_eq left:{($ VSub_Name '$ret')} right:{(0)})
            )
          ]
          action: [(C {(echo)} {(DQ (${ VSub_Name API_REFERENCE_DOCS_ROOT) (' up to date.'))})]
          spids: [16777215 215]
        )
      ]
      else_action: [
        (C {(echo)} 
          {
            (DQ (${ VSub_Name API_REFERENCE_DOCS_ROOT) 
              (' is out of date. Please run hack/update-api-reference-docs.sh')
            )
          }
        )
        (C {(exit)} {(1)})
      ]
      spids: [227 244]
    )
  ]
)