(CommandList
  children: [
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (C {(test)} {(KW_Bang "!")} {(-e)} {(src/google/protobuf/stubs/common.h)})
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[48])
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ 
                        (
"Could not find source code.  Make sure you are running this script from the\n"
                        ) ("root of the distribution tree.\n")
                      )
                    }
                  do_expansion: True
                  here_end: __EOF__
                  was_filled: True
                  spids: [51]
                )
              ]
            )
            (C {(exit)} {(1)})
          ]
          spids: [-1 43]
        )
      ]
      spids: [-1 62]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (C {(test)} {(KW_Bang "!")} {(-e)} {(src/Makefile)})
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[81])
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ("Could not find src/Makefile.  You must run ./configure (and perhaps\n") 
                        ("./autogen.sh) first.\n")
                      )
                    }
                  do_expansion: True
                  here_end: __EOF__
                  was_filled: True
                  spids: [84]
                )
              ]
            )
            (C {(exit)} {(1)})
          ]
          spids: [-1 76]
        )
      ]
      spids: [-1 95]
    )
    (C {(cd)} {(src)})
    (Assignment
      keyword: Assign_Declare
      flags: ["'-a'"]
      pairs: [
        (assign_pair
          lhs: (LhsName name:RUNTIME_PROTO_FILES)
          op: Equal
          rhs: 
            {
              (ArrayLiteralPart
                words: [
                  {(google/protobuf/any.proto)}
                  {(google/protobuf/api.proto)}
                  {(google/protobuf/descriptor.proto)}
                  {(google/protobuf/duration.proto)}
                  {(google/protobuf/empty.proto)}
                  {(google/protobuf/field_mask.proto)}
                  {(google/protobuf/source_context.proto)}
                  {(google/protobuf/struct.proto)}
                  {(google/protobuf/timestamp.proto)}
                  {(google/protobuf/type.proto)}
                  {(google/protobuf/wrappers.proto)}
                ]
              )
            }
          spids: [107]
        )
      ]
      spids: [103]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:CORE_PROTO_IS_CORRECT) op:Equal rhs:{(0)} spids:[155])]
      spids: [155]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:PROCESS_ROUND) op:Equal rhs:{(1)} spids:[158])]
      spids: [158]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:TMP)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(mktemp)} {(-d)})])
                left_token: <Left_CommandSub "$(">
                spids: [162 166]
              )
            }
          spids: [161]
        )
      ]
      spids: [161]
    )
    (C {(echo)} {(DQ ("Updating descriptor protos..."))})
    (While
      cond: [
        (C {(Lit_Other "[")} {($ VSub_Name "$CORE_PROTO_IS_CORRECT")} {(-ne)} {(1)} {(Lit_Other "]")})
      ]
      body: 
        (DoGroup
          children: [
            (C {(echo)} {(DQ ("Round ") ($ VSub_Name "$PROCESS_ROUND"))})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:CORE_PROTO_IS_CORRECT)
                  op: Equal
                  rhs: {(1)}
                  spids: [197]
                )
              ]
              spids: [197]
            )
            (C {(make)} {($ VSub_At "$@")} {(protoc)})
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: (C {(test)} {($ VSub_QMark "$?")} {(-ne)} {(0)})
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [(C {(echo)} {(DQ ("Failed to build protoc."))}) (C {(exit)} {(1)})]
                  spids: [-1 220]
                )
              ]
              spids: [-1 235]
            )
            (AndOr
              children: [
                (C {(./protoc)} 
                  {(--cpp_out) (Lit_Other "=") (Lit_VarLike "dllexport_decl=") (LIBPROTOBUF_EXPORT) 
                    (Lit_Other ":") ($ VSub_Name "$TMP")
                  } 
                  {
                    (BracedVarSub
                      token: <VSub_Name RUNTIME_PROTO_FILES>
                      bracket_op: (WholeArray op_id:Lit_At)
                      spids: [248 253]
                    )
                  }
                )
                (C {(./protoc)} 
                  {(--cpp_out) (Lit_Other "=") (Lit_VarLike "dllexport_decl=") (LIBPROTOC_EXPORT) 
                    (Lit_Other ":") ($ VSub_Name "$TMP")
                  } {(google/protobuf/compiler/plugin.proto)}
                )
              ]
              op_id: Op_DAmp
            )
            (ForEach
              iter_name: PROTO_FILE
              iter_words: [
                {
                  (BracedVarSub
                    token: <VSub_Name RUNTIME_PROTO_FILES>
                    bracket_op: (WholeArray op_id:Lit_At)
                    spids: [278 283]
                  )
                }
              ]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:BASE_NAME)
                          op: Equal
                          rhs: 
                            {
                              (BracedVarSub
                                token: <VSub_Name PROTO_FILE>
                                suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{(".*")})
                                spids: [290 294]
                              )
                            }
                          spids: [289]
                        )
                      ]
                      spids: [289]
                    )
                    (SimpleCommand
                      words: [
                        {(diff)}
                        {(${ VSub_Name BASE_NAME) (.pb.h)}
                        {($ VSub_Name "$TMP") (/) (${ VSub_Name BASE_NAME) (.pb.h)}
                      ]
                      redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[311])]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: (C {(test)} {($ VSub_QMark "$?")} {(-ne)} {(0)})
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:CORE_PROTO_IS_CORRECT)
                                  op: Equal
                                  rhs: {(0)}
                                  spids: [330]
                                )
                              ]
                              spids: [330]
                            )
                          ]
                          spids: [-1 327]
                        )
                      ]
                      spids: [-1 334]
                    )
                    (SimpleCommand
                      words: [
                        {(diff)}
                        {(${ VSub_Name BASE_NAME) (.pb.cc)}
                        {($ VSub_Name "$TMP") (/) (${ VSub_Name BASE_NAME) (.pb.cc)}
                      ]
                      redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[351])]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: (C {(test)} {($ VSub_QMark "$?")} {(-ne)} {(0)})
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:CORE_PROTO_IS_CORRECT)
                                  op: Equal
                                  rhs: {(0)}
                                  spids: [370]
                                )
                              ]
                              spids: [370]
                            )
                          ]
                          spids: [-1 367]
                        )
                      ]
                      spids: [-1 374]
                    )
                  ]
                  spids: [286 377]
                )
              spids: [277 284]
            )
            (SimpleCommand
              words: [
                {(diff)}
                {(google/protobuf/compiler/plugin.pb.h)}
                {($ VSub_Name "$TMP") (/google/protobuf/compiler/plugin.pb.h)}
              ]
              redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[388])]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: (C {(test)} {($ VSub_QMark "$?")} {(-ne)} {(0)})
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:CORE_PROTO_IS_CORRECT)
                          op: Equal
                          rhs: {(0)}
                          spids: [407]
                        )
                      ]
                      spids: [407]
                    )
                  ]
                  spids: [-1 404]
                )
              ]
              spids: [-1 411]
            )
            (SimpleCommand
              words: [
                {(diff)}
                {(google/protobuf/compiler/plugin.pb.cc)}
                {($ VSub_Name "$TMP") (/google/protobuf/compiler/plugin.pb.cc)}
              ]
              redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[421])]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: (C {(test)} {($ VSub_QMark "$?")} {(-ne)} {(0)})
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:CORE_PROTO_IS_CORRECT)
                          op: Equal
                          rhs: {(0)}
                          spids: [440]
                        )
                      ]
                      spids: [440]
                    )
                  ]
                  spids: [-1 437]
                )
              ]
              spids: [-1 444]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other "[")} {($ VSub_Name "$CORE_PROTO_IS_CORRECT")} {(-ne)} {(1)} 
                          {(Lit_Other "]")}
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (ForEach
                      iter_name: PROTO_FILE
                      iter_words: [
                        {
                          (BracedVarSub
                            token: <VSub_Name RUNTIME_PROTO_FILES>
                            bracket_op: (WholeArray op_id:Lit_At)
                            spids: [478 483]
                          )
                        }
                      ]
                      do_arg_iter: False
                      body: 
                        (DoGroup
                          children: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:BASE_NAME)
                                  op: Equal
                                  rhs: 
                                    {
                                      (BracedVarSub
                                        token: <VSub_Name PROTO_FILE>
                                        suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{(".*")})
                                        spids: [490 494]
                                      )
                                    }
                                  spids: [489]
                                )
                              ]
                              spids: [489]
                            )
                            (C {(mv)} {($ VSub_Name "$TMP") (/) (${ VSub_Name BASE_NAME) (.pb.h)} 
                              {(${ VSub_Name BASE_NAME) (.pb.h)}
                            )
                            (C {(mv)} {($ VSub_Name "$TMP") (/) (${ VSub_Name BASE_NAME) (.pb.cc)} 
                              {(${ VSub_Name BASE_NAME) (.pb.cc)}
                            )
                          ]
                          spids: [486 527]
                        )
                      spids: [477 484]
                    )
                    (C {(mv)} 
                      {($ VSub_Name "$TMP") (/google/protobuf/compiler/plugin.pb.) (Lit_Other "*")} {(google/protobuf/compiler/)}
                    )
                  ]
                  spids: [-1 469]
                )
              ]
              spids: [-1 539]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:PROCESS_ROUND)
                  op: Equal
                  rhs: 
                    {
                      (ArithSubPart
                        anode: 
                          (ArithBinary
                            op_id: Arith_Plus
                            left: (ArithVarRef name:PROCESS_ROUND)
                            right: (ArithWord w:{(Lit_Digits 1)})
                          )
                        spids: [544 551]
                      )
                    }
                  spids: [543]
                )
              ]
              spids: [543]
            )
          ]
          spids: [186 553]
        )
    )
    (C {(cd)} {(..)})
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (C {(test)} {(-x)} {(objectivec/generate_well_known_types.sh)})
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (C {(echo)} {(DQ ("Generating messages for objc."))})
            (C {(objectivec/generate_well_known_types.sh)} {($ VSub_At "$@")})
          ]
          spids: [-1 569]
        )
      ]
      spids: [-1 583]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (C {(test)} {(-x)} {(csharp/generate_protos.sh)})
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (C {(echo)} {(DQ ("Generating messages for C#."))})
            (C {(csharp/generate_protos.sh)} {($ VSub_At "$@")})
          ]
          spids: [-1 595]
        )
      ]
      spids: [-1 609]
    )
  ]
)