docs: public static RateLimiter create(double permitsPerSecond, double maxBurstSeconds, boolean filledWithToken)
  			throws ReflectiveOperationException {
  		Class<?> sleepingStopwatchClass = Class
  				.forName("com.google.common.util.concurrent.RateLimiter$SleepingStopwatch");
  		Method createStopwatchMethod = sleepingStopwatchClass.getDeclaredMethod("createFromSystemTimer");
  		createStopwatchMethod.setAccessible(true);
  		Object stopwatch = createStopwatchMethod.invoke(null);
  
  		Class<?> burstyRateLimiterClass = Class
  				.forName("com.google.common.util.concurrent.SmoothRateLimiter$SmoothBursty");
  		Constructor<?> burstyRateLimiterConstructor = burstyRateLimiterClass.getDeclaredConstructors()[0];
  		burstyRateLimiterConstructor.setAccessible(true);
  
  		// set maxBurstSeconds
  		RateLimiter rateLimiter = (RateLimiter) burstyRateLimiterConstructor.newInstance(stopwatch, maxBurstSeconds);
  		rateLimiter.setRate(permitsPerSecond);
  
  		if (filledWithToken) {
  			// set storedPermits
  			setField(rateLimiter, "storedPermits", permitsPerSecond * maxBurstSeconds);
  		}
  
  		return rateLimiter;
  	}