Do not decode to a temporary value

This was originally done to avoid modifying `out` on failure.
Now the value of `out` is undefined if the function fails.
This is more of a foot-gun than before,
but it's faster and cleaner from the hash implemetation's point of view.