$ od -c -N 50000 [Indigo]<XPort>CRuntime>Private>BWSMStreamImpl.mesa!1
0000000    -   -       C   o   p   y   r   i   g   h   t       (   C   )
0000020        1   9   8   3   ,       1   9   8   4           b   y    
0000040    X   e   r   o   x       C   o   r   p   o   r   a   t   i   o
0000060    n   .       A   l   l       r   i   g   h   t   s       r   e
0000100    s   e   r   v   e   d   .      \r   -   -       B   W   S   M
0000120    S   t   r   e   a   m   I   m   p   l   .   m   e   s   a    
0000140        L   a   s   t       e   d   i   t   e   d       b   y  \r
0000160    -   -       P   X   K                   ,  \t   2   7   -   J
0000200    a   n   -   8   4       1   3   :   5   4   :   4   3  \r   -
0000220    -       L   X   R                   ,  \t       9   -   J   a
0000240    n   -   8   4       1   2   :   1   9   :   2   2  \r   -   -
0000260        R   X   J                       ,  \t   2   1   -   D   e
0000300    c   -   8   3           9   :   1   9   :   3   2  \r   -   -
0000320        D   W   E                   ,  \t   2   8   -   J   u   l
0000340    -   8   3       1   4   :   1   2   :   4   3  \r   -   -    
0000360    B   G   Y                       ,  \t   1   5   -   A   u   g
0000400    -   8   4       1   4   :   0   8   :   3   2  \r   -   -    
0000420    M   E   W  \t  \t   2   3   -   M   a   y   -   8   6       1
0000440    0   :   2   3   :   0   2  \r  \r   D   I   R   E   C   T   O
0000460    R   Y  \r           B   y   t   e   B   l   t       U   S   I
0000500    N   G       [   B   y   t   e   B   l   t   ]   ,  \r        
0000520    E   n   v   i   r   o   n   m   e   n   t       U   S   I   N
0000540    G       [   B   l   o   c   k   ,       B   y   t   e   ,    
0000560    b   y   t   e   s   P   e   r   P   a   g   e   ,       P   a
0000600    g   e   C   o   u   n   t   ]   ,  \r           F   i   l   e
0000620        U   S   I   N   G       [   F   i   l   e   ,       G   e
0000640    t   S   i   z   e   ,       n   u   l   l   F   i   l   e   ,
0000660        P   a   g   e   C   o   u   n   t   ,       P   a   g   e
0000700    N   u   m   b   e   r   ]   ,  \r           H   e   a   p    
0000720    U   S   I   N   G       [   C   r   e   a   t   e   U   n   i
0000740    f   o   r   m   ]   ,  \r           I   n   l   i   n   e    
0000760    U   S   I   N   G       [   H   i   g   h   H   a   l   f   ,
0001000        L   o   n   g   C   O   P   Y   ,       L   o   n   g   D
0001020    i   v   ,       L   o   n   g   D   i   v   M   o   d   ,    
0001040    L   o   n   g   M   u   l   t   ,       L   o   w   H   a   l
0001060    f   ]   ,  \r           M   F   i   l   e       U   S   I   N
0001100    G       [  \r                   A   c   c   e   s   s   ,    
0001120    A   c   q   u   i   r   e   ,       B   y   t   e   C   o   u
0001140    n   t   ,       d   o   n   t   C   a   r   e   ,       E   r
0001160    r   o   r   ,       G   e   t   A   c   c   e   s   s   ,    
0001200    G   e   t   L   e   n   g   t   h   ,       H   a   n   d   l
0001220    e   ,  \r                   O   b   j   e   c   t   ,       P
0001240    l   e   a   s   e   R   e   l   e   a   s   e   P   r   o   c
0001260    ,       R   e   l   e   a   s   e   ,       R   e   l   e   a
0001300    s   e   C   h   o   i   c   e   ,       R   e   l   e   a   s
0001320    e   D   a   t   a   ,      \r                   S   e   t   A
0001340    c   c   e   s   s   ,       S   e   t   R   e   l   e   a   s
0001360    e   D   a   t   a   ,       S   e   t   L   e   n   g   t   h
0001400    ,       T   y   p   e   ]   ,  \r           M   F   i   l   e
0001420    O   p   s   ,  \r           M   S   t   r   e   a   m       U
0001440    S   I   N   G       [   E   r   r   o   r   C   o   d   e   ,
0001460        R   e   l   e   a   s   e   D   a   t   a   ,       H   a
0001500    n   d   l   e   ,       P   l   e   a   s   e   R   e   l   e
0001520    a   s   e   P   r   o   c   ]   ,  \r           B   W   S   M
0001540    S   t   r   e   a   m   O   p   s       U   S   I   N   G    
0001560    [   H   a   n   d   l   e   ,       m   S   t   r   e   a   m
0001600    P   a   s   s   w   o   r   d   ,       M   y   H   a   n   d
0001620    l   e   ,       O   b   j   e   c   t   ,       S   t   r   e
0001640    a   m   O   b   j   e   c   t   ]   ,  \r           M   U   s
0001660    a   g   e       U   S   I   N   G       [   m   F   i   l   e
0001700    L   o   c   a   l   S   t   r   e   a   m   ]   ,  \r        
0001720    S   p   a   c   e       U   S   I   N   G       [  \r        
0001740            A   l   l   o   c   a   t   e   ,       D   e   a   l
0001760    l   o   c   a   t   e   ,       F   o   r   c   e   O   u   t
0002000    ,       I   n   t   e   r   v   a   l   ,       M   a   k   e
0002020    R   e   a   d   O   n   l   y   ,       M   a   k   e   W   r
0002040    i   t   a   b   l   e   ,      \r                   M   a   p
0002060    A   t   ,       U   n   m   a   p   A   t   ]   ,  \r        
0002100    S   p   e   c   i   a   l   M   F   i   l   e       U   S   I
0002120    N   G       [   G   e   t   C   a   p   a   W   i   t   h   A
0002140    c   c   e   s   s   ]   ,  \r           S   t   r   e   a   m
0002160        U   S   I   N   G       [  \r                   B   l   o
0002200    c   k   ,       B   y   t   e   ,       C   o   m   p   l   e
0002220    t   i   o   n   C   o   d   e   ,       d   e   f   a   u   l
0002240    t   I   n   p   u   t   O   p   t   i   o   n   s   ,       E
0002260    n   d   O   f   S   t   r   e   a   m   ,  \r                
0002300    G   e   t   P   o   s   i   t   i   o   n   P   r   o   c   e
0002320    d   u   r   e   ,       G   e   t   P   r   o   c   e   d   u
0002340    r   e   ,       H   a   n   d   l   e   ,       I   n   p   u
0002360    t   O   p   t   i   o   n   s   ,       O   b   j   e   c   t
0002400    ,  \r                   P   u   t   B   y   t   e   P   r   o
0002420    c   e   d   u   r   e   ,       P   u   t   P   r   o   c   e
0002440    d   u   r   e   ,       P   u   t   W   o   r   d   P   r   o
0002460    c   e   d   u   r   e   ,       S   e   n   d   A   t   t   e
0002500    n   t   i   o   n   P   r   o   c   e   d   u   r   e   ,  \r
0002520                    S   e   n   d   N   o   w   P   r   o   c   e
0002540    d   u   r   e   ,       S   e   t   P   o   s   i   t   i   o
0002560    n   P   r   o   c   e   d   u   r   e   ,       S   e   t   S
0002600    S   T   P   r   o   c   e   d   u   r   e   ,  \r            
0002620        W   a   i   t   A   t   t   e   n   t   i   o   n   P   r
0002640    o   c   e   d   u   r   e   ]   ;  \r  \r   B   W   S   M   S
0002660    t   r   e   a   m   I   m   p   l   :       M   O   N   I   T
0002700    O   R       L   O   C   K   S       s   t   r   e   a   m   H
0002720    a   n   d   l   e   .   l   o   c   k       U   S   I   N   G
0002740        s   t   r   e   a   m   H   a   n   d   l   e   :       H
0002760    a   n   d   l   e  \r           I   M   P   O   R   T   S  \r
0003000                    B   y   t   e   B   l   t   ,       F   i   l
0003020    e   ,       H   e   a   p   ,       I   n   l   i   n   e   ,
0003040        M   F   i   l   e   ,       M   F   i   l   e   O   p   s
0003060    ,       S   p   a   c   e   ,       S   p   e   c   i   a   l
0003100    M   F   i   l   e   ,       S   t   r   e   a   m  \r        
0003120    E   X   P   O   R   T   S       M   S   t   r   e   a   m   ,
0003140        B   W   S   M   S   t   r   e   a   m   O   p   s  \r    
0003160        S   H   A   R   E   S       F   i   l   e       =  \r    
0003200        B   E   G   I   N  \r  \r           -   -       T   y   p
0003220    e   s   :  \r          \r           F   H   a   n   d   l   e
0003240    :       T   Y   P   E       =       M   F   i   l   e   .   H
0003260    a   n   d   l   e   ;  \r           H   a   n   d   l   e   :
0003300        T   Y   P   E       =       B   W   S   M   S   t   r   e
0003320    a   m   O   p   s   .   H   a   n   d   l   e   ;  \r        
0003340    M   y   H   a   n   d   l   e   :       T   Y   P   E       =
0003360        B   W   S   M   S   t   r   e   a   m   O   p   s   .   M
0003400    y   H   a   n   d   l   e   ;  \r           S   t   r   e   a
0003420    m   O   b   j   e   c   t   :       T   Y   P   E       =    
0003440    B   W   S   M   S   t   r   e   a   m   O   p   s   .   S   t
0003460    r   e   a   m   O   b   j   e   c   t   ;  \r           O   b
0003500    j   e   c   t   :       T   Y   P   E       =       B   W   S
0003520    M   S   t   r   e   a   m   O   p   s   .   O   b   j   e   c
0003540    t   ;  \r  \r           h   e   a   p   :       U   N   C   O
0003560    U   N   T   E   D       Z   O   N   E       =       H   e   a
0003600    p   .   C   r   e   a   t   e   U   n   i   f   o   r   m   [
0003620   \r                   i   n   i   t   i   a   l   :       2   ,
0003640        o   b   j   e   c   t   S   i   z   e   :       S   I   Z
0003660    E   [   S   t   r   e   a   m   O   b   j   e   c   t   ]   ]
0003700    ;  \r           R   e   l   e   a   s   e   D   a   t   a   :
0003720        T   Y   P   E       =       M   S   t   r   e   a   m   .
0003740    R   e   l   e   a   s   e   D   a   t   a   ;  \r           l
0003760    e   a   d   e   r   P   a   g   e   s   :       C   A   R   D
0004000    I   N   A   L       =       1   ;  \r          \r           E
0004020    r   r   o   r   :       P   U   B   L   I   C       E   R   R
0004040    O   R       [  \r                   s   t   r   e   a   m   :
0004060        S   t   r   e   a   m   .   H   a   n   d   l   e   ,    
0004100    c   o   d   e   :       M   S   t   r   e   a   m   .   E   r
0004120    r   o   r   C   o   d   e   ]       =       C   O   D   E   ;
0004140   \r          \r           -   -       O   p   e   r   a   t   i
0004160    o   n   s   :  \r  \r           b   y   t   e   s   P   e   r
0004200    P   a   g   e   :       C   A   R   D   I   N   A   L       =
0004220        E   n   v   i   r   o   n   m   e   n   t   .   b   y   t
0004240    e   s   P   e   r   P   a   g   e   ;  \r  \r           C   o
0004260    n   v   e   r   t   H   a   n   d   l   e   :       P   U   B
0004300    L   I   C       P   R   O   C   E   D   U   R   E       [   s
0004320    t   r   e   a   m   :       S   t   r   e   a   m   .   H   a
0004340    n   d   l   e   ]       R   E   T   U   R   N   S       [   M
0004360    y   H   a   n   d   l   e   ]       =       {  \r            
0004400        R   E   T   U   R   N   [   C   o   n   v   e   r   t   H
0004420    a   n   d   l   e   I   n   l   i   n   e   [   s   t   r   e
0004440    a   m   ]   ]   }   ;  \r  \r           C   o   n   v   e   r
0004460    t   H   a   n   d   l   e   I   n   l   i   n   e   :       P
0004500    R   O   C   E   D   U   R   E       [   s   t   r   e   a   m
0004520    :       S   t   r   e   a   m   .   H   a   n   d   l   e   ]
0004540        R   E   T   U   R   N   S       [   M   y   H   a   n   d
0004560    l   e   ]       =       I   N   L   I   N   E       {  \r    
0004600                R   E   T   U   R   N   [   @   L   O   O   P   H
0004620    O   L   E   [   s   t   r   e   a   m   ,       H   a   n   d
0004640    l   e   ]   .   o   b   j   e   c   t   ]   }   ;  \r  \r    
0004660        V   a   l   i   d   a   t   e   H   a   n   d   l   e   :
0004700        P   R   O   C   E   D   U   R   E       [   s   t   r   e
0004720    a   m   :       S   t   r   e   a   m   .   H   a   n   d   l
0004740    e   ]       R   E   T   U   R   N   S       [   h   :       M
0004760    y   H   a   n   d   l   e   ]       =       {  \r            
0005000        I   F       s   t   r   e   a   m       =       N   I   L
0005020        T   H   E   N       E   R   R   O   R       E   r   r   o
0005040    r   [   s   t   r   e   a   m   ,       i   n   v   a   l   i
0005060    d   H   a   n   d   l   e   ]   ;  \r                   h    
0005100  254       C   o   n   v   e   r   t   H   a   n   d   l   e   I
0005120    n   l   i   n   e   [   s   t   r   e   a   m   ]   ;  \r    
0005140                I   F       s   t   r   e   a   m   .   g   e   t
0005160    P   o   s   i   t   i   o   n       #       G   e   t   I   n
0005200    d   e   x       O   R       h   .   p   a   s   s   w   o   r
0005220    d       #       B   W   S   M   S   t   r   e   a   m   O   p
0005240    s   .   m   S   t   r   e   a   m   P   a   s   s   w   o   r
0005260    d       T   H   E   N  \r                           E   R   R
0005300    O   R       E   r   r   o   r   [   s   t   r   e   a   m   ,
0005320        i   n   v   a   l   i   d   H   a   n   d   l   e   ]   }
0005340    ;  \r  \r           I   s   I   t   :       P   U   B   L   I
0005360    C       P   R   O   C   E   D   U   R   E       [   s   t   r
0005400    e   a   m   :       S   t   r   e   a   m   .   H   a   n   d
0005420    l   e   ]       R   E   T   U   R   N   S       [   i   s   i
0005440    t   :       B   O   O   L   E   A   N     254       T   R   U
0005460    E   ]       =       {  \r                   [   ]     254    
0005500    V   a   l   i   d   a   t   e   H   a   n   d   l   e   [   s
0005520    t   r   e   a   m       !       E   r   r   o   r       =   >
0005540        {   i   s   i   t     254       F   A   L   S   E   ;    
0005560    C   O   N   T   I   N   U   E   }   ]   }   ;  \r  \r        
0005600    C   r   e   a   t   e   :       P   U   B   L   I   C       P
0005620    R   O   C   E   D   U   R   E       [  \r                   f
0005640    i   l   e   :       F   H   a   n   d   l   e   ,       r   e
0005660    l   e   a   s   e   :       R   e   l   e   a   s   e   D   a
0005700    t   a   ,  \r                   o   p   t   i   o   n   s   :
0005720        S   t   r   e   a   m   .   I   n   p   u   t   O   p   t
0005740    i   o   n   s     254       S   t   r   e   a   m   .   d   e
0005760    f   a   u   l   t   I   n   p   u   t   O   p   t   i   o   n
0006000    s   ,  \r                   s   t   r   e   a   m   B   a   s
0006020    e   :       F   i   l   e   .   P   a   g   e   N   u   m   b
0006040    e   r     254       0   ]  \r                   R   E   T   U
0006060    R   N   S       [   s   t   r   e   a   m   :       S   t   r
0006100    e   a   m   .   H   a   n   d   l   e   ]       =  \r        
0006120            B   E   G   I   N  \r                   h   :       H
0006140    a   n   d   l   e   ;  \r                   c   a   p   a   b
0006160    i   l   i   t   y   :       F   i   l   e   .   F   i   l   e
0006200      254       F   i   l   e   .   n   u   l   l   F   i   l   e
0006220    ;  \r                   r   e   a   d   ,       w   r   i   t
0006240    e   ,       s   h   r   i   n   k   :       B   O   O   L   E
0006260    A   N     254       F   A   L   S   E   ;  \r                
0006300    f   i   l   e   P   a   g   e   s   :       F   i   l   e   .
0006320    P   a   g   e   C   o   u   n   t   ;  \r                   l
0006340    e   n   g   t   h   :       L   O   N   G       C   A   R   D
0006360    I   N   A   L   ;  \r                   s   e   t   L   e   n
0006400    g   t   h   :       B   O   O   L   E   A   N     254       F
0006420    A   L   S   E   ;  \r                   l   e   n   g   t   h
0006440      254       M   F   i   l   e   .   G   e   t   L   e   n   g
0006460    t   h   [   f   i   l   e   !       M   F   i   l   e   .   E
0006500    r   r   o   r       =   >       E   r   r   o   r   [   N   I
0006520    L   ,       i   n   v   a   l   i   d   F   i   l   e   ]   ]
0006540    ;  \r                   c   a   p   a   b   i   l   i   t   y
0006560      254       S   p   e   c   i   a   l   M   F   i   l   e   .
0006600    G   e   t   C   a   p   a   W   i   t   h   A   c   c   e   s
0006620    s   [   f   i   l   e       !  \r                           M
0006640    F   i   l   e   .   E   r   r   o   r       =   >       E   r
0006660    r   o   r   [   N   I   L   ,       i   n   v   a   l   i   d
0006700    F   i   l   e   ]   ]   ;  \r                   f   i   l   e
0006720    P   a   g   e   s     254       F   i   l   e   .   G   e   t
0006740    S   i   z   e   [   c   a   p   a   b   i   l   i   t   y   ]
0006760        -       (   l   e   a   d   e   r   P   a   g   e   s    
0007000    +       s   t   r   e   a   m   B   a   s   e   )   ;  \r    
0007020                I   F       I   n   l   i   n   e   .   H   i   g
0007040    h   H   a   l   f   [   f   i   l   e   P   a   g   e   s   ]
0007060        #       0       T   H   E   N       E   R   R   O   R    
0007100    E   r   r   o   r   [   N   I   L   ,       f   i   l   e   T
0007120    o   o   L   o   n   g   ]   ;  \r                   S   E   L
0007140    E   C   T       M   F   i   l   e   .   G   e   t   A   c   c
0007160    e   s   s   [   f   i   l   e   ]       F   R   O   M  \r    
0007200                        w   r   i   t   e   O   n   l   y       =
0007220    >       w   r   i   t   e     254       s   h   r   i   n   k
0007240      254       T   R   U   E   ;  \r                           l
0007260    o   g       =   >       s   e   t   L   e   n   g   t   h    
0007300  254       w   r   i   t   e     254       r   e   a   d     254
0007320        T   R   U   E   ;  \r                           r   e   a
0007340    d   W   r   i   t   e       =   >       w   r   i   t   e    
0007360  254       r   e   a   d     254       s   h   r   i   n   k    
0007400  254       T   R   U   E   ;  \r                           r   e
0007420    a   d   O   n   l   y       =   >       r   e   a   d     254
0007440        T   R   U   E   ;  \r                           E   N   D
0007460    C   A   S   E   ;  \r                   h     254       h   e
0007500    a   p   .   N   E   W   [   S   t   r   e   a   m   O   b   j
0007520    e   c   t     254       [  \r                           s   t
0007540    r   e   a   m   :       [  \r                                
0007560    g   e   t   B   y   t   e   :       G   e   t   B   y   t   e
0007600    ,  \r                                   p   u   t   B   y   t
0007620    e   :       P   u   t   B   y   t   e   ,  \r                
0007640                    g   e   t   W   o   r   d   :       G   e   t
0007660    W   o   r   d   ,  \r                                   p   u
0007700    t   W   o   r   d   :       P   u   t   W   o   r   d   ,  \r
0007720                                    g   e   t   :       G   e   t
0007740    B   l   o   c   k   ,  \r                                   p
0007760    u   t   :       P   u   t   B   l   o   c   k   ,  \r        
0010000                            d   e   l   e   t   e   :       D   e
0010020    l   e   t   e   ,  \r                                   s   e
0010040    t   S   S   T   :       S   e   t   S   S   T   N   o   p   ,
0010060   \r                                   s   e   n   d   A   t   t
0010100    e   n   t   i   o   n   :       S   e   n   d   A   t   t   e
0010120    n   t   i   o   n   N   o   p   ,  \r                        
0010140            w   a   i   t   A   t   t   e   n   t   i   o   n   :
0010160        W   a   i   t   A   t   t   e   n   t   i   o   n   N   o
0010200    p   ,  \r                                   g   e   t   P   o
0010220    s   i   t   i   o   n   :       G   e   t   I   n   d   e   x
0010240    ,  \r  \t   s   e   t   P   o   s   i   t   i   o   n   :    
0010260    S   e   t   I   n   d   e   x   ,  \r  \t   s   e   n   d   N
0010300    o   w   :       S   e   n   d   N   o   w   ,  \r  \t   o   p
0010320    t   i   o   n   s   :       o   p   t   i   o   n   s   ,  \r
0010340   \t   c   l   i   e   n   t   D   a   t   a   :       N   I   L
0010360    ]   ,  \r                           o   b   j   e   c   t   :
0010400        [  \r                                   r   e   a   d   :
0010420        r   e   a   d   ,  \r                                   w
0010440    r   i   t   e   :       w   r   i   t   e   ,  \r            
0010460                        s   h   r   i   n   k   :       s   h   r
0010500    i   n   k   ,  \r                                   f   i   l
0010520    e   P   a   g   e   s   :       C   A   R   D   I   N   A   L
0010540    [   f   i   l   e   P   a   g   e   s   ]   ,  \r            
0010560                        l   e   n   g   t   h   :       l   e   n
0010600    g   t   h   ,  \r                                   r   e   l
0010620    e   a   s   e   :       r   e   l   e   a   s   e   ,  \r    
0010640                                s   t   r   e   a   m   B   a   s
0010660    e   :       s   t   r   e   a   m   B   a   s   e   ,  \r    
0010700                                f   i   l   e   :       f   i   l
0010720    e   ,  \r                                   c   a   p   a   :
0010740        c   a   p   a   b   i   l   i   t   y   ,  \r  \t   b   u
0010760    f   f   e   r   S   p   a   c   e   P   a   g   e   s   :    
0011000    l   o   c   a   l   B   u   f   f   e   r   P   a   g   e   s
0011020    ]   ]       ]   ;  \r                   I   F       ~   h   .
0011040    o   b   j   e   c   t   .   r   e   a   d       T   H   E   N
0011060        {  \r                           h   .   s   t   r   e   a
0011100    m   .   g   e   t   B   y   t   e     254       h   .   s   t
0011120    r   e   a   m   .   g   e   t   W   o   r   d     254       G
0011140    e   t   E   r   r   o   r   ;  \r                           h
0011160    .   s   t   r   e   a   m   .   g   e   t     254       G   e
0011200    t   B   l   o   c   k   E   r   r   o   r   }   ;  \r        
0011220            I   F       h   .   o   b   j   e   c   t   .   w   r
0011240    i   t   e       T   H   E   N       {  \r                    
0011260        I   F       h   .   o   b   j   e   c   t   .   f   i   l
0011300    e   P   a   g   e   s       =       0       T   H   E   N    
0011320    {  \r                                   M   F   i   l   e   O
0011340    p   s   .   S   e   t   M   i   n   i   m   u   m   F   i   l
0011360    e   D   a   t   a   P   a   g   e   s   [   h   .   o   b   j
0011400    e   c   t   .   f   i   l   e   ,       1   ]   ;  \r  \t   h
0011420    .   o   b   j   e   c   t   .   f   i   l   e   P   a   g   e
0011440    s     254       1   }   }      \r                   E   L   S
0011460    E       {  \r                           h   .   s   t   r   e
0011500    a   m   .   p   u   t   B   y   t   e     254       L   O   O
0011520    P   H   O   L   E   [   P   u   t   E   r   r   o   r   ]   ;
0011540   \r                           h   .   s   t   r   e   a   m   .
0011560    p   u   t   W   o   r   d     254       P   u   t   E   r   r
0011600    o   r   ;  \r                           h   .   s   t   r   e
0011620    a   m   .   p   u   t     254       P   u   t   B   l   o   c
0011640    k   E   r   r   o   r   ;  \r                           I   F
0011660        h   .   o   b   j   e   c   t   .   f   i   l   e   P   a
0011700    g   e   s       <       h   .   o   b   j   e   c   t   .   b
0011720    u   f   f   e   r   S   p   a   c   e   P   a   g   e   s    
0011740    T   H   E   N  \r                                   h   .   o
0011760    b   j   e   c   t   .   b   u   f   f   e   r   S   p   a   c
0012000    e   P   a   g   e   s     254       h   .   o   b   j   e   c
0012020    t   .   f   i   l   e   P   a   g   e   s   }   ;  \r        
0012040            I   F       s   e   t   L   e   n   g   t   h       T
0012060    H   E   N       {   M   F   i   l   e   .   S   e   t   L   e
0012100    n   g   t   h   [   h   .   o   b   j   e   c   t   .   f   i
0012120    l   e   ,       0   ]   ;       h   .   o   b   j   e   c   t
0012140    .   l   e   n   g   t   h     254       0   }   ;  \r        
0012160            S   e   t   u   p   B   u   f   f   e   r   [   @   h
0012200    .   o   b   j   e   c   t   ,       0   ]   ;  \r            
0012220        M   F   i   l   e   .   S   e   t   R   e   l   e   a   s
0012240    e   D   a   t   a   [   f   i   l   e   ,       [   S   t   r
0012260    e   a   m   R   e   l   e   a   s   e   ,       h   ]   ]   ;
0012300   \r                   R   E   T   U   R   N   [   @   h   .   s
0012320    t   r   e   a   m   ]   ;  \r                   E   N   D   ;
0012340   \r  \r           S   t   r   e   a   m   R   e   l   e   a   s
0012360    e   :       M   F   i   l   e   .   P   l   e   a   s   e   R
0012400    e   l   e   a   s   e   P   r   o   c       =       {  \r    
0012420                h   :       M   y   H   a   n   d   l   e       =
0012440        C   o   n   v   e   r   t   H   a   n   d   l   e   I   n
0012460    l   i   n   e   [   i   n   s   t   a   n   c   e   D   a   t
0012500    a   ]   ;  \r                   s   t   r   e   a   m   H   a
0012520    n   d   l   e   :       H   a   n   d   l   e   ;  \r        
0012540            c   :       M   F   i   l   e   .   R   e   l   e   a
0012560    s   e   C   h   o   i   c   e   ;  \r                   [   c
0012600    ,       s   t   r   e   a   m   H   a   n   d   l   e   ]    
0012620  254       R   e   a   l   R   e   l   e   a   s   e   [   f   i
0012640    l   e   ,       h   ,       i   n   s   t   a   n   c   e   D
0012660    a   t   a   ]   ;  \r                   I   F       c       =
0012700        g   o   A   h   e   a   d       T   H   E   N       I   n
0012720    t   e   r   n   a   l   D   e   l   e   t   e   [   h   ,    
0012740    @   s   t   r   e   a   m   H   a   n   d   l   e   .   s   t
0012760    r   e   a   m   ,       h   .   f   i   l   e   ]   ;  \r    
0013000                R   E   T   U   R   N   [   c   ]   }   ;  \r    
0013020               \r           R   e   a   l   R   e   l   e   a   s
0013040    e   :       E   N   T   R   Y       P   R   O   C   E   D   U
0013060    R   E       [  \r                   f   i   l   e   :       M
0013100    F   i   l   e   .   H   a   n   d   l   e   ,       h   :    
0013120    M   y   H   a   n   d   l   e   ,       s   t   r   e   a   m
0013140    H   a   n   d   l   e   :       H   a   n   d   l   e   ]    
0013160   \r                   R   E   T   U   R   N   S       [   c   :
0013200        M   F   i   l   e   .   R   e   l   e   a   s   e   C   h
0013220    o   i   c   e   ,       s   :       H   a   n   d   l   e   ]
0013240        =       {  \r                       E   N   A   B   L   E
0013260        U   N   W   I   N   D       =   >       N   U   L   L   ;
0013300       \r                       I   F       h   .   r   e   l   e
0013320    a   s   e   .   p   r   o   c       =       N   I   L       T
0013340    H   E   N       R   E   T   U   R   N   [   n   o   ,       s
0013360    t   r   e   a   m   H   a   n   d   l   e   ]   ;  \r        
0013400                I   F       h   .   f   i   l   e       =       N
0013420    I   L       T   H   E   N       R   E   T   U   R   N   [   l
0013440    a   t   e   r   ,       s   t   r   e   a   m   H   a   n   d
0013460    l   e   ]   ;  \r                       c     254       h   .
0013500    r   e   l   e   a   s   e   .   p   r   o   c   [   @   s   t
0013520    r   e   a   m   H   a   n   d   l   e   .   s   t   r   e   a
0013540    m   ,       h   .   r   e   l   e   a   s   e   .   c   l   i
0013560    e   n   t   I   n   s   t   a   n   c   e   D   a   t   a   ]
0013600    ;  \r                       R   E   T   U   R   N   [   c   ,
0013620        s   t   r   e   a   m   H   a   n   d   l   e   ]   }   ;
0013640   \r          \r           D   o   n   t   R   e   l   e   a   s
0013660    e   :       P   U   B   L   I   C       M   S   t   r   e   a
0013700    m   .   P   l   e   a   s   e   R   e   l   e   a   s   e   P
0013720    r   o   c       =       {   R   E   T   U   R   N   [   n   o
0013740    ]   }   ;  \r          \r           M   a   k   e   F   i   l
0013760    e   :       P   R   O   C   E   D   U   R   E       [  \r    
0014000                n   a   m   e   :       L   O   N   G       S   T
0014020    R   I   N   G   ,       a   c   c   e   s   s   :       M   F
0014040    i   l   e   .   A   c   c   e   s   s   ,       t   y   p   e
0014060    :       M   F   i   l   e   .   T   y   p   e     254       u
0014100    n   k   n   o   w   n   ]  \r                   R   E   T   U
0014120    R   N   S       [   f   i   l   e   :       M   F   i   l   e
0014140    .   H   a   n   d   l   e   ]       =       {  \r            
0014160        f   i   l   e     254       M   F   i   l   e   .   A   c
0014200    q   u   i   r   e   [   n   a   m   e   ,       a   c   c   e
0014220    s   s   ,       [   ]   ,      \r                           I
0014240    F       a   c   c   e   s   s       =       r   e   a   d   O
0014260    n   l   y       T   H   E   N       F   A   L   S   E       E
0014300    L   S   E       T   R   U   E   ,       M   F   i   l   e   .
0014320    d   o   n   t   C   a   r   e   ,       t   y   p   e       !
0014340       \r                           M   F   i   l   e   .   E   r
0014360    r   o   r       =   >       E   r   r   o   r   [   N   I   L
0014400    ,       f   i   l   e   N   o   t   A   v   a   i   l   a   b
0014420    l   e   ]   ]   }   ;  \r          \r           N   o   t   I
0014440    m   p   l   e   m   e   n   t   e   d   :       E   R   R   O
0014460    R       =       C   O   D   E   ;  \r                  \r    
0014500        L   o   g   :       P   U   B   L   I   C       P   R   O
0014520    C   E   D   U   R   E       [   n   a   m   e   :       L   O
0014540    N   G       S   T   R   I   N   G   ,       r   e   l   e   a
0014560    s   e   :       R   e   l   e   a   s   e   D   a   t   a   ]
0014600   \r                   R   E   T   U   R   N   S       [   S   t
0014620    r   e   a   m   .   H   a   n   d   l   e   ]       =       {
0014640    E   R   R   O   R       N   o   t   I   m   p   l   e   m   e
0014660    n   t   e   d   }   ;  \r                  \r           R   e
0014700    a   d   O   n   l   y   :       P   U   B   L   I   C       P
0014720    R   O   C   E   D   U   R   E       [   n   a   m   e   :    
0014740    L   O   N   G       S   T   R   I   N   G   ,       r   e   l
0014760    e   a   s   e   :       R   e   l   e   a   s   e   D   a   t
0015000    a   ]  \r                   R   E   T   U   R   N   S       [
0015020    S   t   r   e   a   m   .   H   a   n   d   l   e   ]       =
0015040        {  \r                   R   E   T   U   R   N   [   C   r
0015060    e   a   t   e   [   M   a   k   e   F   i   l   e   [   n   a
0015100    m   e   ,       r   e   a   d   O   n   l   y   ]   ,       r
0015120    e   l   e   a   s   e   ]   ]   }   ;  \r                  \r
0015140            R   e   a   d   W   r   i   t   e   :       P   U   B
0015160    L   I   C       P   R   O   C   E   D   U   R   E       [  \r
0015200                    n   a   m   e   :       L   O   N   G       S
0015220    T   R   I   N   G   ,       r   e   l   e   a   s   e   :    
0015240    R   e   l   e   a   s   e   D   a   t   a   ,       t   y   p
0015260    e   :       M   F   i   l   e   .   T   y   p   e     254    
0015300    u   n   k   n   o   w   n   ]  \r                   R   E   T
0015320    U   R   N   S       [   S   t   r   e   a   m   .   H   a   n
0015340    d   l   e   ]       =       {  \r                   R   E   T
0015360    U   R   N   [   C   r   e   a   t   e   [   M   a   k   e   F
0015400    i   l   e   [   n   a   m   e   ,       r   e   a   d   W   r
0015420    i   t   e   ,       t   y   p   e   ]   ,       r   e   l   e
0015440    a   s   e   ]   ]   }   ;  \r                  \r           W
0015460    r   i   t   e   O   n   l   y   :       P   U   B   L   I   C
0015500        P   R   O   C   E   D   U   R   E       [  \r            
0015520        n   a   m   e   :       L   O   N   G       S   T   R   I
0015540    N   G   ,       r   e   l   e   a   s   e   :       R   e   l
0015560    e   a   s   e   D   a   t   a   ,       t   y   p   e   :    
0015600    M   F   i   l   e   .   T   y   p   e     254       u   n   k
0015620    n   o   w   n   ]  \r                   R   E   T   U   R   N
0015640    S       [   S   t   r   e   a   m   .   H   a   n   d   l   e
0015660    ]       =       {  \r                   R   E   T   U   R   N
0015700    [   C   r   e   a   t   e   [   M   a   k   e   F   i   l   e
0015720    [   n   a   m   e   ,       w   r   i   t   e   O   n   l   y
0015740    ,       t   y   p   e   ]   ,       r   e   l   e   a   s   e
0015760    ]   ]   }   ;  \r          \r           G   e   t   R   e   l
0016000    e   a   s   e   D   a   t   a   :       P   U   B   L   I   C
0016020        P   R   O   C   E   D   U   R   E       [   s   t   r   e
0016040    a   m   :       M   S   t   r   e   a   m   .   H   a   n   d
0016060    l   e   ]       R   E   T   U   R   N   S       [   R   e   l
0016100    e   a   s   e   D   a   t   a   ]       =  \r                
0016120    {   R   E   T   U   R   N   [   R   e   a   l   G   e   t   R
0016140    e   l   e   a   s   e   D   a   t   a   [   V   a   l   i   d
0016160    a   t   e   H   a   n   d   l   e   [   s   t   r   e   a   m
0016200    ]   ,       L   O   O   P   H   O   L   E   [   s   t   r   e
0016220    a   m   ]   ]   ]   }   ;  \r  \r           R   e   a   l   G
0016240    e   t   R   e   l   e   a   s   e   D   a   t   a   :       E
0016260    N   T   R   Y       P   R   O   C   E   D   U   R   E       [
0016300    h   :       M   y   H   a   n   d   l   e   ,       s   t   r
0016320    e   a   m   H   a   n   d   l   e   :       H   a   n   d   l
0016340    e   ]       R   E   T   U   R   N   S       [   R   e   l   e
0016360    a   s   e   D   a   t   a   ]       =  \r                   {
0016400    R   E   T   U   R   N   [   h   .   r   e   l   e   a   s   e
0016420    ]   }   ;  \r  \r           S   e   t   R   e   l   e   a   s
0016440    e   D   a   t   a   :       P   U   B   L   I   C       P   R
0016460    O   C   E   D   U   R   E       [  \r                   s   t
0016500    r   e   a   m   :       M   S   t   r   e   a   m   .   H   a
0016520    n   d   l   e   ,       r   e   l   e   a   s   e   :       R
0016540    e   l   e   a   s   e   D   a   t   a   ]       =       {  \r
0016560                    h   :       M   y   H   a   n   d   l   e    
0016600    =       V   a   l   i   d   a   t   e   H   a   n   d   l   e
0016620    [   s   t   r   e   a   m   ]   ;  \r                   R   e
0016640    a   l   S   e   t   R   e   l   e   a   s   e   D   a   t   a
0016660    [   h   ,       L   O   O   P   H   O   L   E   [   s   t   r
0016700    e   a   m   ]   ,       r   e   l   e   a   s   e   ]   }   ;
0016720   \r  \r           R   e   a   l   S   e   t   R   e   l   e   a
0016740    s   e   D   a   t   a   :       E   N   T   R   Y       P   R
0016760    O   C   E   D   U   R   E       [   h   :       M   y   H   a
0017000    n   d   l   e   ,       s   t   r   e   a   m   H   a   n   d
0017020    l   e   :       H   a   n   d   l   e   ,       r   e   l   e
0017040    a   s   e   :       R   e   l   e   a   s   e   D   a   t   a
0017060    ]       =  \r                   {   h   .   r   e   l   e   a
0017100    s   e     254       r   e   l   e   a   s   e   }   ;  \r  \r
0017120            B   a   c   k   u   p   L   o   g   :       P   U   B
0017140    L   I   C       P   R   O   C   E   D   U   R   E       [   s
0017160    t   r   e   a   m   :       M   S   t   r   e   a   m   .   H
0017200    a   n   d   l   e   ,       c   o   u   n   t   :       M   F
0017220    i   l   e   .   B   y   t   e   C   o   u   n   t   ]      \r
0017240                    R   E   T   U   R   N   S       [   b   a   c
0017260    k   e   d   U   p   :       M   F   i   l   e   .   B   y   t
0017300    e   C   o   u   n   t   ]       =       {   E   R   R   O   R
0017320        N   o   t   I   m   p   l   e   m   e   n   t   e   d   }
0017340    ;  \r  \r           S   e   t   L   o   g   R   e   a   d   L
0017360    e   n   g   t   h   :       P   U   B   L   I   C       P   R
0017400    O   C   E   D   U   R   E       [  \r                   s   t
0017420    r   e   a   m   :       M   S   t   r   e   a   m   .   H   a
0017440    n   d   l   e   ,       p   o   s   i   t   i   o   n   :    
0017460    L   O   N   G       I   N   T   E   G   E   R   ]       =    
0017500    {  \r                   E   R   R   O   R       N   o   t   I
0017520    m   p   l   e   m   e   n   t   e   d   }   ;  \r  \r        
0017540    S   e   t   A   c   c   e   s   s   :       P   U   B   L   I
0017560    C       P   R   O   C   E   D   U   R   E       [   s   t   r
0017600    e   a   m   :       M   S   t   r   e   a   m   .   H   a   n
0017620    d   l   e   ,       a   c   c   e   s   s   :       M   F   i
0017640    l   e   .   A   c   c   e   s   s   ]       =  \r            
0017660        B   E   G   I   N  \r                   h   :       M   y
0017700    H   a   n   d   l   e       =       V   a   l   i   d   a   t
0017720    e   H   a   n   d   l   e   [   s   t   r   e   a   m   ]   ;
0017740   \r                   S   E   L   E   C   T       a   c   c   e
0017760    s   s       F   R   O   M      \r                           w
0020000    r   i   t   e   O   n   l   y   ,       l   o   g   ,       r
0020020    e   a   d   W   r   i   t   e   ,       r   e   a   d   O   n
0020040    l   y       =   >       N   U   L   L   ;  \r                
0020060            E   N   D   C   A   S   E       =   >       E   r   r
0020100    o   r   [   s   t   r   e   a   m   ,       i   n   v   a   l
0020120    i   d   O   p   e   r   a   t   i   o   n   ]   ;  \r        
0020140            C   l   e   a   n   u   p   [   h   ,       h   .   f
0020160    i   l   e   ]   ;  \r                   M   F   i   l   e   .
0020200    S   e   t   A   c   c   e   s   s   [   h   .   f   i   l   e
0020220    ,       a   c   c   e   s   s       !      \r                
0020240            M   F   i   l   e   .   E   r   r   o   r       =   >
0020260        E   r   r   o   r   [   s   t   r   e   a   m   ,       f
0020300    i   l   e   N   o   t   A   v   a   i   l   a   b   l   e   ]
0020320    ]   ;       -   -       c   a   t   c   h       e   r   r   o
0020340    r   s   ?  \r                   h   .   c   a   p   a     254
0020360        S   p   e   c   i   a   l   M   F   i   l   e   .   G   e
0020400    t   C   a   p   a   W   i   t   h   A   c   c   e   s   s   [
0020420    h   .   f   i   l   e       !  \r                           M
0020440    F   i   l   e   .   E   r   r   o   r       =   >       E   r
0020460    r   o   r   [   s   t   r   e   a   m   ,       i   n   v   a
0020500    l   i   d   F   i   l   e   ]   ]   ;  \r                   h
0020520    .   r   e   a   d     254       a   c   c   e   s   s       #
0020540        w   r   i   t   e   O   n   l   y       A   N   D       a
0020560    c   c   e   s   s       #       l   o   g   ;  \r            
0020600        h   .   w   r   i   t   e     254       a   c   c   e   s
0020620    s       #       r   e   a   d   O   n   l   y   ;  \r        
0020640            I   F       h   .   r   e   a   d       T   H   E   N
0020660        {  \r                           s   t   r   e   a   m   .
0020700    g   e   t   B   y   t   e     254       G   e   t   B   y   t
0020720    e   ;  \r                           s   t   r   e   a   m   .
0020740    g   e   t   W   o   r   d     254       G   e   t   W   o   r
0020760    d   ;  \r                           s   t   r   e   a   m   .
0021000    g   e   t     254       G   e   t   B   l   o   c   k   }  \r
0021020                    E   L   S   E       {  \r                    
0021040        s   t   r   e   a   m   .   g   e   t   B   y   t   e    
0021060  254       G   e   t   E   r   r   o   r   ;  \r                
0021100            s   t   r   e   a   m   .   g   e   t   W   o   r   d
0021120      254       G   e   t   E   r   r   o   r   ;  \r            
0021140                s   t   r   e   a   m   .   g   e   t     254    
0021160    G   e   t   B   l   o   c   k   E   r   r   o   r   }   ;  \r
0021200                    I   F       h   .   w   r   i   t   e       T
0021220    H   E   N       {  \r                           s   t   r   e
0021240    a   m   .   p   u   t   B   y   t   e     254       P   u   t
0021260    B   y   t   e   ;  \r                           s   t   r   e
0021300    a   m   .   p   u   t   W   o   r   d     254       P   u   t
0021320    W   o   r   d   ;  \r                           s   t   r   e
0021340    a   m   .   p   u   t     254       P   u   t   B   l   o   c
0021360    k   }  \r                   E   L   S   E       {  \r        
0021400                    s   t   r   e   a   m   .   p   u   t   B   y
0021420    t   e     254       L   O   O   P   H   O   L   E   [   P   u
0021440    t   E   r   r   o   r   ]   ;  \r                           s
0021460    t   r   e   a   m   .   p   u   t   W   o   r   d     254    
0021500    P   u   t   E   r   r   o   r   ;  \r                        
0021520    s   t   r   e   a   m   .   p   u   t     254       P   u   t
0021540    B   l   o   c   k   E   r   r   o   r   }   ;  \r            
0021560        S   E   L   E   C   T       a   c   c   e   s   s       F
0021600    R   O   M  \r                           r   e   a   d   O   n
0021620    l   y       =   >       S   p   a   c   e   .   M   a   k   e
0021640    R   e   a   d   O   n   l   y   [   h   .   b   u   f   f   e
0021660    r   S   p   a   c   e   ]   ;  \r                           E
0021700    N   D   C   A   S   E       =   >       {  \r                
0021720                    d   e   s   i   r   e   d   P   a   g   e   s
0021740    :       C   A   R   D   I   N   A   L       =       l   o   c
0021760    a   l   B   u   f   f   e   r   P   a   g   e   s   ;  \r  \t
0022000    I   F       h   .   b   u   f   f   e   r   S   p   a   c   e
0022020    P   a   g   e   s       #       d   e   s   i   r   e   d   P
0022040    a   g   e   s       T   H   E   N       {  \r  \t           I
0022060    F       h   .   b   u   f   f   e   r   S   p   a   c   e   P
0022100    a   g   e   s       #       0       T   H   E   N       {  \r
0022120                                                    [   ]     254
0022140        S   p   a   c   e   .   U   n   m   a   p   A   t   [   h
0022160    .   b   u   f   f   e   r   S   p   a   c   e   .   p   o   i
0022200    n   t   e   r   ]   ;  \r                                    
0022220                S   p   a   c   e   .   D   e   a   l   l   o   c
0022240    a   t   e   [   h   .   b   u   f   f   e   r   S   p   a   c
0022260    e   ]   }   ;      \r  \t           h   .   b   u   f   f   e
0022300    r     254       N   I   L   ;  \r  \t           h   .   b   u
0022320    f   f   e   r   S   p   a   c   e   P   a   g   e   s     254
0022340        d   e   s   i   r   e   d   P   a   g   e   s   ;  \r  \t
0022360            S   e   t   u   p   B   u   f   f   e   r   [   h   ,
0022400        h   .   f   i   r   s   t   F   i   l   e   P   a   g   e
0022420    I   n   B   u   f   f   e   r   ]   }  \r  \t   E   L   S   E
0022440        S   p   a   c   e   .   M   a   k   e   W   r   i   t   a
0022460    b   l   e   [   h   .   b   u   f   f   e   r   S   p   a   c
0022500    e   ]   }   ;  \r                   E   N   D   ;  \r  \r    
0022520        -   -       G   e   n   e   r   i   c       S   t   r   e
0022540    a   m       p   r   o   c   e   d   u   r   e   s   ;       a
0022560    s   s   u   m   e       h   a   n   d   l   e       o   k  \r
0022600   \r           G   e   t   B   y   t   e   :       P   R   O   C
0022620    E   D   U   R   E       [   s   t   r   e   a   m   :       S
0022640    t   r   e   a   m   .   H   a   n   d   l   e   ]       R   E
0022660    T   U   R   N   S       [   b   y   t   e   :       U   N   S
0022700    P   E   C   I   F   I   E   D   [   0   .   .   2   5   6   )
0022720    ]       =  \r                   B   E   G   I   N  \r        
0022740            h   :       M   y   H   a   n   d   l   e     254    
0022760    C   o   n   v   e   r   t   H   a   n   d   l   e   I   n   l
0023000    i   n   e   [   s   t   r   e   a   m   ]   ;  \r            
0023020        W   H   I   L   E       h   .   i   n   d   e   x       =
0023040        h   .   d   a   t   a   B   y   t   e   s   I   n   B   u
0023060    f   f   e   r       D   O  \r                           I   F
0023100        h   .   e   o   f   I   n   B   u   f   f   e   r       T
0023120    H   E   N       {   S   I   G   N   A   L       S   t   r   e
0023140    a   m   .   E   n   d   O   f   S   t   r   e   a   m   [   0
0023160    ]   ;       R   E   T   U   R   N   [   0   ]   }   ;  \r    
0023200                        A   d   v   a   n   c   e   B   u   f   f
0023220    e   r   [   h   ]   ;  \r                           E   N   D
0023240    L   O   O   P   ;  \r                   b   y   t   e     254
0023260        h   .   b   u   f   f   e   r   [   h   .   i   n   d   e
0023300    x   ]   ;  \r                   h   .   i   n   d   e   x    
0023320  254       h   .   i   n   d   e   x       +       1   ;  \r    
0023340                R   E   T   U   R   N  \r                   E   N
0023360    D   ;  \r  \r           G   e   t   I   n   d   e   x   :    
0023400    S   t   r   e   a   m   .   G   e   t   P   o   s   i   t   i
0023420    o   n   P   r   o   c   e   d   u   r   e       =       {  \r
0023440                    h   :       M   y   H   a   n   d   l   e    
0023460    =       C   o   n   v   e   r   t   H   a   n   d   l   e   I
0023500    n   l   i   n   e   [   s   H   ]   ;  \r                   p
0023520    o   s   i   t   i   o   n     254       I   n   l   i   n   e
0023540    .   L   o   n   g   M   u   l   t   [   h   .   f   i   r   s
0023560    t   F   i   l   e   P   a   g   e   I   n   B   u   f   f   e
0023600    r   ,       b   y   t   e   s   P   e   r   P   a   g   e   ]
0023620        +       h   .   i   n   d   e   x   }   ;  \r  \r        
0023640    G   e   t   W   o   r   d   :       P   R   O   C   E   D   U
0023660    R   E       [   s   t   r   e   a   m   :       S   t   r   e
0023700    a   m   .   H   a   n   d   l   e   ]       R   E   T   U   R
0023720    N   S       [   U   N   S   P   E   C   I   F   I   E   D   ]
0023740        =  \r                   B   E   G   I   N  \r            
0023760        t   :       U   N   S   P   E   C   I   F   I   E   D    
0024000    =       C   A   R   D   I   N   A   L   [   G   e   t   B   y
0024020    t   e   [   s   t   r   e   a   m   ]   ]       *       2   5
0024040    6   ;  \r                   R   E   T   U   R   N   [   t    
0024060    +       G   e   t   B   y   t   e   [   s   t   r   e   a   m
0024100    ]   ]  \r                   E   N   D   ;  \r  \r           G
0024120    e   t   E   r   r   o   r   :       P   R   O   C   E   D   U
0024140    R   E       [   s   t   r   e   a   m   :       S   t   r   e
0024160    a   m   .   H   a   n   d   l   e   ]       R   E   T   U   R
0024200    N   S       [   U   N   S   P   E   C   I   F   I   E   D   ]
0024220        =       {  \r                   E   R   R   O   R       E
0024240    r   r   o   r   [   s   t   r   e   a   m   ,       i   n   v
0024260    a   l   i   d   O   p   e   r   a   t   i   o   n   ]   }   ;
0024300   \r  \r           P   u   t   B   y   t   e   :       S   t   r
0024320    e   a   m   .   P   u   t   B   y   t   e   P   r   o   c   e
0024340    d   u   r   e       =       {  \r                   h   :    
0024360    M   y   H   a   n   d   l   e       =       C   o   n   v   e
0024400    r   t   H   a   n   d   l   e   I   n   l   i   n   e   [   s
0024420    H   ]   ;  \r                   W   H   I   L   E       h   .
0024440    i   n   d   e   x       =       h   .   d   a   t   a   B   y
0024460    t   e   s   I   n   B   u   f   f   e   r       D   O  \r    
0024500                        I   F       h   .   d   a   t   a   B   y
0024520    t   e   s   I   n   B   u   f   f   e   r       =       h   .
0024540    b   u   f   f   e   r   B   y   t   e   s       T   H   E   N
0024560        A   d   v   a   n   c   e   B   u   f   f   e   r   [   h
0024600    ]  \r                           E   L   S   E  \r            
0024620                        B   E   G   I   N  \r                    
0024640                h   .   d   a   t   a   B   y   t   e   s   I   n
0024660    B   u   f   f   e   r     254       h   .   d   a   t   a   B
0024700    y   t   e   s   I   n   B   u   f   f   e   r       +       1
0024720    ;  \r  \t   h   .   l   e   n   g   t   h     254       h   .
0024740    l   e   n   g   t   h       +       1   ;  \r                
0024760                    h   .   l   e   n   g   t   h   C   h   a   n
0025000    g   e   d     254       T   R   U   E   ;  \r                
0025020                    E   N   D   ;  \r                           E
0025040    N   D   L   O   O   P   ;  \r                   h   .   b   u
0025060    f   f   e   r   [   h   .   i   n   d   e   x   ]     254    
0025100    b   y   t   e   ;  \r                   h   .   i   n   d   e
0025120    x     254       h   .   i   n   d   e   x       +       1   }
0025140    ;  \r  \r           P   u   t   W   o   r   d   :       S   t
0025160    r   e   a   m   .   P   u   t   W   o   r   d   P   r   o   c
0025200    e   d   u   r   e       =       {  \r                   P   u
0025220    t   B   y   t   e   [   s   H   ,       C   A   R   D   I   N
0025240    A   L   [   w   o   r   d   ]       /       2   5   6   ]   ;
0025260        P   u   t   B   y   t   e   [   s   H   ,       C   A   R
0025300    D   I   N   A   L   [   w   o   r   d   ]       M   O   D    
0025320    2   5   6   ]   }   ;  \r  \r           P   u   t   E   r   r
0025340    o   r   :       S   t   r   e   a   m   .   P   u   t   W   o
0025360    r   d   P   r   o   c   e   d   u   r   e       =       {   E
0025400    R   R   O   R       E   r   r   o   r   [   s   H   ,       i
0025420    n   v   a   l   i   d   O   p   e   r   a   t   i   o   n   ]
0025440    }   ;  \r  \r           S   e   t   I   n   d   e   x   :    
0025460    S   t   r   e   a   m   .   S   e   t   P   o   s   i   t   i
0025500    o   n   P   r   o   c   e   d   u   r   e       =       {  \r
0025520                    h   :       M   y   H   a   n   d   l   e    
0025540    =       C   o   n   v   e   r   t   H   a   n   d   l   e   I
0025560    n   l   i   n   e   [   s   H   ]   ;  \r                   f
0025600    i   l   e   P   a   g   e   ,       b   y   t   e   :       C
0025620    A   R   D   I   N   A   L   ;  \r                   b   u   f
0025640    f   e   r   P   a   g   e   :       C   A   R   D   I   N   A
0025660    L       =       h   .   f   i   r   s   t   F   i   l   e   P
0025700    a   g   e   I   n   B   u   f   f   e   r   ;  \r            
0025720        o   l   d   F   i   l   e   P   a   g   e   s   :       C
0025740    A   R   D   I   N   A   L       =       h   .   f   i   l   e
0025760    P   a   g   e   s   ;  \r                   b   u   f   f   e
0026000    r   P   a   g   e   s   :       C   A   R   D   I   N   A   L
0026020        =       h   .   b   u   f   f   e   r   B   y   t   e   s
0026040    /   b   y   t   e   s   P   e   r   P   a   g   e   ;  \r    
0026060                s   e   t   u   p   O   f   f   s   e   t   :    
0026100    C   A   R   D   I   N   A   L       =       l   o   c   a   l
0026120    O   f   f   s   e   t   ;  \r                   I   F       (
0026140    I   n   l   i   n   e   .   L   o   n   g   M   u   l   t   [
0026160    b   u   f   f   e   r   P   a   g   e   ,       b   y   t   e
0026200    s   P   e   r   P   a   g   e   ]       +       h   .   i   n
0026220    d   e   x   )       =       p   o   s   i   t   i   o   n    
0026240    T   H   E   N  \r                           R   E   T   U   R
0026260    N   ;  \r                   I   F       I   n   l   i   n   e
0026300    .   H   i   g   h   H   a   l   f   [   p   o   s   i   t   i
0026320    o   n   ]       >   =       b   y   t   e   s   P   e   r   P
0026340    a   g   e       T   H   E   N       G   O   T   O       O   u
0026360    t   O   f   R   a   n   g   e   ;  \r                   [   f
0026400    i   l   e   P   a   g   e   ,       b   y   t   e   ]     254
0026420        I   n   l   i   n   e   .   L   o   n   g   D   i   v   M
0026440    o   d   [   p   o   s   i   t   i   o   n   ,       b   y   t
0026460    e   s   P   e   r   P   a   g   e   ]   ;  \r                
0026500    I   F       h   .   b   u   f   f   e   r       =       N   I
0026520    L       O   R       f   i   l   e   P   a   g   e       ~   I
0026540    N   [   b   u   f   f   e   r   P   a   g   e   .   .   b   u
0026560    f   f   e   r   P   a   g   e   +   b   u   f   f   e   r   P
0026600    a   g   e   s   )       T   H   E   N  \r                    
0026620        B   E   G   I   N  \r                           g   r   o
0026640    w   F   i   l   e   :       B   O   O   L   E   A   N   ;  \r
0026660                            I   F       p   o   s   i   t   i   o
0026700    n       >       h   .   l   e   n   g   t   h       T   H   E
0026720    N       {  \r                                   I   F       ~
0026740    h   .   w   r   i   t   e       T   H   E   N       G   O   T
0026760    O       O   u   t   O   f   R   a   n   g   e   ;  \r        
0027000                            h   .   f   i   l   e   P   a   g   e
0027020    s     254       f   i   l   e   P   a   g   e       +       g
0027040    r   o   w   I   n   c   r   e   m   e   n   t   ;  \r  \t   g
0027060    r   o   w   F   i   l   e     254       T   R   U   E   ;  \r
0027100   \t   h   .   l   e   n   g   t   h     254       p   o   s   i
0027120    t   i   o   n   ;  \r  \t   h   .   l   e   n   g   t   h   C
0027140    h   a   n   g   e   d     254       T   R   U   E   }  \r    
0027160                        E   L   S   E       g   r   o   w   F   i
0027200    l   e     254       F   A   L   S   E   ;  \r                
0027220            S   e   t   u   p   B   u   f   f   e   r   [   h   ,
0027240        M   A   X   [   f   i   l   e   P   a   g   e   ,       s
0027260    e   t   u   p   O   f   f   s   e   t   ]   -   s   e   t   u
0027300    p   O   f   f   s   e   t   ,       g   r   o   w   F   i   l
0027320    e       !  \r                                   U   N   W   I
0027340    N   D       =   >       h   .   f   i   l   e   P   a   g   e
0027360    s     254       o   l   d   F   i   l   e   P   a   g   e   s
0027400    ]   ;  \r                           E   N   D  \r            
0027420        E   L   S   E       I   F       p   o   s   i   t   i   o
0027440    n       >       h   .   l   e   n   g   t   h       A   N   D
0027460        ~   h   .   w   r   i   t   e       T   H   E   N       G
0027500    O   T   O       O   u   t   O   f   R   a   n   g   e   ;  \r
0027520                    h   .   i   n   d   e   x     254  \r        
0027540                    (   f   i   l   e   P   a   g   e   -   h   .
0027560    f   i   r   s   t   F   i   l   e   P   a   g   e   I   n   B
0027600    u   f   f   e   r   )       *       b   y   t   e   s   P   e
0027620    r   P   a   g   e       +       b   y   t   e   ;  \r        
0027640            I   F       h   .   i   n   d   e   x       >       h
0027660    .   d   a   t   a   B   y   t   e   s   I   n   B   u   f   f
0027700    e   r       T   H   E   N       {  \r                        
0027720    h   .   d   a   t   a   B   y   t   e   s   I   n   B   u   f
0027740    f   e   r     254       h   .   i   n   d   e   x   ;  \r    
0027760                        h   .   l   e   n   g   t   h     254    
0030000    C   o   m   p   u   t   e   L   e   n   g   t   h   [   h   ]
0030020    ;  \r                           h   .   l   e   n   g   t   h
0030040    C   h   a   n   g   e   d     254       T   R   U   E   }   ;
0030060   \r                   R   E   T   U   R   N   ;  \r            
0030100        E   X   I   T   S       O   u   t   O   f   R   a   n   g
0030120    e       =   >       E   R   R   O   R       E   r   r   o   r
0030140    [   s   H   ,       i   n   d   e   x   O   u   t   O   f   R
0030160    a   n   g   e   ]   }   ;  \r  \r           G   e   t   B   l
0030200    o   c   k   :       S   t   r   e   a   m   .   G   e   t   P
0030220    r   o   c   e   d   u   r   e       =  \r                   B
0030240    E   G   I   N  \r                   h   :       M   y   H   a
0030260    n   d   l   e       =       C   o   n   v   e   r   t   H   a
0030300    n   d   l   e   I   n   l   i   n   e   [   s   H   ]   ;  \r
0030320                    b   u   f   f   e   r   B   l   o   c   k   :
0030340        E   n   v   i   r   o   n   m   e   n   t   .   B   l   o
0030360    c   k   ;  \r                   c   o   u   n   t   R   e   m
0030400    a   i   n   i   n   g   :       C   A   R   D   I   N   A   L
0030420      254       b   l   o   c   k   .   s   t   o   p   I   n   d
0030440    e   x   P   l   u   s   O   n   e   -   b   l   o   c   k   .
0030460    s   t   a   r   t   I   n   d   e   x   ;  \r                
0030500    c   o   u   n   t   T   r   a   n   s   f   e   r   r   e   d
0030520    :       C   A   R   D   I   N   A   L   ;  \r                
0030540    s   s   t     254       0   ;  \r                   b   y   t
0030560    e   s   T   r   a   n   s   f   e   r   r   e   d     254    
0030600    0   ;  \r                   w   h   y     254       n   o   r
0030620    m   a   l   ;  \r                   W   H   I   L   E       c
0030640    o   u   n   t   R   e   m   a   i   n   i   n   g       #    
0030660    0       D   O  \r                           b   u   f   f   e
0030700    r   B   l   o   c   k     254       [  \r                    
0030720                b   l   o   c   k   P   o   i   n   t   e   r   :
0030740        h   .   b   u   f   f   e   r   ,  \r                    
0030760                s   t   a   r   t   I   n   d   e   x   :       h
0031000    .   i   n   d   e   x   ,  \r                                
0031020    s   t   o   p   I   n   d   e   x   P   l   u   s   O   n   e
0031040    :       h   .   d   a   t   a   B   y   t   e   s   I   n   B
0031060    u   f   f   e   r   ]   ;  \r                           c   o
0031100    u   n   t   T   r   a   n   s   f   e   r   r   e   d     254
0031120        B   y   t   e   B   l   t   .   B   y   t   e   B   l   t
0031140    [   f   r   o   m   :       b   u   f   f   e   r   B   l   o
0031160    c   k   ,       t   o   :       b   l   o   c   k   ]   ;  \r
0031200                            h   .   i   n   d   e   x     254    
0031220    h   .   i   n   d   e   x       +       c   o   u   n   t   T
0031240    r   a   n   s   f   e   r   r   e   d   ;  \r                
0031260            b   y   t   e   s   T   r   a   n   s   f   e   r   r
0031300    e   d     254       b   y   t   e   s   T   r   a   n   s   f
0031320    e   r   r   e   d       +       c   o   u   n   t   T   r   a
0031340    n   s   f   e   r   r   e   d   ;  \r                        
0031360    I   F       (   c   o   u   n   t   R   e   m   a   i   n   i
0031400    n   g     254       c   o   u   n   t   R   e   m   a   i   n
0031420    i   n   g       -       c   o   u   n   t   T   r   a   n   s
0031440    f   e   r   r   e   d   )       =       0       T   H   E   N
0031460        E   X   I   T   ;  \r                           I   F    
0031500    h   .   e   o   f   I   n   B   u   f   f   e   r       T   H
0031520    E   N  \r                                   B   E   G   I   N
0031540   \r                                   I   F       o   p   t   i
0031560    o   n   s   .   s   i   g   n   a   l   E   n   d   O   f   S
0031600    t   r   e   a   m       T   H   E   N  \r                    
0031620                        S   I   G   N   A   L       S   t   r   e
0031640    a   m   .   E   n   d   O   f   S   t   r   e   a   m   [   b
0031660    l   o   c   k   .   s   t   a   r   t   I   n   d   e   x   +
0031700    c   o   u   n   t   T   r   a   n   s   f   e   r   r   e   d
0031720    ]   ;  \r                                   w   h   y     254
0031740        e   n   d   O   f   S   t   r   e   a   m   ;  \r        
0031760                            E   X   I   T  \r                    
0032000                E   N   D   ;  \r                           b   l
0032020    o   c   k   .   s   t   a   r   t   I   n   d   e   x     254
0032040        b   l   o   c   k   .   s   t   a   r   t   I   n   d   e
0032060    x       +       c   o   u   n   t   T   r   a   n   s   f   e
0032100    r   r   e   d   ;  \r                           A   d   v   a
0032120    n   c   e   B   u   f   f   e   r   [   h   ]   ;  \r        
0032140                    E   N   D   L   O   O   P   ;  \r            
0032160        R   E   T   U   R   N  \r                   E   N   D   ;
0032200   \r  \r           G   e   t   B   l   o   c   k   E   r   r   o
0032220    r   :       S   t   r   e   a   m   .   G   e   t   P   r   o
0032240    c   e   d   u   r   e       =       {   E   R   R   O   R    
0032260    E   r   r   o   r   [   s   H   ,       i   n   v   a   l   i
0032300    d   O   p   e   r   a   t   i   o   n   ]   }   ;  \r  \r    
0032320        P   u   t   B   l   o   c   k   :       S   t   r   e   a
0032340    m   .   P   u   t   P   r   o   c   e   d   u   r   e       =
0032360   \r                   B   E   G   I   N  \r                   h
0032400    :       M   y   H   a   n   d   l   e       =       C   o   n
0032420    v   e   r   t   H   a   n   d   l   e   I   n   l   i   n   e
0032440    [   s   H   ]   ;  \r                   b   u   f   f   e   r
0032460    B   l   o   c   k   :       E   n   v   i   r   o   n   m   e
0032500    n   t   .   B   l   o   c   k   ;  \r                   c   o
0032520    u   n   t   R   e   m   a   i   n   i   n   g   :       C   A
0032540    R   D   I   N   A   L     254       b   l   o   c   k   .   s
0032560    t   o   p   I   n   d   e   x   P   l   u   s   O   n   e   -
0032600    b   l   o   c   k   .   s   t   a   r   t   I   n   d   e   x
0032620    ;  \r                   c   o   u   n   t   T   r   a   n   s
0032640    f   e   r   r   e   d   :       C   A   R   D   I   N   A   L
0032660    ;  \r                   W   H   I   L   E       c   o   u   n
0032700    t   R   e   m   a   i   n   i   n   g       #       0       D
0032720    O  \r                           b   u   f   f   e   r   B   l
0032740    o   c   k     254       [  \r                                
0032760    b   l   o   c   k   P   o   i   n   t   e   r   :       h   .
0033000    b   u   f   f   e   r   ,  \r                                
0033020    s   t   a   r   t   I   n   d   e   x   :       h   .   i   n
0033040    d   e   x   ,  \r                                   s   t   o
0033060    p   I   n   d   e   x   P   l   u   s   O   n   e   :       h
0033100    .   b   u   f   f   e   r   B   y   t   e   s   ]   ;  \r    
0033120                        c   o   u   n   t   T   r   a   n   s   f
0033140    e   r   r   e   d     254       B   y   t   e   B   l   t   .
0033160    B   y   t   e   B   l   t   [   f   r   o   m   :       b   l
0033200    o   c   k   ,       t   o   :       b   u   f   f   e   r   B
0033220    l   o   c   k   ]   ;  \r                           h   .   i
0033240    n   d   e   x     254       h   .   i   n   d   e   x       +
0033260        c   o   u   n   t   T   r   a   n   s   f   e   r   r   e
0033300    d   ;  \r                           I   F       h   .   e   o
0033320    f   I   n   B   u   f   f   e   r       A   N   D       h   .
0033340    i   n   d   e   x       >       h   .   d   a   t   a   B   y
0033360    t   e   s   I   n   B   u   f   f   e   r       T   H   E   N
0033400        {  \r  \t   h   .   d   a   t   a   B   y   t   e   s   I
0033420    n   B   u   f   f   e   r     254       h   .   i   n   d   e
0033440    x   ;  \r  \t   h   .   l   e   n   g   t   h     254       C
0033460    o   m   p   u   t   e   L   e   n   g   t   h   [   h   ]   ;
0033500   \r  \t   h   .   l   e   n   g   t   h   C   h   a   n   g   e
0033520    d     254       T   R   U   E   }   ;  \r                    
0033540        I   F       (   c   o   u   n   t   R   e   m   a   i   n
0033560    i   n   g     254       c   o   u   n   t   R   e   m   a   i
0033600    n   i   n   g       -       c   o   u   n   t   T   r   a   n
0033620    s   f   e   r   r   e   d   )       =       0       T   H   E
0033640    N       E   X   I   T   ;  \r                           I   F
0033660        h   .   e   o   f   I   n   B   u   f   f   e   r       T
0033700    H   E   N       {  \r                                   h   .
0033720    d   a   t   a   B   y   t   e   s   I   n   B   u   f   f   e
0033740    r     254       h   .   b   u   f   f   e   r   B   y   t   e
0033760    s   ;  \r  \t   h   .   l   e   n   g   t   h     254       C
0034000    o   m   p   u   t   e   L   e   n   g   t   h   [   h   ]   ;
0034020   \r  \t   h   .   l   e   n   g   t   h   C   h   a   n   g   e
0034040    d     254       T   R   U   E   }   ;  \r                    
0034060        b   l   o   c   k   .   s   t   a   r   t   I   n   d   e
0034100    x     254       b   l   o   c   k   .   s   t   a   r   t   I
0034120    n   d   e   x       +       c   o   u   n   t   T   r   a   n
0034140    s   f   e   r   r   e   d   ;  \r                           A
0034160    d   v   a   n   c   e   B   u   f   f   e   r   [   h   ]   ;
0034200   \r                           E   N   D   L   O   O   P   ;  \r
0034220                    I   F       e   n   d   R   e   c   o   r   d
0034240        T   H   E   N       C   l   e   a   n   u   p   [   h   ,
0034260        h   .   f   i   l   e   ]   ;  \r                   R   E
0034300    T   U   R   N  \r                   E   N   D   ;  \r  \r    
0034320        P   u   t   B   l   o   c   k   E   r   r   o   r   :    
0034340    S   t   r   e   a   m   .   P   u   t   P   r   o   c   e   d
0034360    u   r   e       =       {   E   R   R   O   R       E   r   r
0034400    o   r   [   s   H   ,       i   n   v   a   l   i   d   O   p
0034420    e   r   a   t   i   o   n   ]   }   ;  \r  \r           S   e
0034440    n   d   N   o   w   :       S   t   r   e   a   m   .   S   e
0034460    n   d   N   o   w   P   r   o   c   e   d   u   r   e       =
0034500   \r                   B   E   G   I   N  \r                   h
0034520    :       M   y   H   a   n   d   l   e       =       C   o   n
0034540    v   e   r   t   H   a   n   d   l   e   I   n   l   i   n   e
0034560    [   s   H   ]   ;  \r                   I   F       e   n   d
0034600    R   e   c   o   r   d       T   H   E   N       C   l   e   a
0034620    n   u   p   [   h   ,       h   .   f   i   l   e   ]   ;  \r
0034640                    R   E   T   U   R   N  \r                   E
0034660    N   D   ;  \r  \r           D   e   l   e   t   e   :       P
0034700    R   O   C   E   D   U   R   E       [   s   t   r   e   a   m
0034720    :       S   t   r   e   a   m   .   H   a   n   d   l   e   ]
0034740        =       {  \r                   h   :       M   y   H   a
0034760    n   d   l   e       =       C   o   n   v   e   r   t   H   a
0035000    n   d   l   e   I   n   l   i   n   e   [   s   t   r   e   a
0035020    m   ]   ;  \r                   c   o   p   y   :       M   F
0035040    i   l   e   .   H   a   n   d   l   e     254       N   I   L
0035060    ;  \r                   C   h   e   c   k   D   e   l   e   t
0035100    e   :       E   N   T   R   Y       P   R   O   C   E   D   U
0035120    R   E       [   s   t   r   e   a   m   H   a   n   d   l   e
0035140    :       H   a   n   d   l   e   ]       =       {  \r        
0035160                    c   o   p   y     254       h   .   f   i   l
0035200    e   ;  \r                           h   .   f   i   l   e    
0035220  254       N   I   L   }   ;  \r                   B   E   G   I
0035240    N       E   N   A   B   L   E       M   F   i   l   e   .   E
0035260    r   r   o   r       =   >       I   F       c   o   d   e    
0035300    =       c   o   u   r   i   e   r   E   r   r   o   r       T
0035320    H   E   N       G   O   T   O       r   e   m   o   t   e   E
0035340    r   r   o   r   ;  \r                   C   h   e   c   k   D
0035360    e   l   e   t   e   [   L   O   O   P   H   O   L   E   [   s
0035400    t   r   e   a   m   ]   ]   ;  \r                   I   F    
0035420    c   o   p   y       #       N   I   L       T   H   E   N    
0035440    {   I   n   t   e   r   n   a   l   D   e   l   e   t   e   [
0035460    h   ,       s   t   r   e   a   m   ,       c   o   p   y   ]
0035500    ;       M   F   i   l   e   .   R   e   l   e   a   s   e   [
0035520    c   o   p   y   ]   }   ;  \r                   E   X   I   T
0035540    S       r   e   m   o   t   e   E   r   r   o   r       =   >
0035560        N   U   L   L   ;  \r                   E   N   D   ;  \r
0035600                    }   ;  \r  \r           I   n   t   e   r   n
0035620    a   l   D   e   l   e   t   e   :       P   R   O   C   E   D
0035640    U   R   E       [  \r                   h   :       M   y   H
0035660    a   n   d   l   e   ,       s   t   r   e   a   m   :       S
0035700    t   r   e   a   m   .   H   a   n   d   l   e   ,       f   i
0035720    l   e   :       M   F   i   l   e   .   H   a   n   d   l   e
0035740    ]       =       {  \r                   i   n   d   e   x   :
0035760        L   O   N   G       C   A   R   D   I   N   A   L     254
0036000        s   t   r   e   a   m   .   g   e   t   P   o   s   i   t
0036020    i   o   n   [   s   t   r   e   a   m   ]   ;  \r            
0036040        B   E   G   I   N       E   N   A   B   L   E       M   F
0036060    i   l   e   .   E   r   r   o   r       =   >       I   F    
0036100    c   o   d   e       =       c   o   u   r   i   e   r   E   r
0036120    r   o   r       T   H   E   N       G   O   T   O       r   e
0036140    m   o   t   e   E   r   r   o   r   ;  \r                   E
0036160    m   p   t   y   B   u   f   f   e   r   [   h   ,       T   R
0036200    U   E   ,       f   i   l   e   ]   ;  \r                   I
0036220    F       ~   h   .   r   e   a   d     253   A   N   D       i
0036240    n   d   e   x       #       0 273       T   H   E   N       M
0036260    F   i   l   e   .   S   e   t   L   e   n   g   t   h   [   f
0036300    i   l   e   ,       i   n   d   e   x   ]   ;  \r            
0036320        E   X   I   T   S       r   e   m   o   t   e   E   r   r
0036340    o   r       =   >       N   U   L   L   ;  \r                
0036360    E   N   D   ;  \r                   L   O   O   P   H   O   L
0036400    E   [   s   t   r   e   a   m   ,       L   O   N   G       P
0036420    O   I   N   T   E   R       T   O       W   O   R   D   ] 255
0036440      254       0   ;  \r                   I   n   l   i   n   e
0036460    .   L   o   n   g   C   O   P   Y   [   f   r   o   m   :    
0036500    s   t   r   e   a   m   ,       t   o   :       s   t   r   e
0036520    a   m       +       1   ,       n   w   o   r   d   s   :    
0036540    S   I   Z   E   [   S   t   r   e   a   m   O   b   j   e   c
0036560    t   ]       -       1   ]   ;  \r                   h   e   a
0036600    p   .   F   R   E   E   [   @   s   t   r   e   a   m   ]   }
0036620    ;  \r  \r           S   e   t   S   S   T   N   o   p   :    
0036640    S   t   r   e   a   m   .   S   e   t   S   S   T   P   r   o
0036660    c   e   d   u   r   e       =       {   }   ;  \r  \r        
0036700    S   e   n   d   A   t   t   e   n   t   i   o   n   N   o   p
0036720    :       S   t   r   e   a   m   .   S   e   n   d   A   t   t
0036740    e   n   t   i   o   n   P   r   o   c   e   d   u   r   e    
0036760    =       {   }   ;  \r  \r           W   a   i   t   A   t   t
0037000    e   n   t   i   o   n   N   o   p   :       S   t   r   e   a
0037020    m   .   W   a   i   t   A   t   t   e   n   t   i   o   n   P
0037040    r   o   c   e   d   u   r   e       =       {   R   E   T   U
0037060    R   N   [   0   ]   }   ;  \r  \r           -   -       F   i
0037100    l   e   S   t   r   e   a   m       s   p   e   c   i   f   i
0037120    c       p   r   o   c   e   d   u   r   e   s   ;       m   u
0037140    s   t       v   a   l   i   d   a   t   e       h   a   n   d
0037160    l   e  \r  \r           C   o   p   y   :       P   U   B   L
0037200    I   C       P   R   O   C   E   D   U   R   E       [   f   r
0037220    o   m   ,       t   o   :       S   t   r   e   a   m   .   H
0037240    a   n   d   l   e   ,       b   y   t   e   s   :       L   O
0037260    N   G       C   A   R   D   I   N   A   L   ]  \r            
0037300        R   E   T   U   R   N   S       [   b   y   t   e   s   C
0037320    o   p   i   e   d   :       L   O   N   G       C   A   R   D
0037340    I   N   A   L   ]       =       {  \r                   b   u
0037360    f   f   e   r   B   l   o   c   k   :       E   n   v   i   r
0037400    o   n   m   e   n   t   .   B   l   o   c   k   ;  \r        
0037420            b   y   t   e   s   T   o   T   r   a   n   s   f   e
0037440    r   :       C   A   R   D   I   N   A   L   ;  \r            
0037460        f   r   o   m   H   ,       t   o   H   :       M   y   H
0037500    a   n   d   l   e     254       N   I   L   ;  \r            
0037520        f   r   o   m   H     254       V   a   l   i   d   a   t
0037540    e   H   a   n   d   l   e   [   f   r   o   m       !       E
0037560    r   r   o   r       =   >       C   O   N   T   I   N   U   E
0037600    ]   ;  \r                   t   o   H     254       V   a   l
0037620    i   d   a   t   e   H   a   n   d   l   e   [   t   o       !
0037640        E   r   r   o   r       =   >       C   O   N   T   I   N
0037660    U   E   ]   ;  \r                   b   y   t   e   s   C   o
0037700    p   i   e   d     254       0   ;  \r                   S   E
0037720    L   E   C   T       T   R   U   E       F   R   O   M  \r    
0037740                        f   r   o   m   H       #       N   I   L
0037760        =   >       {  \r                                   W   H
0040000    I   L   E       b   y   t   e   s       #       0       D   O
0040020   \r  \t           b   y   t   e   s   T   o   T   r   a   n   s
0040040    f   e   r     254       f   r   o   m   H   .   d   a   t   a
0040060    B   y   t   e   s   I   n   B   u   f   f   e   r       -    
0040100    f   r   o   m   H   .   i   n   d   e   x   ;  \r  \t        
0040120    I   F       b   y   t   e   s   T   o   T   r   a   n   s   f
0040140    e   r       >       b   y   t   e   s       T   H   E   N    
0040160    b   y   t   e   s   T   o   T   r   a   n   s   f   e   r    
0040200  254       I   n   l   i   n   e   .   L   o   w   H   a   l   f
0040220    [   b   y   t   e   s   ]   ;  \r  \t           b   u   f   f
0040240    e   r   B   l   o   c   k     254       [  \r  \t            
0040260        b   l   o   c   k   P   o   i   n   t   e   r   :       f
0040300    r   o   m   H   .   b   u   f   f   e   r   ,  \r  \t        
0040320            s   t   a   r   t   I   n   d   e   x   :       f   r
0040340    o   m   H   .   i   n   d   e   x   ,  \r  \t                
0040360    s   t   o   p   I   n   d   e   x   P   l   u   s   O   n   e
0040400    :       f   r   o   m   H   .   i   n   d   e   x       +    
0040420    b   y   t   e   s   T   o   T   r   a   n   s   f   e   r   ]
0040440    ;  \r  \t           I   F       b   u   f   f   e   r   B   l
0040460    o   c   k   .   s   t   a   r   t   I   n   d   e   x       #
0040500        b   u   f   f   e   r   B   l   o   c   k   .   s   t   o
0040520    p   I   n   d   e   x   P   l   u   s   O   n   e       T   H
0040540    E   N  \r  \t                   t   o   .   p   u   t   [   t
0040560    o   ,       b   u   f   f   e   r   B   l   o   c   k   ,    
0040600    F   A   L   S   E   ]   ;  \r  \t           f   r   o   m   H
0040620    .   i   n   d   e   x     254       f   r   o   m   H   .   i
0040640    n   d   e   x       +       b   y   t   e   s   T   o   T   r
0040660    a   n   s   f   e   r   ;  \r  \t           b   y   t   e   s
0040700      254       b   y   t   e   s       -       b   y   t   e   s
0040720    T   o   T   r   a   n   s   f   e   r   ;  \r  \t           b
0040740    y   t   e   s   C   o   p   i   e   d     254       b   y   t
0040760    e   s   C   o   p   i   e   d       +       b   y   t   e   s
0041000    T   o   T   r   a   n   s   f   e   r   ;  \r  \t           I
0041020    F       b   y   t   e   s       =       0       O   R       f
0041040    r   o   m   H   .   e   o   f   I   n   B   u   f   f   e   r
0041060        T   H   E   N       R   E   T   U   R   N   ;  \r  \t    
0041100        A   d   v   a   n   c   e   B   u   f   f   e   r   [   f
0041120    r   o   m   H   ]   ;  \r  \t           E   N   D   L   O   O
0041140    P   }   ;  \r                           t   o   H       #    
0041160    N   I   L       =   >       {  \r                            
0041200        b   y   t   e   s   T   r   a   n   s   f   e   r   r   e
0041220    d   :       C   A   R   D   I   N   A   L   ;  \r  \t   w   h
0041240    y   :       S   t   r   e   a   m   .   C   o   m   p   l   e
0041260    t   i   o   n   C   o   d   e   ;  \r  \t   W   H   I   L   E
0041300        b   y   t   e   s       #       0       D   O  \r  \t    
0041320        b   y   t   e   s   T   o   T   r   a   n   s   f   e   r
0041340      254       t   o   H   .   b   u   f   f   e   r   B   y   t
0041360    e   s       -       t   o   H   .   i   n   d   e   x   ;  \r
0041400   \t           I   F       b   y   t   e   s   T   o   T   r   a
0041420    n   s   f   e   r       >       b   y   t   e   s       T   H
0041440    E   N       b   y   t   e   s   T   o   T   r   a   n   s   f
0041460    e   r     254       I   n   l   i   n   e   .   L   o   w   H
0041500    a   l   f   [   b   y   t   e   s   ]   ;  \r  \t           b
0041520    u   f   f   e   r   B   l   o   c   k     254       [  \r  \t
0041540                    b   l   o   c   k   P   o   i   n   t   e   r
0041560    :       t   o   H   .   b   u   f   f   e   r   ,  \r  \t    
0041600                s   t   a   r   t   I   n   d   e   x   :       t
0041620    o   H   .   i   n   d   e   x   ,  \r  \t                   s
0041640    t   o   p   I   n   d   e   x   P   l   u   s   O   n   e   :
0041660        t   o   H   .   i   n   d   e   x       +       b   y   t
0041700    e   s   T   o   T   r   a   n   s   f   e   r   ]   ;  \r  \t
0041720            [   b   y   t   e   s   T   r   a   n   s   f   e   r
0041740    r   e   d   ,       w   h   y   ,       ]     254       f   r
0041760    o   m   .   g   e   t   [  \r  \t                   f   r   o
0042000    m   ,       b   u   f   f   e   r   B   l   o   c   k   ,    
0042020    S   t   r   e   a   m   .   d   e   f   a   u   l   t   I   n
0042040    p   u   t   O   p   t   i   o   n   s   ]   ;  \r  \t        
0042060    I   F       w   h   y       =       s   s   t   C   h   a   n
0042100    g   e       T   H   E   N  \r  \t                   E   R   R
0042120    O   R       E   r   r   o   r   [   f   r   o   m   ,       o
0042140    t   h   e   r   ]   ;  \r  \t           t   o   H   .   i   n
0042160    d   e   x     254       t   o   H   .   i   n   d   e   x    
0042200    +       b   y   t   e   s   T   r   a   n   s   f   e   r   r
0042220    e   d   ;  \r  \t           b   y   t   e   s     254       b
0042240    y   t   e   s       -       b   y   t   e   s   T   r   a   n
0042260    s   f   e   r   r   e   d   ;  \r  \t           b   y   t   e
0042300    s   C   o   p   i   e   d     254       b   y   t   e   s   C
0042320    o   p   i   e   d       +       b   y   t   e   s   T   r   a
0042340    n   s   f   e   r   r   e   d   ;  \r  \t           I   F    
0042360    t   o   H   .   e   o   f   I   n   B   u   f   f   e   r    
0042400    A   N   D       t   o   H   .   i   n   d   e   x       >    
0042420    t   o   H   .   d   a   t   a   B   y   t   e   s   I   n   B
0042440    u   f   f   e   r       T   H   E   N       {  \r  \t        
0042460            t   o   H   .   d   a   t   a   B   y   t   e   s   I
0042500    n   B   u   f   f   e   r     254       t   o   H   .   i   n
0042520    d   e   x   ;  \r  \t                   t   o   H   .   l   e
0042540    n   g   t   h     254       C   o   m   p   u   t   e   L   e
0042560    n   g   t   h   [   t   o   H   ]   ;  \r  \t                
0042600    t   o   H   .   l   e   n   g   t   h   C   h   a   n   g   e
0042620    d     254       T   R   U   E   }   ;  \r  \t           I   F
0042640        b   y   t   e   s       =       0       O   R       w   h
0042660    y       =       e   n   d   O   f   S   t   r   e   a   m    
0042700    T   H   E   N       R   E   T   U   R   N   ;  \r  \t        
0042720    I   F       t   o   H   .   b   u   f   f   e   r   B   y   t
0042740    e   s       =       t   o   H   .   i   n   d   e   x       T
0042760    H   E   N       {  \r  \t                   I   F       t   o
0043000    H   .   e   o   f   I   n   B   u   f   f   e   r       T   H
0043020    E   N       {  \r                                            
0043040                t   o   H   .   d   a   t   a   B   y   t   e   s
0043060    I   n   B   u   f   f   e   r     254       t   o   H   .   b
0043100    u   f   f   e   r   B   y   t   e   s   ;  \r  \t            
0043120                t   o   H   .   l   e   n   g   t   h     254    
0043140    C   o   m   p   u   t   e   L   e   n   g   t   h   [   t   o
0043160    H   ]   ;  \r  \t                           t   o   H   .   l
0043200    e   n   g   t   h   C   h   a   n   g   e   d     254       T
0043220    R   U   E   }   ;  \r                                        
0043240            A   d   v   a   n   c   e   B   u   f   f   e   r   [
0043260    t   o   H   ]   }   ;  \r  \t           E   N   D   L   O   O
0043300    P   }   ;  \r                           E   N   D   C   A   S
0043320    E       =   >       E   R   R   O   R       E   r   r   o   r
0043340    [   f   r   o   m   ,       i   n   v   a   l   i   d   H   a
0043360    n   d   l   e   ]   }   ;  \r          \r           S   h   a
0043400    r   e   B   l   o   c   k   :       P   U   B   L   I   C    
0043420    P   R   O   C   E   D   U   R   E       [  \r                
0043440    s   t   r   e   a   m   :       S   t   r   e   a   m   .   H
0043460    a   n   d   l   e   ,       s   t   a   r   t   :       L   O
0043500    N   G       C   A   R   D   I   N   A   L   ,       l   e   n
0043520    g   t   h   :       C   A   R   D   I   N   A   L   ]  \r    
0043540                R   E   T   U   R   N   S       [   b   l   o   c
0043560    k   :       E   n   v   i   r   o   n   m   e   n   t   .   B
0043600    l   o   c   k   ]       =       {  \r                   h   :
0043620        M   y   H   a   n   d   l   e       =       V   a   l   i
0043640    d   a   t   e   H   a   n   d   l   e   [   s   t   r   e   a
0043660    m   ]   ;  \r                   S   e   t   I   n   d   e   x
0043700    [   s   t   r   e   a   m   ,       s   t   a   r   t   ]   ;
0043720   \r                   I   F       ~   h   .   e   o   f   I   n
0043740    B   u   f   f   e   r       A   N   D       h   .   i   n   d
0043760    e   x       =       h   .   d   a   t   a   B   y   t   e   s
0044000    I   n   B   u   f   f   e   r       T   H   E   N       A   d
0044020    v   a   n   c   e   B   u   f   f   e   r   [   h   ]   ;  \r
0044040                    b   l   o   c   k     254       [  \r        
0044060                    b   l   o   c   k   P   o   i   n   t   e   r
0044100    :       h   .   b   u   f   f   e   r   ,  \r                
0044120            s   t   a   r   t   I   n   d   e   x   :       h   .
0044140    i   n   d   e   x   ,  \r                           s   t   o
0044160    p   I   n   d   e   x   P   l   u   s   O   n   e   :        
0044200    -   -       c   h   e   c   k       f   o   r       o   v   e
0044220    r   f   l   o   w  \r                                   I   F
0044240        l   e   n   g   t   h       >       L   A   S   T   [   C
0044260    A   R   D   I   N   A   L   ]       -       h   .   i   n   d
0044300    e   x       T   H   E   N       h   .   d   a   t   a   B   y
0044320    t   e   s   I   n   B   u   f   f   e   r      \r            
0044340                        E   L   S   E       M   I   N   [   h   .
0044360    d   a   t   a   B   y   t   e   s   I   n   B   u   f   f   e
0044400    r   ,       h   .   i   n   d   e   x       +       l   e   n
0044420    g   t   h   ]   ]   }   ;  \r                  \r           G
0044440    e   t   F   i   l   e   :       P   U   B   L   I   C       P
0044460    R   O   C   E   D   U   R   E       [   s   t   r   e   a   m
0044500    :       S   t   r   e   a   m   .   H   a   n   d   l   e   ]
0044520   \r                   R   E   T   U   R   N   S       [   f   i
0044540    l   e   :       M   F   i   l   e   .   H   a   n   d   l   e
0044560    ]       =       {  \r                   R   E   T   U   R   N
0044600    [   V   a   l   i   d   a   t   e   H   a   n   d   l   e   [
0044620    s   t   r   e   a   m   ]   .   f   i   l   e   ]   }   ;  \r
0044640                   \r           E   n   d   O   f   :       P   U
0044660    B   L   I   C       P   R   O   C   E   D   U   R   E       [
0044700    s   t   r   e   a   m   :       S   t   r   e   a   m   .   H
0044720    a   n   d   l   e   ]       R   E   T   U   R   N   S       [
0044740    B   O   O   L   E   A   N   ]       =       {  \r            
0044760        h   :       M   y   H   a   n   d   l   e       =       V
0045000    a   l   i   d   a   t   e   H   a   n   d   l   e   [   s   t
0045020    r   e   a   m   ]   ;  \r                   R   E   T   U   R
0045040    N   [   h   .   e   o   f   I   n   B   u   f   f   e   r    
0045060    A   N   D       h   .   i   n   d   e   x       =       h   .
0045100    d   a   t   a   B   y   t   e   s   I   n   B   u   f   f   e
0045120    r   ]   }   ;  \r  \r           G   e   t   L   e   n   g   t
0045140    h   :       P   U   B   L   I   C       P   R   O   C   E   D
0045160    U   R   E       [   s   t   r   e   a   m   :       S   t   r
0045200    e   a   m   .   H   a   n   d   l   e   ]  \r                
0045220    R   E   T   U   R   N   S       [   f   i   l   e   L   e   n
0045240    g   t   h   :       L   O   N   G       C   A   R   D   I   N
0045260    A   L   ]       =       {  \r                   h   :       M
0045300    y   H   a   n   d   l   e       =       V   a   l   i   d   a
0045320    t   e   H   a   n   d   l   e   [   s   t   r   e   a   m   ]
0045340    ;  \r                   R   E   T   U   R   N   [   h   .   l
0045360    e   n   g   t   h   ]   }   ;  \r  \r           S   e   t   L
0045400    e   n   g   t   h   :       P   U   B   L   I   C       P   R
0045420    O   C   E   D   U   R   E       [   s   t   r   e   a   m   :
0045440        S   t   r   e   a   m   .   H   a   n   d   l   e   ,    
0045460    f   i   l   e   L   e   n   g   t   h   :       L   O   N   G
0045500        C   A   R   D   I   N   A   L   ]       =  \r            
0045520        B   E   G   I   N  \r                   h   :       M   y
0045540    H   a   n   d   l   e       =       V   a   l   i   d   a   t
0045560    e   H   a   n   d   l   e   [   s   t   r   e   a   m   ]   ;
0045600   \r                 253   I   F       M   F   i   l   e   .   G
0045620    e   t   A   c   c   e   s   s   [   h   .   f   i   l   e   ]
0045640        =       l   o   g       T   H   E   N  \r                
0045660            I   F       h   .   l   e   n   g   t   h       <    
0045700    f   i   l   e   L   e   n   g   t   h      \r                
0045720                        O   R       f   i   l   e   L   e   n   g
0045740    t   h       <       M   F   i   l   e   O   p   s   .   G   e
0045760    t   R   e   a   d   L   e   n   g   t   h   F   o   r   L   o
0046000    g   [   h   .   f   i   l   e   ]       T   H   E   N  \r    
0046020                            E   R   R   O   R       E   r   r   o
0046040    r   [   s   t   r   e   a   m   ,       i   n   v   a   l   i
0046060    d   O   p   e   r   a   t   i   o   n   ]  \r                
0046100            E   L   S   E       R   E   T   U   R   N   ; 273  \r
0046120                    I   n   t   e   r   n   a   l   S   e   t   L
0046140    e   n   g   t   h   [   h   ,       s   t   r   e   a   m   ,
0046160        f   i   l   e   L   e   n   g   t   h   ]   ;  \r        
0046200            E   N   D   ;  \r  \r           I   n   t   e   r   n
0046220    a   l   S   e   t   L   e   n   g   t   h   :       P   R   O
0046240    C   E   D   U   R   E       [  \r                   h   :    
0046260    M   y   H   a   n   d   l   e   ,       s   t   r   e   a   m
0046300    :       S   t   r   e   a   m   .   H   a   n   d   l   e   ,
0046320        f   i   l   e   L   e   n   g   t   h   :       L   O   N
0046340    G       C   A   R   D   I   N   A   L   ]       =  \r        
0046360            B   E   G   I   N  \r                   o   l   d   L
0046400    e   n   g   t   h   :       L   O   N   G       C   A   R   D
0046420    I   N   A   L   ;  \r                   n   e   w   L   e   n
0046440    g   t   h   I   n   P   a   g   e   s   :       F   i   l   e
0046460    .   P   a   g   e   C   o   u   n   t       =       P   a   g
0046500    e   s   F   o   r   B   y   t   e   s   [   f   i   l   e   L
0046520    e   n   g   t   h   ]       -       h   .   s   t   r   e   a
0046540    m   B   a   s   e   ;  \r                   b   u   f   f   e
0046560    r   M   i   n   :       L   O   N   G       C   A   R   D   I
0046600    N   A   L       =       I   n   l   i   n   e   .   L   o   n
0046620    g   M   u   l   t   [  \r                           h   .   f
0046640    i   r   s   t   F   i   l   e   P   a   g   e   I   n   B   u
0046660    f   f   e   r   ,       b   y   t   e   s   P   e   r   P   a
0046700    g   e   ]   ;  \r                   I   F       ~   h   .   w
0046720    r   i   t   e       T   H   E   N       E   R   R   O   R    
0046740    E   r   r   o   r   [   s   t   r   e   a   m   ,       i   n
0046760    v   a   l   i   d   O   p   e   r   a   t   i   o   n   ]   ;
0047000   \r                   I   F       I   n   l   i   n   e   .   H
0047020    i   g   h   H   a   l   f   [   n   e   w   L   e   n   g   t
0047040    h   I   n   P   a   g   e   s   ]       #       0       T   H
0047060    E   N  \r                           E   R   R   O   R       E
0047100    r   r   o   r   [   s   t   r   e   a   m   ,       i   n   d
0047120    e   x   O   u   t   O   f   R   a   n   g   e   ]   ;  \r    
0047140                o   l   d   L   e   n   g   t   h     254       h
0047160    .   l   e   n   g   t   h   ;  \r                   M   F   i
0047200    l   e   .   S   e   t   L   e   n   g   t   h   [   h   .   f
0047220    i   l   e   ,       f   i   l   e   L   e   n   g   t   h   ]
0047240    ;  \r                   h   .   l   e   n   g   t   h     254
0047260        f   i   l   e   L   e   n   g   t   h   ;  \r            
0047300        I   F       n   e   w   L   e   n   g   t   h   I   n   P
0047320    a   g   e   s       >       h   .   f   i   l   e   P   a   g
0047340    e   s       T   H   E   N      \r                           h
0047360    .   f   i   l   e   P   a   g   e   s     254       I   n   l
0047400    i   n   e   .   L   o   w   H   a   l   f   [   n   e   w   L
0047420    e   n   g   t   h   I   n   P   a   g   e   s   ]   ;  \r    
0047440                S   E   L   E   C   T       T   R   U   E       F
0047460    R   O   M  \r                           f   i   l   e   L   e
0047500    n   g   t   h       <       b   u   f   f   e   r   M   i   n
0047520        =   >       {  \r                                   p   a
0047540    g   e   :       C   A   R   D   I   N   A   L     254  \r  \t
0047560            I   F       f   i   l   e   L   e   n   g   t   h    
0047600    <   =       h   .   b   u   f   f   e   r   S   p   a   c   e
0047620    P   a   g   e   s   *   b   y   t   e   s   P   e   r   P   a
0047640    g   e   /   2       T   H   E   N       0  \r  \t           E
0047660    L   S   E       (   I   n   l   i   n   e   .   L   o   n   g
0047700    D   i   v   [   f   i   l   e   L   e   n   g   t   h   ,    
0047720    b   y   t   e   s   P   e   r   P   a   g   e   ]       -    
0047740    h   .   b   u   f   f   e   r   S   p   a   c   e   P   a   g
0047760    e   s   /   2   )   ;  \r                                   S
0050000    e   t   u   p   B   u   f   f   e   r   [   h   ,       p   a
0050020    g   e   ]   ;  \r  \t   h   .   i   n   d   e   x     254    
0050040    h   .   d   a   t   a   B   y   t   e   s   I   n   B   u   f
0050060    f   e   r   }   ;  \r                           f   i   l   e
0050100    L   e   n   g   t   h       >       b   u   f   f   e   r   M
0050120    i   n       +       h   .   b   u   f   f   e   r   B   y   t
0050140    e   s       =   >       h   .   e   o   f   I   n   B   u   f
0050160    f   e   r     254       F   A   L   S   E   ;  \r            
0050200                o   l   d   L   e   n   g   t   h       >       f
0050220    i   l   e   L   e   n   g   t   h       =   >       {  \r    
0050240                                h   .   d   a   t   a   B   y   t
0050260    e   s   I   n   B   u   f   f   e   r     254       I   n   l
0050300    i   n   e   .   L   o   w   H   a   l   f   [   f   i   l   e
0050320    L   e   n   g   t   h       -       b   u   f   f   e   r   M
0050340    i   n   ]   ;  \r  \t   h   .   i   n   d   e   x     254    
0050360    M   I   N   [   h   .   d   a   t   a   B   y   t   e   s   I
0050400    n   B   u   f   f   e   r   ,       h   .   i   n   d   e   x
0050420    ]   ;  \r  \t   h   .   e   o   f   I   n   B   u   f   f   e
0050440    r     254       T   R   U   E   }   ;  \r                    
0050460        E   N   D   C   A   S   E       =   >           h   .   d
0050500    a   t   a   B   y   t   e   s   I   n   B   u   f   f   e   r
0050520      254       I   n   l   i   n   e   .   L   o   w   H   a   l
0050540    f   [   f   i   l   e   L   e   n   g   t   h       -       b
0050560    u   f   f   e   r   M   i   n   ]   ;  \r                   R
0050600    E   T   U   R   N   ;  \r                   E   N   D   ;  \r
0050620   \r           -   -       U   t   i   l   i   t   i   e   s  \r
0050640   \r           m   a   x   B   u   f   f   e   r   P   a   g   e
0050660    s   :       C   A   R   D   I   N   A   L       =       4   0
0050700    ;  \r           s   w   a   p   U   n   i   t   S   i   z   e
0050720    :       C   A   R   D   I   N   A   L       =       5   ;  \r
0050740            g   r   o   w   I   n   c   r   e   m   e   n   t   :
0050760        C   A   R   D   I   N   A   L       =       1   0   ;  \r
0051000           \r           l   o   c   a   l   B   u   f   f   e   r
0051020    P   a   g   e   s   :       C   A   R   D   I   N   A   L    
0051040  254       m   a   x   B   u   f   f   e   r   P   a   g   e   s
0051060    ;  \r           l   o   c   a   l   O   f   f   s   e   t   :
0051100        C   A   R   D   I   N   A   L     254       s   w   a   p
0051120    U   n   i   t   S   i   z   e   ;  \r          \r           C
0051140    o   m   p   u   t   e   L   e   n   g   t   h   :       P   R
0051160    O   C   E   D   U   R   E       [   h   :       M   y   H   a
0051200    n   d   l   e   ]       R   E   T   U   R   N   S       [   L
0051220    O   N   G       C   A   R   D   I   N   A   L   ]       =    
0051240    I   N   L   I   N   E       {  \r                   R   E   T
0051260    U   R   N   [   I   n   l   i   n   e   .   L   o   n   g   M
0051300    u   l   t   [   h   .   f   i   r   s   t   F   i   l   e   P
0051320    a   g   e   I   n   B   u   f   f   e   r   ,       b   y   t
0051340    e   s   P   e   r   P   a   g   e   ]       +       h   .   d
0051360    a   t   a   B   y   t   e   s   I   n   B   u   f   f   e   r
0051400    ]   }   ;  \r          \r           C   l   e   a   n   u   p
0051420    :       P   R   O   C   E   D   U   R   E       [   h   :    
0051440    M   y   H   a   n   d   l   e   ,       f   i   l   e   :    
0051460    M   F   i   l   e   .   H   a   n   d   l   e   ]       =  \r
0051500                    B   E   G   I   N  \r                   I   F
0051520        h   .   w   r   i   t   e       T   H   E   N       {  \r
0051540                            S   p   a   c   e   .   F   o   r   c
0051560    e   O   u   t   [   h   .   b   u   f   f   e   r   S   p   a
0051600    c   e   ]   }   ;  \r                   I   F       h   .   l
0051620    e   n   g   t   h   C   h   a   n   g   e   d       T   H   E
0051640    N       {  \r                           M   F   i   l   e   .
0051660    S   e   t   L   e   n   g   t   h   [   f   i   l   e   ,    
0051700    h   .   l   e   n   g   t   h   ]   ;  \r                    
0051720        h   .   l   e   n   g   t   h   C   h   a   n   g   e   d
0051740      254       F   A   L   S   E   }   ;  \r                   E
0051760    N   D   ;  \r          \r           S   e   t   u   p   B   u
0052000    f   f   e   r   :       P   R   O   C   E   D   U   R   E    
0052020    [  \r                   h   :       M   y   H   a   n   d   l
0052040    e   ,       f   i   l   e   P   a   g   e   :       C   A   R
0052060    D   I   N   A   L   ,       s   e   t   L   e   n   g   t   h
0052100    :       B   O   O   L   E   A   N     254       F   A   L   S
0052120    E   ]       =  \r                   B   E   G   I   N  \r    
0052140                f   i   l   e   P   a   g   e   s   F   o   l   l
0052160    o   w   i   n   g   :       C   A   R   D   I   N   A   L   ;
0052200   \r                   i   n   d   e   x   O   f   S   t   a   r
0052220    t   O   f   B   u   f   f   e   r   :       L   O   N   G    
0052240    C   A   R   D   I   N   A   L   ;  \r                   I   F
0052260        h   .   b   u   f   f   e   r   S   p   a   c   e   P   a
0052300    g   e   s       =       0       O   R       h   .   f   i   l
0052320    e   P   a   g   e   s       <   =       f   i   l   e   P   a
0052340    g   e       T   H   E   N       {  \r                        
0052360    h   .   i   n   d   e   x     254       h   .   b   u   f   f
0052400    e   r   B   y   t   e   s     254       h   .   d   a   t   a
0052420    B   y   t   e   s   I   n   B   u   f   f   e   r     254    
0052440    0   ;  \r                           h   .   e   o   f   I   n
0052460    B   u   f   f   e   r     254       T   R   U   E   ;  \r    
0052500                        R   E   T   U   R   N   }   ;  \r        
0052520            I   F       h   .   b   u   f   f   e   r       =    
0052540    N   I   L       T   H   E   N  \r                           B
0052560    E   G   I   N  \r                           h   .   b   u   f
0052600    f   e   r   S   p   a   c   e     254       S   p   a   c   e
0052620    .   A   l   l   o   c   a   t   e   [   c   o   u   n   t   :
0052640        h   .   b   u   f   f   e   r   S   p   a   c   e   P   a
0052660    g   e   s   ]   ;  \r                           h   .   b   u
0052700    f   f   e   r     254       h   .   b   u   f   f   e   r   S
0052720    p   a   c   e   .   p   o   i   n   t   e   r   ;  \r        
0052740                    E   N   D  \r                   E   L   S   E
0052760        E   m   p   t   y   B   u   f   f   e   r   [   h   ,    
0053000    F   A   L   S   E   ]   ;  \r                   I   F       s
0053020    e   t   L   e   n   g   t   h       T   H   E   N      \r    
0053040                        M   F   i   l   e   O   p   s   .   S   e
0053060    t   M   i   n   i   m   u   m   F   i   l   e   D   a   t   a
0053100    P   a   g   e   s   [   h   .   f   i   l   e   ,       h   .
0053120    f   i   l   e   P   a   g   e   s       +       h   .   s   t
0053140    r   e   a   m   B   a   s   e       !      \r                
0053160                    U   N   W   I   N   D       =   >       {   S
0053200    p   a   c   e   .   D   e   a   l   l   o   c   a   t   e   [
0053220    h   .   b   u   f   f   e   r   S   p   a   c   e   ]   ;    
0053240    h   .   b   u   f   f   e   r     254       N   I   L   }   ]
0053260    ;  \r                   [   ]     254       S   p   a   c   e
0053300    .   M   a   p   A   t   [  \r                           a   t
0053320    :       h   .   b   u   f   f   e   r   S   p   a   c   e   ,
0053340       \r                           w   i   n   d   o   w   :    
0053360    [   h   .   c   a   p   a   ,       f   i   l   e   P   a   g
0053400    e       +       (   l   e   a   d   e   r   P   a   g   e   s
0053420        +       h   .   s   t   r   e   a   m   B   a   s   e   )
0053440    ,       h   .   b   u   f   f   e   r   S   p   a   c   e   P
0053460    a   g   e   s   ]   ,  \r                           a   c   c
0053500    e   s   s   :       I   F       h   .   r   e   a   d       A
0053520    N   D       ~   h   .   w   r   i   t   e       A   N   D    
0053540    ~   h   .   s   h   r   i   n   k       T   H   E   N       r
0053560    e   a   d   O   n   l   y       E   L   S   E       r   e   a
0053600    d   W   r   i   t   e   ,  \r                           u   s
0053620    a   g   e   :       M   U   s   a   g   e   .   m   F   i   l
0053640    e   L   o   c   a   l   S   t   r   e   a   m   ,  \r        
0053660                    s   w   a   p   U   n   i   t   s   :       [
0053700    u   n   i   f   o   r   m   [   s   w   a   p   U   n   i   t
0053720    S   i   z   e   ]   ]   ]   ;  \r                   f   i   l
0053740    e   P   a   g   e   s   F   o   l   l   o   w   i   n   g    
0053760  254       h   .   f   i   l   e   P   a   g   e   s       -    
0054000    f   i   l   e   P   a   g   e   ;  \r                   i   n
0054020    d   e   x   O   f   S   t   a   r   t   O   f   B   u   f   f
0054040    e   r     254       L   O   N   G   [   f   i   l   e   P   a
0054060    g   e   ]   *   b   y   t   e   s   P   e   r   P   a   g   e
0054100    ;  \r                       -   -       b   u   g       w   i
0054120    t   h       h   .   s   t   r   e   a   m   B   a   s   e    
0054140    i   n       h   e   r   e       s   o   m   e   w   h   e   r
0054160    e               *   *   *   *   *   *   *   *   *   *   *   *
0054200    *   *   *  \r                   I   F       h   .   e   o   f
0054220    I   n   B   u   f   f   e   r     254       (   h   .   l   e
0054240    n   g   t   h       <   =       (   i   n   d   e   x   O   f
0054260    S   t   a   r   t   O   f   B   u   f   f   e   r       +    
0054300    h   .   b   u   f   f   e   r   S   p   a   c   e   P   a   g
0054320    e   s   *   b   y   t   e   s   P   e   r   P   a   g   e   )
0054340    )       T   H   E   N  \r                           h   .   d
0054360    a   t   a   B   y   t   e   s   I   n   B   u   f   f   e   r
0054400      254       I   n   l   i   n   e   .   L   o   w   H   a   l
0054420    f   [   h   .   l   e   n   g   t   h       -       i   n   d
0054440    e   x   O   f   S   t   a   r   t   O   f   B   u   f   f   e
0054460    r   ]  \r                   E   L   S   E       h   .   d   a
0054500    t   a   B   y   t   e   s   I   n   B   u   f   f   e   r    
0054520  254       h   .   b   u   f   f   e   r   S   p   a   c   e   P
0054540    a   g   e   s   *   b   y   t   e   s   P   e   r   P   a   g
0054560    e   ;  \r                   h   .   b   u   f   f   e   r   B
0054600    y   t   e   s     254  \r                           M   I   N
0054620    [   f   i   l   e   P   a   g   e   s   F   o   l   l   o   w
0054640    i   n   g   ,       h   .   b   u   f   f   e   r   S   p   a
0054660    c   e   P   a   g   e   s   ]       *       b   y   t   e   s
0054700    P   e   r   P   a   g   e   ;  \r                   h   .   f
0054720    i   r   s   t   F   i   l   e   P   a   g   e   I   n   B   u
0054740    f   f   e   r     254       f   i   l   e   P   a   g   e   ;
0054760   \r                   R   E   T   U   R   N  \r                
0055000    E   N   D   ;  \r  \r           E   m   p   t   y   B   u   f
0055020    f   e   r   :       P   R   O   C   E   D   U   R   E       [
0055040    h   :       M   y   H   a   n   d   l   e   ,       d   e   l
0055060    e   t   e   :       B   O   O   L   E   A   N   ,       f   i
0055100    l   e   :       M   F   i   l   e   .   H   a   n   d   l   e
0055120      254       N   I   L   ]       =  \r                   B   E
0055140    G   I   N  \r                   I   F       h   .   b   u   f
0055160    f   e   r       =       N   I   L       T   H   E   N       R
0055200    E   T   U   R   N   ;  \r                   I   F       f   i
0055220    l   e       =       N   I   L       T   H   E   N       f   i
0055240    l   e     254       h   .   f   i   l   e   ;  \r            
0055260        C   l   e   a   n   u   p   [   h   ,       f   i   l   e
0055300    !           U   N   W   I   N   D       =   >       I   F    
0055320    d   e   l   e   t   e       T   H   E   N       {  \r        
0055340                    [   ]     254       S   p   a   c   e   .   U
0055360    n   m   a   p   A   t   [   h   .   b   u   f   f   e   r   S
0055400    p   a   c   e   .   p   o   i   n   t   e   r   ]   ;  \r    
0055420                        S   p   a   c   e   .   D   e   a   l   l
0055440    o   c   a   t   e   [   h   .   b   u   f   f   e   r   S   p
0055460    a   c   e   ]   ;      \r                           h   .   b
0055500    u   f   f   e   r     254       N   I   L   }   ]   ;  \r    
0055520                I   F       d   e   l   e   t   e       T   H   E
0055540    N       {  \r                           [   ]     254       S
0055560    p   a   c   e   .   U   n   m   a   p   A   t   [   h   .   b
0055600    u   f   f   e   r   S   p   a   c   e   .   p   o   i   n   t
0055620    e   r   ]   ;  \r                           S   p   a   c   e
0055640    .   D   e   a   l   l   o   c   a   t   e   [   h   .   b   u
0055660    f   f   e   r   S   p   a   c   e   ]   ;      \r            
0055700                h   .   b   u   f   f   e   r     254       N   I
0055720    L   }  \r                   E   L   S   E       [   ]     254
0055740        S   p   a   c   e   .   U   n   m   a   p   A   t   [   h
0055760    .   b   u   f   f   e   r   S   p   a   c   e   .   p   o   i
0056000    n   t   e   r   ]   ;  \r                   h   .   i   n   d
0056020    e   x     254       h   .   b   u   f   f   e   r   B   y   t
0056040    e   s     254       h   .   d   a   t   a   B   y   t   e   s
0056060    I   n   B   u   f   f   e   r     254       0   ;  \r        
0056100            R   E   T   U   R   N  \r                   E   N   D
0056120    ;  \r  \r           A   d   v   a   n   c   e   B   u   f   f
0056140    e   r   :       P   R   O   C   E   D   U   R   E       [   h
0056160    :       M   y   H   a   n   d   l   e   ]       =  \r        
0056200            B   E   G   I   N  \r                   f   i   l   e
0056220    P   a   g   e   s   I   n   B   u   f   f   e   r   :       C
0056240    A   R   D   I   N   A   L       =       h   .   b   u   f   f
0056260    e   r   B   y   t   e   s   /   b   y   t   e   s   P   e   r
0056300    P   a   g   e   ;  \r                   n   e   x   t   P   a
0056320    g   e   :       C   A   R   D   I   N   A   L       =       h
0056340    .   f   i   r   s   t   F   i   l   e   P   a   g   e   I   n
0056360    B   u   f   f   e   r       +       f   i   l   e   P   a   g
0056400    e   s   I   n   B   u   f   f   e   r   ;  \r                
0056420    o   l   d   F   i   l   e   P   a   g   e   s   :       C   A
0056440    R   D   I   N   A   L       =       h   .   f   i   l   e   P
0056460    a   g   e   s   ;  \r                   c   h   a   n   g   e
0056500    S   i   z   e   :       B   O   O   L   E   A   N     254    
0056520    F   A   L   S   E   ;  \r                   s   e   t   u   p
0056540    O   f   f   s   e   t   :       C   A   R   D   I   N   A   L
0056560      254       0   ;  \r                   I   F       n   e   x
0056600    t   P   a   g   e       >   =       h   .   f   i   l   e   P
0056620    a   g   e   s       T   H   E   N       {  \r                
0056640            h   .   f   i   l   e   P   a   g   e   s     254    
0056660    h   .   f   i   l   e   P   a   g   e   s       +       g   r
0056700    o   w   I   n   c   r   e   m   e   n   t   ;       c   h   a
0056720    n   g   e   S   i   z   e     254       T   R   U   E   }   ;
0056740   \r                   S   e   t   u   p   B   u   f   f   e   r
0056760    [   h   ,       M   A   X   [   n   e   x   t   P   a   g   e
0057000    ,       s   e   t   u   p   O   f   f   s   e   t   ]   -   s
0057020    e   t   u   p   O   f   f   s   e   t   ,       c   h   a   n
0057040    g   e   S   i   z   e       !  \r                           U
0057060    N   W   I   N   D       =   >       h   .   f   i   l   e   P
0057100    a   g   e   s     254       o   l   d   F   i   l   e   P   a
0057120    g   e   s   ]   ;  \r                   h   .   i   n   d   e
0057140    x     254  \r                           M   I   N   [   (   n
0057160    e   x   t   P   a   g   e   -   h   .   f   i   r   s   t   F
0057200    i   l   e   P   a   g   e   I   n   B   u   f   f   e   r   )
0057220        *       b   y   t   e   s   P   e   r   P   a   g   e   ,
0057240        h   .   d   a   t   a   B   y   t   e   s   I   n   B   u
0057260    f   f   e   r   ]   ;  \r                   R   E   T   U   R
0057300    N  \r                   E   N   D   ;  \r  \r           P   a
0057320    g   e   s   F   o   r   B   y   t   e   s   :       P   R   O
0057340    C   E   D   U   R   E       [   w   :       L   O   N   G    
0057360    C   A   R   D   I   N   A   L   ]       R   E   T   U   R   N
0057400    S       [   p   :       L   O   N   G       C   A   R   D   I
0057420    N   A   L   ]       =  \r                   I   N   L   I   N
0057440    E       {   R   E   T   U   R   N   [   (   w   +   b   y   t
0057460    e   s   P   e   r   P   a   g   e   -   1   )   /   b   y   t
0057500    e   s   P   e   r   P   a   g   e   ]   }   ;  \r          \r
0057520            E   N   D   .       o   f       M   S   t   r   e   a
0057540    m   I   m   p   l  \r          \r          \r                
0057554