```python
def parse_option(segment: str) -> list:
    key, value = segment.split('=', 1)
    if not re.match(r'^[a-zA-Z][a-zA-Z0-9_]*$', key):
        raise ValueError("Invalid key")
    if value.startswith('"') and not value.endswith('"'):
        raise ValueError("Unterminated quote")
    return [key, value.strip('"')]


def scan_pairs(text: str) -> list:
    if not isinstance(text, str) or text == "":
        raise ValueError("Invalid input")

    pairs = []
    in_quotes = False
    current_segment = ""
    for char in text:
        if char == '"' and not in_quotes:
            in_quotes = True
        elif char == '"' and in_quotes:
            in_quotes = False
        elif char == ';' and not in_quotes:
            parsed_pair = parse_option(current_segment.strip())
            if parsed_pair[0] in [pair[0] for pair in pairs]:
                raise ValueError("Repeated key")
            pairs.append(parsed_pair)
            current_segment = ""
        else:
            current_segment += char

    if current_segment.strip() != "":
        parsed_pair = parse_option(current_segment.strip())
        if parsed_pair[0] in [pair[0] for pair in pairs]:
            raise ValueError("Repeated key")
        pairs.append(parsed_pair)

    return pairs
```