How this tool computes its result
Parses multi-line input matching the regex `^HTTP/[0-9.]+s+(d{3})(?:s+(.*))?$` to extract HTTP status codes and reason phrases. After each status line, subsequent lines matching `KEY: VALUE` format are captured as headers. The Location header (case-insensitive match) is extracted separately. Hops are numbered in order; each hop object stores status, reason, location (if present), and a headers dict. Warnings fire if no status lines are found, or if any redirect status (300-399) lacks a Location header.
