code: func ExponentialBackoff(backoff Backoff, condition ConditionFunc) error {
  	duration := backoff.Duration
  	for i := 0; i < backoff.Steps; i++ {
  		if i != 0 {
  			adjusted := duration
  			if backoff.Jitter > 0.0 {
  				adjusted = Jitter(duration, backoff.Jitter)
  			}
  			time.Sleep(adjusted)
  			duration = time.Duration(float64(duration) * backoff.Factor)
  		}
  		if ok, err := condition(); err != nil || ok {
  			return err
  		}
  	}
  	return ErrWaitTimeout
  }
docs: // ExponentialBackoff repeats a condition check up to steps times, increasing the wait
  // by multipling the previous duration by factor. If jitter is greater than zero,
  // a random amount of each duration is added (between duration and duration*(1+jitter)).
  // If the condition never returns true, ErrWaitTimeout is returned. All other errors
  // terminate immediately.