code: func GenerateAddress(seed Trytes, index uint64, secLvl SecurityLevel, addChecksum ...bool) (Hash, error) {
  	for len(seed)%81 != 0 {
  		seed += "9"
  	}
  
  	if secLvl == 0 {
  		secLvl = SecurityLevelMedium
  	}
  
  	subseed, err := Subseed(seed, index)
  	if err != nil {
  		return "", err
  	}
  
  	prvKey, err := Key(subseed, secLvl)
  	if err != nil {
  		return "", err
  	}
  
  	digests, err := Digests(prvKey)
  	if err != nil {
  		return "", err
  	}
  
  	addressTrits, err := Address(digests)
  	if err != nil {
  		return "", err
  	}
  
  	address := MustTritsToTrytes(addressTrits)
  
  	if len(addChecksum) > 0 && addChecksum[0] {
  		return checksum.AddChecksum(address, true, 9)
  	}
  
  	return address, nil
  }
docs: // GenerateAddress generates an address deterministically, according to the given seed, index and security level.