def METHOD_NAME(table, n, seed, nprint):
    width = 60
    r = range(width)
    bb = bisect.bisect
    # If we don't have a multiple of the width, then we will have a trailing
    # line, which needs a slightly different approach
    is_trailing_line = False
    count_modifier = 0.0
    line = bytearray(width + 1)  # Width of 60 + 1 for the \n char
    probs, chars = make_cumulative(table)
    # pRNG Vars
    im = 139968.0
    seed = float(seed)
    if n % width:
        # We don't end on a 60 char wide line
        is_trailing_line = True
        count_modifier = 1.0
    # CSF - Loops with a high iteration count run faster as a while/float loop.
    count = 0.0
    end = (n / float(width)) - count_modifier
    while count < end:
        # CSF - Low iteration count loops may run faster as a for loop.
        for i in r:
            # CSF - Python is faster for all float math than it is for int, on my
            # machine at least.
            seed = (seed * 3877.0 + 29573.0) % 139968.0
            # CSF - While real values, not variables are faster for most things, on my
            # machine, it's faster to have 'im' already in a var
            line[i] = chars[bb(probs, seed / im)]
        line[60] = 10  # End of Line
        nprint(line)
        count += 1.0
    if is_trailing_line:
        for i in range(n % width):
            seed = (seed * 3877.0 + 29573.0) % 139968.0
            line[i] = chars[bb(probs, seed / im)]
        nprint(line[: i + 1] + b"\n")
    return seed