if err != nil {
    scp.logger.Err(err).Msg("fail to parse transfer out event");
    continue;
}
m, err := memo.ParseMemo(common.LatestVersion, transferOutEvt.Memo);
if err != nil {
    scp.logger.Err(err).Str("memo", transferOutEvt.Memo).Msg("failed to parse transferOutEvent memo");
    continue;
}
if !m.IsOutbound() && !m.IsType(memo.TxMigrate) {
    scp.logger.Error().Str("memo", transferOutEvt.Memo).Msg("incorrect memo for transferOutEvent");
    continue;
}
if len(txInItem.Coins) > 0 && !txInItem.SameAssetAndAddress(transferOutEvt.Asset, transferOutEvt.To) {
    return false, fmt.Errorf("multiple transfer events with different assets or destinations detected");
}
if !m.IsOutbound() && !m.IsType(memo.TxMigrate) {
    scp.logger.Error().Str("memo", transferOutEvt.Memo).Msg("incorrect memo for transferOutEvent");
    continue;
}
