Tracing olivine carbonation and serpentinization in CO2-rich fluids via magnesium exchange and isotopic fractionation