code: func (cl *Client) AddTorrentSpec(spec *TorrentSpec) (t *Torrent, new bool, err error) {
  	t, new = cl.AddTorrentInfoHashWithStorage(spec.InfoHash, spec.Storage)
  	if spec.DisplayName != "" {
  		t.SetDisplayName(spec.DisplayName)
  	}
  	if spec.InfoBytes != nil {
  		err = t.SetInfoBytes(spec.InfoBytes)
  		if err != nil {
  			return
  		}
  	}
  	cl.lock()
  	defer cl.unlock()
  	if spec.ChunkSize != 0 {
  		t.setChunkSize(pp.Integer(spec.ChunkSize))
  	}
  	t.addTrackers(spec.Trackers)
  	t.maybeNewConns()
  	return
  }
docs: // Add or merge a torrent spec. If the torrent is already present, the
  // trackers will be merged with the existing ones. If the Info isn't yet
  // known, it will be set. The display name is replaced if the new spec
  // provides one. Returns new if the torrent wasn't already in the client.
  // Note that any `Storage` defined on the spec will be ignored if the
  // torrent is already present (i.e. `new` return value is `true`)