See writeup for more details.