code: func (m *Multisig) InitiateTransfer(input MultisigInput, transfers bundle.Transfers, remainderAddress *Trytes) (bundle.Bundle, error) {
  	if err := validateMultisigInput(input); err != nil {
  		return nil, err
  	}
  	if err := Validate(ValidateTransfers(transfers...)); err != nil {
  		return nil, err
  	}
  	if remainderAddress != nil {
  		if err := Validate(ValidateHashes(*remainderAddress)); err != nil {
  			return nil, err
  		}
  	}
  
  	for i := range transfers {
  		transfer := &transfers[i]
  		addr, err := checksum.RemoveChecksum(transfer.Address)
  		if err != nil {
  			return nil, err
  		}
  		transfer.Address = addr
  		transfer.Tag = bundle.PadTag(transfer.Tag)
  	}
  
  	if input.Balance > 0 {
  		return createBundle(input, transfers, remainderAddress)
  	}
  	balances, err := m.API.GetBalances(Hashes{input.Address}, 100)
  	if err != nil {
  		return nil, err
  	}
  
  	inputWithBalance := MultisigInput{
  		Balance:     balances.Balances[0],
  		Address:     input.Address,
  		SecuritySum: input.SecuritySum,
  	}
  
  	return createBundle(inputWithBalance, transfers, remainderAddress)
  
  }
docs: // InitiateTransfer prepares a transfer by generating the bundle with the corresponding cosigner transactions.
  // Does not contain signatures.