I haven't checked all cases, but at a glance, there's a double check everywhere, and it's possible to determine which bit is corrupted and its actual value.
However, this example turned out to be quite complex. Perhaps someone will find a simpler solution.