docs: private SICoreConnection remoteBootstrap(CredentialType credentialType, ClientAttachProperties cap)
                      throws SIAuthenticationException, SIErrorException, SIIncorrectCallException, SINotAuthorizedException, SINotPossibleInCurrentConfigurationException, SIResourceException {
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(tc, "remoteBootstrap", new Object[] { credentialType, cap });
  
          SICoreConnection sc = null;
  
          ClientConnectionFactory ccf = CommonServiceFacade.getClientConnectionFactory();
  
          if (ccf == null) {
              throw new SIErrorException(nls.getString("NO_CCF_CWSIT0004"));
          }
  
          // contact bootstrap service
          ContactBootstrapServiceResponse cbsr = contactBootstrapService(credentialType, cap, ccf);
  
          // process bootstrap reply
          ClientConnection cc = cbsr.getClientConnection();
          TrmClientBootstrapReply cbr = cbsr.getClientBootstrapReply();
          int rc = cbsr.getReturnCode();
          boolean goodReply = cbsr.isGoodReply();
          ProviderEndPoint ep = cbsr.getEndPoint();
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
              SibTr.debug(tc, "cc=" + cc + ", cbr=" + cbr + ", rc=" + rc + ", goodReply=" + goodReply + ", ep=" + ep.getEndPointInfo());
  
          if (goodReply) { //250165
              if (rc == TrmConstantsImpl.RETURN_CODE_OK) {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                      SibTr.debug(tc, "Staying with bootstrap messaging engine");
  
                  sc = cc.getSICoreConnection();
  
              } else {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                      SibTr.debug(tc, "*** shouldn't ever get here!"); //250165
              }
          } else {
              List uncontactableBootstrapServers = cbsr.getUncontactableBootstrapServers();
              List failedBootstrapServers = cbsr.getFailedBootstrapServers();
              Exception firstMirroredFailureException = cbsr.getFirstMirroredFailureException();
              Exception firstBootstrapFailureException = cbsr.getFirstBootstrapFailureException();
  
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                  SibTr.debug(tc, "uncontactableBootstrapServers=" + uncontactableBootstrapServers +
                                  ", failedBootstrapServers=" + failedBootstrapServers +
                                  ", firstMirroredFailureException=" + firstMirroredFailureException +
                                  ", firstBootstrapFailureException=" + firstBootstrapFailureException);
  
              if (null != firstMirroredFailureException) {
                  if (firstMirroredFailureException instanceof SIAuthenticationException) {
                      // authentication with the bootstrap server failed
                      throw (SIAuthenticationException) firstMirroredFailureException;
                  } else if (firstMirroredFailureException instanceof SINotAuthorizedException) {
                      // not authorised to use the bootstrap server
                      throw (SINotAuthorizedException) firstMirroredFailureException;
                  } else {
                      // we successfully connected to a bootstrap server but got an error
                      generateException(getRC(firstMirroredFailureException),
                                        nls.getFormattedMessage("LIBERTY_BOOTSTRAP_FAILURE_CWSIT0126", new Object[] {
                                                                                                                     failedBootstrapServers.get(0).toString(),
                                                                                                                     Utils.getFailureMessage(cbr.getFailureReason()) }, null),
                                        firstMirroredFailureException, true);
                  }
              } else {
                  // none of the specified bootstrap endpoints could be contacted
                  generateException(getRC(firstBootstrapFailureException),
                                    nls.getFormattedMessage("LIBERTY_NO_BOOTSTRAP_CWSIT0127",
                                                            new Object[] { uncontactableBootstrapServers.toString() },
                                                            null), firstBootstrapFailureException, true);
              }
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.exit(tc, "remoteBootstrap", sc);
          return sc;
      }