docs: protected ConfiguredCloseableHttpClient createClient(
              final org.apache.http.impl.client.HttpClientBuilder builder,
              final InstrumentedHttpClientConnectionManager manager,
              final String name) {
          final String cookiePolicy = configuration.isCookiesEnabled() ? CookieSpecs.DEFAULT : CookieSpecs.IGNORE_COOKIES;
          final Integer timeout = (int) configuration.getTimeout().toMilliseconds();
          final Integer connectionTimeout = (int) configuration.getConnectionTimeout().toMilliseconds();
          final Integer connectionRequestTimeout = (int) configuration.getConnectionRequestTimeout().toMilliseconds();
          final long keepAlive = configuration.getKeepAlive().toMilliseconds();
          final ConnectionReuseStrategy reuseStrategy = keepAlive == 0
                  ? new NoConnectionReuseStrategy()
                  : new DefaultConnectionReuseStrategy();
          final HttpRequestRetryHandler retryHandler = configuration.getRetries() == 0
                  ? NO_RETRIES
                  : (httpRequestRetryHandler == null ? new DefaultHttpRequestRetryHandler(configuration.getRetries(),
                  false) : httpRequestRetryHandler);
  
          final RequestConfig requestConfig
                  = RequestConfig.custom().setCookieSpec(cookiePolicy)
                  .setSocketTimeout(timeout)
                  .setConnectTimeout(connectionTimeout)
                  .setConnectionRequestTimeout(connectionRequestTimeout)
                  .build();
          final SocketConfig socketConfig = SocketConfig.custom()
                  .setTcpNoDelay(true)
                  .setSoTimeout(timeout)
                  .build();
  
          customizeBuilder(builder)
                  .setRequestExecutor(new InstrumentedHttpRequestExecutor(metricRegistry, metricNameStrategy, name))
                  .setConnectionManager(manager)
                  .setDefaultRequestConfig(requestConfig)
                  .setDefaultSocketConfig(socketConfig)
                  .setConnectionReuseStrategy(reuseStrategy)
                  .setRetryHandler(retryHandler)
                  .setUserAgent(createUserAgent(name));
  
          if (keepAlive != 0) {
              // either keep alive based on response header Keep-Alive,
              // or if the server can keep a persistent connection (-1), then override based on client's configuration
              builder.setKeepAliveStrategy(new DefaultConnectionKeepAliveStrategy() {
                  @Override
                  public long getKeepAliveDuration(HttpResponse response, HttpContext context) {
                      final long duration = super.getKeepAliveDuration(response, context);
                      return (duration == -1) ? keepAlive : duration;
                  }
              });
          }
  
          // create a tunnel through a proxy host if it's specified in the config
          final ProxyConfiguration proxy = configuration.getProxyConfiguration();
          if (proxy != null) {
              final HttpHost httpHost = new HttpHost(proxy.getHost(), proxy.getPort(), proxy.getScheme());
              builder.setRoutePlanner(new NonProxyListProxyRoutePlanner(httpHost, proxy.getNonProxyHosts()));
              // if the proxy host requires authentication then add the host credentials to the credentials provider
              final AuthConfiguration auth = proxy.getAuth();
              if (auth != null) {
                  if (credentialsProvider == null) {
                      credentialsProvider = new BasicCredentialsProvider();
                  }
                  // set the AuthScope
                  AuthScope authScope = new AuthScope(httpHost, auth.getRealm(), auth.getAuthScheme());
  
                  // set the credentials type
                  Credentials credentials = configureCredentials(auth);
  
                  credentialsProvider.setCredentials(authScope, credentials);
              }
          }
  
  
          if (credentialsProvider != null) {
              builder.setDefaultCredentialsProvider(credentialsProvider);
          }
  
          if (routePlanner != null) {
              builder.setRoutePlanner(routePlanner);
          }
  
          if (disableContentCompression) {
              builder.disableContentCompression();
          }
  
          if (redirectStrategy != null) {
              builder.setRedirectStrategy(redirectStrategy);
          }
  
          if (defaultHeaders != null) {
              builder.setDefaultHeaders(defaultHeaders);
          }
  
          if (verifier != null) {
              builder.setSSLHostnameVerifier(verifier);
          }
  
          if (httpProcessor != null) {
              builder.setHttpProcessor(httpProcessor);
          }
  
          if (serviceUnavailableRetryStrategy != null) {
              builder.setServiceUnavailableRetryStrategy(serviceUnavailableRetryStrategy);
          }
  
          return new ConfiguredCloseableHttpClient(builder.build(), requestConfig);
      }