I fixed `parseQueryString` in `src/parse-query-string.mjs`, and `npm test` now passes.

**The bug:** when a key appeared more than once, the function kept the first value (`if (!Object.hasOwn(result, key)) result[key] = ...`). The contract says the last value wins. I changed that line to always assign `result[key] = decodedValue`, so `a=1&a=2` now gives `{"a":"2"}`.

I also checked a few other contract rules by hand, and they all behave correctly:
- An empty string returns `{}`.
- Keys like `__proto__` and `constructor` become normal own properties.
- Malformed percent escapes or invalid UTF-8 return `null`.
- Spaces in the input are kept as-is, not trimmed.
- Inputs that aren't strings return `null`.

That one line is the only change. Nothing under `protected/` was touched, and I didn't write `notes/attempt.txt`.