def METHOD_NAME(self, src: bytes) -> tuple[GoCoverageBoundary, ...]:
    max_count = 0
    for block in self.blocks:
        if block.count > max_count:
            max_count = block.count
    # Note: Python throws ValueError if max_count == 0
    divisor = math.log(max_count) if max_count > 0 else 0
    index = 0
    def boundary(offset: int, start: bool, count: int) -> GoCoverageBoundary:
        nonlocal index, max_count
        b = GoCoverageBoundary(offset=offset, start=start, count=count, norm=0.0, index=index)
        index = index + 1
        if not start or count == 0:
            return b
        new_norm = None
        if max_count <= 1:
            new_norm = 0.8  # Profile is in "set" mode; we want a heat map. Use cov8 in the CSS.
        elif count > 0:
            # Divide by zero avoided since divisor > 0 if max_count > 1.
            # TODO: What if max_count == 1 so divisor == 0?
            new_norm = math.log(count) / divisor
        if new_norm is not None:
            b = dataclasses.replace(b, norm=new_norm)
        return b
    line, col = 1, 2  # TODO: Why is this 2?
    si, bi = 0, 0
    METHOD_NAME = []
    while si < len(src) and bi < len(self.blocks):
        b = self.blocks[bi]
        if b.start_line == line and b.start_col == col:
            METHOD_NAME.append(boundary(si, True, b.count))
        if b.end_line == line and b.end_col == col or line > b.end_line:
            METHOD_NAME.append(boundary(si, False, 0))
            bi += 1
            continue  # Don't advance through src; maybe the next block starts here.
        if src[si] == ord("\n"):
            line += 1
            col = 0
        col += 1
        si += 1
    METHOD_NAME.sort(key=lambda b: (b.offset, b.index))
    return tuple(METHOD_NAME)