code: func (p *Provider) Provide(configurationChan chan<- config.Message, pool *safe.Pool) error {
  	ctx := log.With(context.Background(), log.Str(log.ProviderName, "acme"))
  
  	p.pool = pool
  
  	p.watchCertificate(ctx)
  	p.watchNewDomains(ctx)
  
  	p.configurationChan = configurationChan
  	p.refreshCertificates()
  
  	p.deleteUnnecessaryDomains(ctx)
  	for i := 0; i < len(p.Domains); i++ {
  		domain := p.Domains[i]
  		safe.Go(func() {
  			if _, err := p.resolveCertificate(ctx, domain, true); err != nil {
  				log.WithoutContext().WithField(log.ProviderName, "acme").
  					Errorf("Unable to obtain ACME certificate for domains %q : %v", strings.Join(domain.ToStrArray(), ","), err)
  			}
  		})
  	}
  
  	p.renewCertificates(ctx)
  
  	ticker := time.NewTicker(24 * time.Hour)
  	pool.Go(func(stop chan bool) {
  		for {
  			select {
  			case <-ticker.C:
  				p.renewCertificates(ctx)
  			case <-stop:
  				ticker.Stop()
  				return
  			}
  		}
  	})
  
  	return nil
  }
docs: // Provide allows the file provider to provide configurations to traefik
  // using the given Configuration channel.