code: func (bp *BackoffTimeCheck) Ok() bool {
  	if bp.nextTime.IsZero() {
  		bp.nextTime = time.Now().Add(bp.minFrequency)
  		return true
  	}
  	now := time.Now()
  	if now.Before(bp.nextTime) {
  		return false
  	}
  	// If we are already at the max frequency and this call
  	// is made after 2x the max frequency, then auto-reset.
  	if bp.frequency == bp.maxFrequency &&
  		now.Sub(bp.nextTime) >= 2*bp.maxFrequency {
  		bp.Reset()
  		return true
  	}
  	if bp.frequency < bp.maxFrequency {
  		bp.frequency *= time.Duration(bp.factor)
  		if bp.frequency > bp.maxFrequency {
  			bp.frequency = bp.maxFrequency
  		}
  	}
  	bp.nextTime = now.Add(bp.frequency)
  	return true
  }
docs: // Ok returns true for the first time it is invoked after creation of the object
  // or call to Reset(), or after an amount of time (based on the last success
  // and the allowed frequency) has elapsed.
  // When at the maximum frequency, if this call is made after a delay at least
  // equal to 3x the max frequency (or in other words, 2x after what was the target
  // for the next print), then the object is auto-reset.