$ od -c -N 50000 [Indigo]<Chipmonk>XChipmonk>chipmonk-sources.dm!11
0000000  377  \0  \0   p   p   d   e   f   s   .   m   e   s   a  \0 373
0000020  234 020 215   [  \0  \0 376 001  \0 341 234   -   -       d   e
0000040    f   i   n   i   t   i   o   n   s       m   o   d   u   l   e
0000060        f   o   r       s   i   l   i   c   o   n       (   p   r
0000100    e   t   t   y       p   i   c   t   u   r   e   )       p   r
0000120    o   g   r   a   m  \r   -   -       l   a   s   t       m   o
0000140    d   i   f   i   e   d       b   y       M   c   C   r   e   i
0000160    g   h   t   ,       D   e   c   e   m   b   e   r       2   1
0000200    ,       1   9   8   3           1   0   :   0   0       A   M
0000220   \r   -   -           t   o       i   n   c   o   r   p   o   r
0000240    a   t   e       m   u   l   t   i   p   l   e       i   m   p
0000260    l   a   n   t       l   e   v   e   l   s  \r   -   -       m
0000300    o   d   i   f   i   e   d       b   y       P   e   t   i   t
0000320    ,       S   e   p   t   e   m   b   e   r       1   8   ,    
0000340    1   9   8   1           2   :   4   0       P   M  \r  \r   D
0000360    I   R   E   C   T   O   R   Y  \r           S   e   g   m   e
0000400    n   t   D   e   f   s   ,  \r           m   u   l   t   i   G
0000420    r   a   p   h   i   c   s   D   e   f   s 376 001  \0 372   Y
0000440    ,  \r           S   t   r   e   a   m   D   e   f   s   ;  \r
0000460   \r   p   p   d   e   f   s   :       D   E   F   I   N   I   T
0000500    I   O   N   S       I   M   P   O   R   T   S       S   e   g
0000520    m   e   n   t   D   e   f   s   ,       m   u   l   t   i   G
0000540    r   a   p   h   i   c   s   D   e   f   s   ,       S   t   r
0000560    e   a   m   D   e   f   s       =  \r           B   E   G   I
0000600    N       O   P   E   N       m   u   l   t   i   G   r   a   p
0000620    h   i   c   s   D   e   f   s   ,       S   t   r   e   a   m
0000640    D   e   f   s   ;  \r  \r           c   o   m   p   i   l   e
0000660    C   h   e   c   k   s   :       B   O   O   L   E   A   N    
0000700    =       T   R   U   E   ;  \r  \r           I   N   T   :    
0000720    T   Y   P   E       =       L   O   N   G       I   N   T   E
0000740    G   E   R   ;  \r           N   A   T   :       T   Y   P   E
0000760        =       I   N   T   E   G   E   R   [   0   .   .   L   A
0001000    S   T   [   I   N   T   E   G   E   R   ]   ]   ;  \r  \r    
0001020        -   -       N   o   t   e   :       T   h   e       C   h
0001040  376 001  \0   ; 367   i   p   m   o   n   k       d   e   s   i
0001060    g   n       c   o   o   r   d   i   n   a   t   e       s   y
0001100    s   t   e   m       h   a   s       x       i   n   c   r   e
0001120    a   s   i   n   g       t   o       t   h   e       r   i   g
0001140    h   t  \r           -   -       a   n   d       y       i   n
0001160    c   r   e   a   s   i   n   g       d   o   w   n   w   a   r
0001200    d   .           [   x   :       0   ,       y   :       0   ]
0001220        i   s       t   h   e       c   e   n   t   e   r       o
0001240    f       t   h   e       d   e   s   i   g   n  \r           -
0001260    -       s   p   a   c   e   .  \r  \r           l   o   c   N
0001300    u   m   :       T   Y   P   E       =       I   N   T   E   G
0001320    E   R   ;  \r           L   a   m   b   d   a   ,       l   a
0001340    m   b   d   a   :       l   o   c   N   u   m       =       2
0001360    ;       -   -       2       l   o   c   N   u   m   s       p
0001400    e   r       l   a   m   b   d   a  \r           P   o   i   n
0001420    t   :       T   Y   P   E       =       R   E   C   O   R   D
0001440        [   x   ,     376 001  \0 234   ]   y   :       l   o   c
0001460    N   u   m   ]   ;  \r           R   e   c   t   :       T   Y
0001500    P   E       =       R   E   C   O   R   D       [   x   1   ,
0001520        y   1   ,       x   2   ,       y   2   :       l   o   c
0001540    N   u   m   ]   ;  \r           u   n   i   v   :       R   e
0001560    c   t       =       [   x   1   :       -   L   A   S   T   [
0001600    l   o   c   N   u   m   ]   ,       y   1   :       -   L   A
0001620    S   T   [   l   o   c   N   u   m   ]   ,  \r                
0001640    x   2   :       L   A   S   T   [   l   o   c   N   u   m   ]
0001660    ,       y   2   :       L   A   S   T   [   l   o   c   N   u
0001700    m   ]   ]   ;  \r           u   n   i   v   e   r   s   e   :
0001720        R   e   c   t       -   -       _       u   n   i   v    
0001740    -   -       ;  \r           o   r   i   e   n   t   a   t   i
0001760    o   n   :       T   Y   P   E       =       [   0   .   .   7
0002000    ]       _       0   ;       -   -       m   u   l   t   i   p
0002020    l   e       o   f       4   5       d   e   g   r   e   e   s
0002040        c   l   o   c   k   w   i   s   e 376 001  \0 244   /  \r
0002060            r   e   f   l   e   c   t   i   o   n   :       T   Y
0002100    P   E       =       [   0   .   .   1   ]       _       0   ;
0002120        -   -       1       m   e   a   n   s       m   i   r   r
0002140    o   r       i   n       x       (   x       _       -   x   )
0002160   \r           o   r   i   e   n   t   a   t   i   o   n   I   n
0002200    d   e   x   :       T   Y   P   E       =       [   0   .   .
0002220    1   5   ]       _       0   ;       -   -       =       2   *
0002240    o   r   i   e   n   t   a   t   i   o   n   +   r   e   f   l
0002260    e   c   t   i   o   n  \r           -   -       A   n       o
0002300    r   i   e   n   t   a   t   i   o   n   I   n   d   e   x    
0002320    i   d   x       i   s       c   o   m   p   o   s   e   d    
0002340    o   f       t   w   o       p   a   r   t   s   :  \r        
0002360    -   -                   a       c   l   o   c   k   w   i   s
0002400    e       r   o   t   a   t   i   o   n       o   f       (   i
0002420    d   x   /   2   )   *   4   5       d   e   g   r   e   e   s
0002440    ,  \r           -   -                   f   o   l   l   o 376
0002460  001  \0 351 230   w   e   d       b   y       a       r   e   f
0002500    l   e   c   t   i   o   n       i   n       x       i   f    
0002520    (   i   d   x       M   O   D       2   )   #   0   .  \r    
0002540        -   -       O   d   d       m   u   l   t   i   p   l   e
0002560    s       o   f       4   5       d   e   g   r   e   e   s    
0002600    a   r   e       n   o   t       y   e   t       s   u   p   p
0002620    o   r   t   e   d   .  \r  \r           L   e   v   e   l   :
0002640        T   Y   P   E       =       M   A   C   H   I   N   E    
0002660    D   E   P   E   N   D   E   N   T   {  \r                   c
0002700    u   t   (   0   )   ,       d   i   f   (   1   )   ,       p
0002720    o   l   (   2   )   ,       m   e   t   (   3   )   ,       i
0002740    m   p   (   4   )   ,       o   v   g   (   5   )   ,       b
0002760    u   r   (   6   )   ,  \r                   s   n   e   r   d
0003000    (   7   )   ,       c   u   t   2   (   8   )   ,       p   d
0003020    i   f   (   9   )   ,       p   w   e   l   C   o   n   t   (
0003040    1   0   )   ,       m   e   t   2   (   1   1   )   ,       p
0003060    w   e   l   ( 376 001  \0 266 204   1   2   )   ,  \r        
0003100            n   w   e   l   (   1   3   )   ,       n   w   e   l
0003120    C   o   n   t   (   1   4   )   ,       N   O   c   O   L   (
0003140    1   5   )   ,  \r                   l   1   6   ,       l   1
0003160    7   ,       l   1   8   ,       l   1   9   ,       l   2   0
0003200    ,       l   2   1   ,       l   2   2   ,       l   2   3   ,
0003220        l   2   4   ,       l   2   5   ,       l   2   6   ,    
0003240    l   2   7   ,       l   2   8   ,       l   2   9   ,       l
0003260    3   0   ,       l   3   1   ,  \r                   l   3   2
0003300    ,       l   3   3   ,       l   3   4   ,       l   3   5   ,
0003320        l   3   6   ,       l   3   7   ,       l   3   8   ,    
0003340    l   3   9   ,       l   4   0   ,       l   4   1   ,       l
0003360    4   2   ,       l   4   3   ,       l   4   4   ,       l   4
0003400    5   ,       l   4   6   ,       l   4   7   ,  \r            
0003420        l   4   8   ,       l   4   9   ,       l   5   0   ,    
0003440    l   5   1   ,       l   5   2   ,       l   5   3   ,       l
0003460    5   4   ,       l   5   5   ,     376 001  \0 246 331   l   5
0003500    6   ,       l   5   7   ,       l   5   8   ,       l   5   9
0003520    ,       l   6   0   ,       l   6   1   ,       l   6   2   ,
0003540        l   6   3   }   ;  \r           l   e   v   e   l   :    
0003560    T   Y   P   E       =       L   e   v   e   l   [   c   u   t
0003600    .   .   N   O   c   O   L   ]   ;  \r           u   n   s   p
0003620    e   c   i   f   i   e   d   :       l   e   v   e   l       =
0003640        N   O   c   O   L   ;  \r  \r           p   p   U   n   c
0003660    Z   o   n   e   :       U   N   C   O   U   N   T   E   D    
0003700    Z   O   N   E   ;           -   -       z   o   n   e       w
0003720    h   e   r   e       o   b   j   e   c   t   '   s   ,       l
0003740    i   s   t   '   s   ,       p   r   o   p   '   s   ,  \r    
0003760                -   -       c   L   i   s   t   '   s   ,       a
0004000    n   d       r   e   c   t   L   i   s   t   '   s       l   i
0004020    v   e  \r  \r  \r   -   -           I       t       e       m
0004040                L       i       s       t  \r  \r           m   a
0004060    s   t   e   r   L   i   s   t   :       l   i   s   t 376 001
0004100   \0 356 277   P   t   r   ;       -   -       d   e   s   i   g
0004120    n       n   o   w       b   e   i   n   g       d   i   s   p
0004140    l   a   y   e   d  \r           l   i   s   t   P   t   r   :
0004160        T   Y   P   E       =       L   O   N   G       P   O   I
0004200    N   T   E   R       T   O       l   i   s   t       _       N
0004220    I   L   ;  \r           l   i   s   t   :       T   Y   P   E
0004240        =       R   E   C   O   R   D       [  \r                
0004260    n   x   t   :       l   i   s   t   P   t   r   ,  \r        
0004300            l   x   ,       l   y   :       l   o   c   N   u   m
0004320    ,  \r                   s   u   p   e   r   :       l   i   s
0004340    t   P   t   r   ,  \r                   o   b   :       o   b
0004360    P   t   r   ,  \r                   s   e   l   e   c   t   e
0004400    d   ,       d   e   l   e   t   e   d   ,       c   f   o   k
0004420    ,       b   f   o   k   :       B   O   O   L   E   A   N    
0004440    _       F   A   L   S   E   ,  \r                   m   a   r
0004460    k   :       [   0   .   .   1   ]       _       0   ,  \r    
0004500              376 001  \0 267  \v   i   d   x   ,       r   i   d
0004520    x   :       o   r   i   e   n   t   a   t   i   o   n   I   n
0004540    d   e   x   ,           -   -       r   i   d   x       i   s
0004560        B   I   T   X   O   R   [   i   d   x   ,   1   ]   ,    
0004600    i   .   e   .       r   e   f   l   e   c   t   e   d  \r    
0004620                p   r   o   p   s   :       p   r   o   p   P   t
0004640    r  \r                   ]   ;  \r  \r  \r   -   -           I
0004660        t       e       m               P       r       o       p
0004700        e       r       t       y  \r  \r           p   r   o   p
0004720    P   t   r   :       T   Y   P   E       =       L   O   N   G
0004740        P   O   I   N   T   E   R       T   O       p   r   o   p
0004760        _       N   I   L   ;  \r           p   r   o   p   :    
0005000    T   Y   P   E       =       R   E   C   O   R   D       [   n
0005020    e   x   t   :       p   r   o   p   P   t   r   ,       a   t
0005040    t   r   i   b   u   t   e   ,       v   a   l   u   e   :    
0005060    A   t   o   m   ]   ;  \r  \r                   p   u   t   P
0005100    r   o   p   :       P   R   O 376 001  \0 226 236   C       [
0005120    l   p   :       l   i   s   t   P   t   r   ,       a   t   t
0005140    r   i   b   u   t   e   ,       v   a   l   u   e   :       A
0005160    t   o   m   ,  \r                           a   l   l   o   w
0005200    D   u   p   l   A   t   t   r   :       B   O   O   L   E   A
0005220    N       _       F   A   L   S   E   ]   ;  \r                
0005240    A   p   p   e   n   d   P   r   o   p   s   :       P   R   O
0005260    C       [   t   o   :       L   O   N   G       S   T   R   I
0005300    N   G   ,       f   r   o   m   :       p   r   o   p   P   t
0005320    r   ,       s   t   a   r   t   P   o   s   :       C   A   R
0005340    D   I   N   A   L       _       0   ]   ;  \r  \r           A
0005360    t   o   m   :       T   Y   P   E       =       L   O   N   G
0005400        P   O   I   N   T   E   R       T   O       R   E   A   D
0005420    O   N   L   Y       S   t   r   i   n   g   B   o   d   y    
0005440    _       N   I   L   ;  \r  \r                   M   a   k   e
0005460    A   t   o   m   :       P   R   O   C       [   s   :       L
0005500    O   N   G       S   T   R   I   N   G   ]       R 376 001  \0
0005520    Z 244   E   T   U   R   N   S   [   A   t   o   m   ]   ;  \r
0005540                    A   t   o   m   T   o   S   t   r   i   n   g
0005560    :       P   R   O   C       [   a   :       A   t   o   m   ]
0005600        R   E   T   U   R   N   S       [   L   O   N   G       S
0005620    T   R   I   N   G   ]       =       I   N   L   I   N   E  \r
0005640                            {   R   E   T   U   R   N   [   L   O
0005660    O   P   H   O   L   E   [   a   ]   ]   }   ;  \r            
0005700        R   e   s   t   a   r   t   A   t   o   m   s   :       P
0005720    R   O   C   ;  \r                   a   t   o   m   T   a   b
0005740    l   e   S   i   z   e   :       I   N   T   E   G   E   R    
0005760    =       2   5   6   ;  \r                   a   t   o   m   T
0006000    a   b   l   e   :       A   R   R   A   Y       [   1   .   .
0006020    a   t   o   m   T   a   b   l   e   S   i   z   e   ]       O
0006040    F       A   t   o   m   ;           -   -       f   o   r    
0006060    s   h   o   r   t       I   /   O  \r  \r   -   -           O
0006100        b       j       e       c       t  \r  \r           o   b
0006120    P   t 376 001  \0 220 031   r   :       T   Y   P   E       =
0006140        L   O   N   G       P   O   I   N   T   E   R       T   O
0006160        o   b   j   e   c   t       _       N   I   L   ;  \r    
0006200        c   e   l   l   P   t   r   :       T   Y   P   E       =
0006220        L   O   N   G       P   O   I   N   T   E   R       T   O
0006240        c   e   l   l       o   b   j   e   c   t       _       N
0006260    I   L   ;  \r           o   b   j   e   c   t   :       T   Y
0006300    P   E       =       R   E   C   O   R   D       [  \r        
0006320            p   :       P   O   I   N   T   E   R       T   O    
0006340    P   r   o   c   s   ,  \r                   s   i   z   e   :
0006360        A   R   R   A   Y       [   0   .   .   2   ]       O   F
0006400        l   o   c   N   u   m   ,       -   -       x       I   N
0006420        [   0   .   .   s   i   z   e   [   0   ]   (   =   s   i
0006440    z   e   [   2   ]   )   )   ,       y       I   N       [   0
0006460    .   .   s   i   z   e   [   1   ]   )  \r                   r
0006500    e   f   C   n   t   :       C   A   R   D   I   N   A   L   ,
0006520   \r                   c   a 376 001  \0   Z   j   c   h   e   :
0006540        C   a   c   h   e   H   a   n   d   l   e   ,  \r        
0006560            p   r   o   p   s   :       p   r   o   p   P   t   r
0006600    ,  \r                   a   u   x   P   n   t   :       a   u
0006620    x   P   t   r   ,  \r                   l   :       l   e   v
0006640    e   l   ,  \r                   s   u   r   r   o   u   n   d
0006660    :   [   0   .   .   3   1   ]       _       0   ,  \r        
0006700            r   e   t   u   r   n   a   b   l   e   ,       m   a
0006720    r   k   e   d   :       B   O   O   L   E   A   N   ,  \r    
0006740                v   a   r   p   a   r   t   :       S   E   L   E
0006760    C   T       o   t   y   p   :       t   y   p   e   O   f   O
0007000    b   j   e   c   t       F   R   O   M  \r                    
0007020        r   e   c   t       =   >       N   U   L   L   ,  \r    
0007040                        w   i   r   e       =   >       [   s   u
0007060    p   e   r   :       L   O   N   G       P   O   I   N   T   E
0007100    R       T   O       w   i   r   e       o   b   j   e   c   t
0007120        _       N   I   L   ]   ,  \r             376 001  \0   9
0007140    H               x   s   t   r       =   >       [  \r        
0007160                            s   u   p   e   r   :       L   O   N
0007200    G       P   O   I   N   T   E   R       T   O       x   s   t
0007220    r       o   b   j   e   c   t       _       N   I   L   ,  \r
0007240                                    w   i   d   t   h   ,       l
0007260    e   n   g   t   h   :       l   o   c   N   u   m   ,  \r    
0007300                                w   E   x   t   ,       l   E   x
0007320    t   :       l   o   c   N   u   m   [   0   .   .   6   3   ]
0007340    ,  \r                                   i   m   p   l   :    
0007360    D   e   p   l   e   t   i   o   n   S   t   r   e   n   g   t
0007400    h   ,  \r                                   p   u   l   l   u
0007420    p   ,       a   n   g   l   e   :       B   O   O   L   E   A
0007440    N       _       F   A   L   S   E   ]   ,  \r                
0007460            c   e   l   l       =   >       [  \r                
0007500                    c   n   t   :       C   A   R   D   I   N   A
0007520    L   ,  \r                                   p   t   r   :    
0007540    l 376 001  \0   6 216   i   s   t   P   t   r   ,  \r        
0007560                            s   u   p   e   r   :       c   e   l
0007600    l   P   t   r       _       N   I   L   ]   ,  \r            
0007620                c   o   n   t       =   >       [  \r            
0007640                        s   u   p   e   r   :       L   O   N   G
0007660        P   O   I   N   T   E   R       T   O       c   o   n   t
0007700        o   b   j   e   c   t       _       N   I   L   ,  \r    
0007720                                t   y   p   :       c   o   n   t
0007740    T   y   p   e   ,  \r                                   m   a
0007760    g   i   c   N   ,   m   2   E   x   t   ,   c   2   E   x   t
0010000    :       l   o   c   N   u   m   [   0   .   .   1   5   ]    
0010020    _       0   ,  \r                                   l   E   x
0010040    t   ,   w   E   x   t   :       l   o   c   N   u   m   [   0
0010060    .   .   2   5   5   ]   _   4   ]   ,  \r                    
0010100        b   u   s       =   >       [  \r                        
0010120            w   s   p   a   c   e   ,       f   i   r   s   t   L
0010140    e   n   g   t   h   , 376 001  \0 001 255       t   o   p   I
0010160    n   c   r   ,       l   e   n   I   n   c   r   ,       o   f
0010200    f   s   e   t   F   i   r   s   t   ,       w   w   i   d   t
0010220    h   :       l   o   c   N   u   m       _       0   ,  \r    
0010240                                w   C   n   t   ,       t   W   h
0010260    i   c   h   ,   b   W   h   i   c   h   :       I   N   T   E
0010300    G   E   R       _       0   ]   ,  \r                        
0010320    t   e   x   t       =   >       [   s   :       S   T   R   I
0010340    N   G   ]   ,  \r                           c   n   T   e   x
0010360    t       =   >       [  \r                                   s
0010400    :       S   T   R   I   N   G   ,  \r                        
0010420            n   p   :       c   L   i   s   t   P   t   r       _
0010440        N   I   L   ,  \r                                   o   p
0010460    :       c   e   l   l   P   t   r       _       N   I   L   ]
0010500    ,  \r                           E   N   D   C   A   S   E   ]
0010520    ;  \r  \r           D   e   p   l   e   t   i   o   n   S   t
0010540    r   e   n   g   t   h   :       T   Y   P 376 001  \0   v 337
0010560    E       =       [   0   .   .   3   ]       _       0   ;  \r
0010600                    e   n   h   a   n   c   e   m   e   n   t   :
0010620        D   e   p   l   e   t   i   o   n   S   t   r   e   n   g
0010640    t   h       =       F   I   R   S   T   [   D   e   p   l   e
0010660    t   i   o   n   S   t   r   e   n   g   t   h   ]   ;  \r    
0010700                z   e   r   o   T   h   r   e   s   h   :       D
0010720    e   p   l   e   t   i   o   n   S   t   r   e   n   g   t   h
0010740        =       e   n   h   a   n   c   e   m   e   n   t   +   1
0010760    ;  \r                   w   e   a   k   D   e   p   l   e   t
0011000    i   o   n   :       D   e   p   l   e   t   i   o   n   S   t
0011020    r   e   n   g   t   h       =       z   e   r   o   T   h   r
0011040    e   s   h   +   1   ;  \r                   s   t   r   o   n
0011060    g   D   e   p   l   e   t   i   o   n   :       D   e   p   l
0011100    e   t   i   o   n   S   t   r   e   n   g   t   h       =    
0011120    L   A   S   T   [   D   e   p   l   e   t   i   o   n   S   t
0011140    r   e   n   g   t   h   ]   ;  \r  \r           D   e   p   l
0011160  376 001  \0 022   `   e   t   i   o   n   S   t   r   e   n   g
0011200    t   h   N   a   m   e   :       P   R   O   C       [   i   m
0011220    p   :       D   e   p   l   e   t   i   o   n   S   t   r   e
0011240    n   g   t   h   ]       R   E   T   U   R   N   S       [   S
0011260    T   R   I   N   G   ]   ;  \r  \r           P   r   o   c   s
0011300    :       T   Y   P   E       =       R   E   C   O   R   D    
0011320    [       -   -       g   e   n   e   r   i   c       p   r   o
0011340    c   e   d   u   r   e   s       f   o   r       a   n       o
0011360    b   j   e   c   t  \r                   d   r   a   w   m   e
0011400    :       A   R   R   A   Y       o   r   i   e   n   t   a   t
0011420    i   o   n   I   n   d   e   x       O   F       d   r   P   r
0011440    o   c   ,  \r                   s   e   t   P   a   r   m   :
0011460        p   a   r   m   P   r   o   c   ,  \r                   i
0011500    n   B   o   x   :       i   b   P   r   o   c   ,  \r        
0011520            i   n   M   e   :       i   n   M   e   P   r   o   c
0011540    ,  \r                   r   e   l   e   a   s   e   :       r
0011560    e   l   P   r   o 376 001  \0   e  \r   c   ,  \r            
0011600        a   n   o   t   h   e   r   m   e   :       a   n   o   P
0011620    r   o   c   ]   ;  \r  \r           d   r   P   r   o   c   :
0011640        T   Y   P   E       =       P   R   O   C       [  \r    
0011660                o   b   :       o   b   P   t   r   ,       x   ,
0011700        y   :       l   o   c   N   u   m   ,       p   r   :    
0011720    P   O   I   N   T   E   R       T   O       d   r   R   e   c
0011740    o   r   d   ]   ;  \r           i   b   P   r   o   c   :    
0011760    T   Y   P   E       =       P   R   O   C       [   l   p   :
0012000        l   i   s   t   P   t   r   ,       x   1   ,       y   1
0012020    ,       x   2   ,       y   2   :       l   o   c   N   u   m
0012040    ]  \r                   R   E   T   U   R   N   S       [   B
0012060    O   O   L   E   A   N   ]   ;  \r           i   n   M   e   P
0012100    r   o   c   :       T   Y   P   E       =       P   R   O   C
0012120        [  \r                   o   b   :       o   b   P   t   r
0012140    ,       x   ,       y   :       l   o   c   N   u   m   ,    
0012160    o   :       o   r   i   e   n   t   a 376 001  \0 327 374   t
0012200    i   o   n   I   n   d   e   x   ]  \r                   R   E
0012220    T   U   R   N   S       [   B   O   O   L   E   A   N   ]   ;
0012240   \r           r   e   l   P   r   o   c   :       T   Y   P   E
0012260        =       P   R   O   C       [   o   b   :       o   b   P
0012300    t   r   ]   ;  \r           a   n   o   P   r   o   c   :    
0012320    T   Y   P   E       =       P   R   O   C       [   o   b   :
0012340        o   b   P   t   r   ]  \r                   R   E   T   U
0012360    R   N   S       [   o   b   P   t   r   ]   ;  \r           p
0012400    a   r   m   P   r   o   c   :       T   Y   P   E       =    
0012420    P   R   O   C       [  \r                   l   p   :       l
0012440    i   s   t   P   t   r   ,       p   t   :       p   a   r   m
0012460    T   y   p   e   ,       d   x   ,       d   y   :       l   o
0012500    c   N   u   m   ,       c   e   n   t   :       B   O   O   L
0012520    E   A   N   ]  \r                   R   E   T   U   R   N   S
0012540        [   B   O   O   L   E   A   N   ]   ;  \r  \r           a
0012560    u   x   P   t   r   :       T   Y   P   E       =       L 376
0012600  001  \0 214 273   O   N   G       P   O   I   N   T   E   R    
0012620    T   O       a   u   x       _       N   I   L   ;  \r        
0012640    a   u   x   :       T   Y   P   E   ;       -   -       c   a
0012660    n       b   e       i   m   p   l   e   m   e   n   t   e   d
0012700        b   y       a   n   y       a   p   p   l   i   c   a   t
0012720    i   o   n       p   r   o   g   r   a   m  \r  \r           C
0012740    a   c   h   e   H   a   n   d   l   e   :       T   Y   P   E
0012760        =       L   O   N   G       P   O   I   N   T   E   R    
0013000    T   O       C   a   c   h   e       _       N   I   L   ;  \r
0013020            C   a   c   h   e   :       T   Y   P   E   ;        
0013040    -   -       o   f       d   r   a   w   n       b   i   t   m
0013060    a   p   s  \r  \r  \r   -   -           N       a       m    
0013100    e       d               C       e       l       l       s  \r
0013120   \r           c   e   l   l   L   i   s   t   :       c   L   i
0013140    s   t   P   t   r   ;       -   -       a   l   l       t   h
0013160    e       n   a   m   e   d       c   e   l   l   s  \r        
0013200    c   L   i   s 376 001  \0 324 223   t   P   t   r   :       T
0013220    Y   P   E       =       L   O   N   G       P   O   I   N   T
0013240    E   R       T   O       c   L   i   s   t       _       N   I
0013260    L   ;  \r           c   L   i   s   t   :       T   Y   P   E
0013300        =       R   E   C   O   R   D       [   n   x   t   :    
0013320    c   L   i   s   t   P   t   r   ,       o   b   :       o   b
0013340    P   t   r   ,       n   a   m   e   :       S   T   R   I   N
0013360    G   ]   ;  \r  \r  \r   -   -           P       u       s    
0013400    h       e       d           C       e       l       l       s
0013420   \r  \r           c   e   l   l   S   t   a   c   k   :       c
0013440    e   l   l   S   E   P   t   r   ;       -   -       w   e    
0013460    a   r   e       p   u   s   h   e   d       d   o   w   n    
0013500    i   n   t   o       t   h   i   s       s   t   a   c   k    
0013520    o   f       c   e   l   l   s  \r           c   e   l   l   S
0013540    E   P   t   r   :       T   Y   P   E       =       L   O   N
0013560    G       P   O   I   N   T   E   R       T   O       c   e   l
0013600    l   S   E       _       N   I   L 376 001  \0 032 373   ;  \r
0013620            c   e   l   l   S   E   :       T   Y   P   E       =
0013640        R   E   C   O   R   D       [  \r                   n   x
0013660    t   :       c   e   l   l   S   E   P   t   r   ,  \r        
0013700            l   p   ,       i   n   s   t   a   n   c   e   ,    
0013720    u   n   D   e   l   :       l   i   s   t   P   t   r   ,  \r
0013740                    d   e   s   t   :       c   e   l   l   P   t
0013760    r   ,  \r                   o   r   i   g   S   i   z   e   :
0014000        P   o   i   n   t   ,       -   -       o   f       d   e
0014020    s   t  \r                   o   r   i   g   B   B   :       R
0014040    e   c   t   ,       -   -       o   f       i   n   s   t   a
0014060    n   c   e  \r                   c   h   a   n   g   e   s   :
0014100        B   O   O   L   E   A   N   ,  \r                   u   d
0014120    g   ,       u   d   i   :       C   A   R   D   I   N   A   L
0014140    ]   ;  \r  \f  \r           U   s   u   a   l   l   y   F   a
0014160    l   s   e   :       T   Y   P   E       =       B   O   O   L
0014200    E   A   N       _       F   A   L   S   E   ;  \r     376 001
0014220   \0   c 025       w   i   r   e   O   K   :       A   R   R   A
0014240    Y       l   e   v   e   l       O   F       U   s   u   a   l
0014260    l   y   F   a   l   s   e       =  \r                   [   d
0014300    i   f   :       T   R   U   E   ,       p   d   i   f   :    
0014320    T   R   U   E   ,       p   w   e   l   C   o   n   t   :    
0014340    T   R   U   E   ,       n   w   e   l   C   o   n   t   :    
0014360    T   R   U   E   ,       -   -       s   /   d       d   i   f
0014400    f   u   s   i   o   n   s  \r                   p   o   l   :
0014420        T   R   U   E   ,       m   e   t   :       T   R   U   E
0014440    ,       m   e   t   2   :       T   R   U   E   ]   ;  \r  \r
0014460   \r           M   o   d   e   :       T   Y   P   E       =    
0014500    {   w   i   r   e   ,       x   s   t   r   ,       c   e   l
0014520    l   ,       n   u   l   l   }   ;  \r  \r           -   -    
0014540    M   A   G   I   C       C   O   N   S   T   A   N   T   S   :
0014560   \r  \r           m   a   x   I   n   f   l   u   e   n   c   e
0014600    :       l   o   c   N   u   m       =       4   *   L   a   m
0014620    b   d   a 376 001  \0   ,   !   ;  \r                   -   -
0014640        m   a   x       e   x   t   e   n   s   i   o   n       o
0014660    f       i   n   f   l   u   e   n   c   e       (   o   r    
0014700    w   e   l   l   )       b   e   y   o   n   d       b   o   u
0014720    n   d   i   n   g       b   o   x   :  \r           w   e   l
0014740    l   S   u   r   r   o   u   n   d   :       l   o   c   N   u
0014760    m       =       3   *   L   a   m   b   d   a   ;  \r        
0015000    b   u   t   c   o   n   S   Y   :       l   o   c   N   u   m
0015020        =       6   *   L   a   m   b   d   a   ;  \r           b
0015040    u   t   c   o   n   S   X   :       l   o   c   N   u   m    
0015060    =       4   *   L   a   m   b   d   a   ;  \r           b   u
0015100    t   c   o   n   G   r   e   e   n   O   f   f   :       l   o
0015120    c   N   u   m       =       L   a   m   b   d   a   ;  \r    
0015140        b   u   t   c   o   n   R   e   d   O   f   f   :       l
0015160    o   c   N   u   m       =       (   3   *   L   a   m   b   d
0015200    a   )   /   2   ;  \r  \r           c   W   i   d   t   h   :
0015220        l   o   c   N   u   m     376 001  \0 212   b   =       2
0015240    *   L   a   m   b   d   a   ;  \r           c   L   e   n   g
0015260    t   h   :       l   o   c   N   u   m       =       2   *   L
0015300    a   m   b   d   a   ;  \r           w   X   E   x   t   e   n
0015320    s   i   o   n   :       l   o   c   N   u   m       =       2
0015340    *   L   a   m   b   d   a   ;  \r           l   X   E   x   t
0015360    e   n   s   i   o   n   :       l   o   c   N   u   m       =
0015400        2   *   L   a   m   b   d   a   ;  \r  \r           c   u
0015420    t   2   m   i   n   :       l   o   c   N   u   m       =    
0015440    3   *   L   a   m   b   d   a   ;  \r           m   m   C   o
0015460    n   t   E   x   t   :       l   o   c   N   u   m       =    
0015500    2   *   L   a   m   b   d   a   ;   -   -       e   x   t   e
0015520    n   s   i   o   n       o   f       m   e   t   2       b   e
0015540    y   o   n   d       c   u   t   2  \r           -   -   m   2
0015560    D   i   f   C   o   n   t   E   x   t   :       l   o   c   N
0015600    u   m       =       (   3   *   L   a   m   b   d   a   )   /
0015620    2   ;   -       e   x   t   e   n   s   i   o   n 376 001  \0
0015640    u   c       o   f       m   e   t   2       b   e   y   o   n
0015660    d       e   d   g   e       o   f       d   i   f       i   n
0015700        a  \r  \t   -   -  \t   m   e   t   2   -   m   e   t   -
0015720    d   i   f       c   o   n   t   a   c   t       =       (   c
0015740    u   t   2   m   i   n       +       2   *   m   m   C   o   n
0015760    t   E   x   t       -       b   u   t   c   o   n   S   X   )
0016000    /   2  \r           w   e   l   c   o   n   S   u   r   r   o
0016020    u   n   d   :       l   o   c   N   u   m       =       3   *
0016040    L   a   m   b   d   a   ;   -   -       m   i   n       w   e
0016060    l   l       s   u   r   r   o   u   n   d       a   r   o   u
0016100    n   d       a       w   e   l   l   -   c   o   n   t   a   c
0016120    t  \r  \r           -   -       s   w   i   t   c   h       c
0016140    o   n   t   r   o   l   l   i   n   g       f   o   r   m   a
0016160    t       o   f       c   o   l   o   r       s   c   r   e   e
0016200    n   :  \r           c   s   H   o   r   :       B   O   O   L
0016220    E   A   N       =       T   R   U   E   ;  \r           -   -
0016240        T 376 001  \0 233 203   R   U   E       f   o   r       l
0016260    o   n   g       d   i   r   e   c   t   i   o   n       h   o
0016300    r   i   z   o   n   t   a   l   ,       F   A   L   S   E    
0016320    f   o   r       v   e   r   t   i   c   a   l   ;  \r        
0016340    c   o   l   W   i   d   t   h   :       I   N   T   E   G   E
0016360    R       =       I   F       c   s   H   o   r       T   H   E
0016400    N       6   4   0       E   L   S   E       4   8   0   ;  \r
0016420            c   o   l   H   e   i   g   h   t   :       I   N   T
0016440    E   G   E   R       =       I   F       c   s   H   o   r    
0016460    T   H   E   N       4   8   0       E   L   S   E       6   4
0016500    0   ;  \r           b   w   B   o   t   t   o   m   :       I
0016520    N   T   E   G   E   R       =       5   8   0   ;  \r        
0016540    b   w   M   s   g   T   o   p   :       I   N   T   E   G   E
0016560    R       =       b   w   B   o   t   t   o   m   ;  \r        
0016600    b   w   M   s   g   B   o   t   t   o   m   :       I   N   T
0016620    E   G   E   R       =       6   4   0   ;  \r           b   w
0016640    F   e   e   d   T   o   p 376 001  \0   K  \a   :   I   N   T
0016660    E   G   E   R   =   b   w   M   s   g   B   o   t   t   o   m
0016700    ;  \r  \r           -   -   *   *   *   *   *   *   *   *   *
0016720    *       c   o   m   m   a   n   d       i   n   t   e   r   p
0016740    r   e   t   e   r       s   t   u   f   f   :  \r  \r   Q   u
0016760    i   t   S   i   g   :       S   I   G   N   A   L   ;  \r   R
0017000    e   s   t   S   i   g   :       S   I   G   N   A   L   ;  \r
0017020   \r   k   e   C   h   e   c   k   P   r   o   c   :   T   Y   P
0017040    E       =       P   R   O   C       [   k   :   k   e   y   E
0017060    v   e   n   t   ]       R   E   T   U   R   N   S   [   r   e
0017100    t   u   r   n   ,   e   x   e   c   u   t   e   :   B   O   O
0017120    L   E   A   N   ]   ;  \r  \t   -   -       r   e   t   u   r
0017140    n       t   r   u   e       i   f       c   o   m   m   a   n
0017160    d       i   n   t   e   r   p   r   e   t   e   r       s   h
0017200    o   u   l   d       r   e   t   u   r   n  \r  \t   -   -    
0017220    e   x   e   c   u   t   e       t   r   u   e       i   f    
0017240    c   o   m   m   a   n   d       i   n   t   e 376 001  \0   y
0017260  243   r   p   r   e   t   e   r       s   h   o   u   l   d    
0017300    e   x   e   c   u   t   e       t   h   e       k   e   y   E
0017320    v   e   n   t  \r  \r   C   m   d   T   w   e   r   p   :   P
0017340    R   O   C       [   k   e   C   h   e   c   k   P   r   o   c
0017360    ]       R   E   T   U   R   N   S   [   k   e   y   E   v   e
0017400    n   t   ]   ;  \r   C   m   d   T   w   e   r   p   M   e   s
0017420    s   :   P   R   O   C       [   o   s   1   ,   o   s   2   ,
0017440    o   s   3   :   S   T   R   I   N   G   ,   c   h   e   c   k
0017460    :   k   e   C   h   e   c   k   P   r   o   c   ]  \r  \t   R
0017500    E   T   U   R   N   S   [   k   e   y   E   v   e   n   t   ]
0017520    ;  \r  \r  \r           -   -       k   b   d       s   t   u
0017540    f   f   :  \r  \r           k   e   y   E   v   e   n   t   :
0017560        T   Y   P   E       =       R   E   C   O   R   D       [
0017600   \r                   k   :       [   0   .   .   7   7   B   ]
0017620    ,       c   t   l   :       [   0   .   .   3   1   ]   ,    
0017640    m   x   :       [   0   .   .   2   0   0   0   ]   ,       m
0017660    y 376 001  \0 321   p   :       [   0   .   .   1   0   0   0
0017700    ]   ]   ;  \r           n   i   l   K   e   y   E   v   e   n
0017720    t   :       k   e   y   E   v   e   n   t       =       [   k
0017740    :       7   7   B   ,       c   t   l   :       0   ,       m
0017760    x   :       0   ,       m   y   :       0   ]   ;  \r  \r   -
0020000    -       m   x       a   n   d       m   y       a   r   e    
0020020    t   h   e       s   c   r   e   e   n       c   o   o   r   d
0020040    i   n   a   t   e   s       o   f       t   h   e       c   u
0020060    r   s   o   r       w   h   e   n       t   h   e       k   e
0020100    y   s   t   r   o   k   e  \r   -   -       h   a   p   p   e
0020120    n   e   d   .           (   0   ,   0   )       i   s       u
0020140    p   p   e   r       l   e   f   t       o   f       c   o   l
0020160    o   r       s   c   r   e   e   n   .           (   c   o   l
0020200    W   i   d   t   h   ,   0   )       i   s       u   p   p   e
0020220    r  \r   -   -       l   e   f   t       o   f       B   &   W
0020240        s   c   r   e   e   n   .           (   c   o   l   W   i
0020260    d   t   h   ,   b   w 376 001  \0   : 205   B   o   t   t   o
0020300    m   )       i   s       u   p   p   e   r       l   e   f   t
0020320        o   f       f   e   e   d   b   a   c   k       a   r   e
0020340    a   .  \r   -   -       c   t   l       i   n   d   i   c   a
0020360    t   e   s       w   h   i   c   h       c   o   n   t   r   o
0020400    l       k   e   y   s       w   e   r   e       d   o   w   n
0020420    ,       o   r       w   h   i   c   h       m   o   u   s   e
0020440        b   u   t   t   o   n       w   a   s  \r   -   -       p
0020460    u   s   h   e   d   .           k       i   s       t   h   e
0020500        c   h   a   r   a   c   t   e   r       k   e   y   .  \r
0020520   \r           -   -   k   e   y       e   n   c   o   d   i   n
0020540    g   s       (   k       f   i   e   l   d       o   f       k
0020560    e   y   E   v   e   n   t   )   :  \r           -   -  \t   0
0020600    -   1   1   B   :       "   0   "       t   o       "   9   "
0020620        (   a   d   d       6   0   B       f   o   r       a   s
0020640    c   i   i   )  \r           -   -  \t   1   2   B   -   4   3
0020660    B   :       "   A   "       t   o       " 376 001  \0   [  \a
0020700    Z   "       (   a   d   d       6   7   B       f   o   r    
0020720    a   s   c   i   i       u   p   p   e   r       c   a   s   e
0020740    )  \r           -   -  \t   4   4   B   :       "   ;   "    
0020760    k   e   y  \r           -   -  \t   4   5   B   :       "   =
0021000    "       k   e   y  \r           -   -  \t   4   6   B   :    
0021020    "   ,   "       k   e   y  \r           -   -  \t   4   7   B
0021040    :       "   -   "       k   e   y  \r           -   -  \t   5
0021060    0   B   :       "   .   "       k   e   y  \r           -   -
0021100   \t   5   1   B   :       "   /   "       k   e   y  \r        
0021120    -   -  \t   5   2   B   :       "   '   "       k   e   y  \r
0021140            -   -  \t   5   3   B   :       "   [   "       k   e
0021160    y  \r           -   -  \t   5   4   B   :       "   \   "    
0021200    k   e   y  \r           -   -  \t   5   5   B   :       "   ]
0021220    "       k   e   y  \r           -   -  \t   5   6   B   :    
0021240    "   D   O   N   E   "       k   e   y       (   b   l   a   n
0021260    k       o   n   e       b   e   l   o   w       D   E   L   )
0021300  376 001  \0 253   k   (   U   N   d   o   )  \r           -   -
0021320   \t   5   7   B   :       "   _   "       k   e   y  \r        
0021340    -   -  \t   6   0   B   :       C   R       k   e   y  \r    
0021360        -   -  \t   6   1   B   :       L   F       k   e   y  \r
0021400            -   -  \t   6   2   B   :       B   S       k   e   y
0021420   \r           -   -  \t   6   3   B   :       D   E   L       k
0021440    e   y  \r           -   -  \t   6   4   B   :       s   p   a
0021460    c   e       b   a   r  \r           -   -  \t   6   5   B   :
0021500        E   S   C  \r           -   -  \t   6   6   B   :       b
0021520    l   a   n   k       t   o       r   i   g   h   t       o   f
0021540        R   E   T       (   n   o   t       u   s   e   d   )  \r
0021560            -   -  \t   6   7   B   :       s   w   a   t       k
0021600    e   y       (   n   o   t       u   s   e   d   )  \r        
0021620    -   -  \t   7   0   B   :       T   A   B       (   n   o   t
0021640        u   s   e   d   ,       -       a       c   t   r   l    
0021660    k   e   y       i   n   s   t   e   a   d   )  \r           -
0021700    -  \t   7   1   B 376 001  \0 034 315   :       ?   ?   ?  \r
0021720            -   -  \t   7   2   B   :       ?   ?   ?  \r        
0021740    -   -  \t   7   3   B   :       y   e   l   l   o   w       m
0021760    o   u   s   e       b   u   t   t   o   n       u   p       (
0022000    r   e   l   e   a   s   e   )  \r           -   -  \t   7   4
0022020    B   :       ?   ?   ?  \r           -   -  \t   7   5   B   :
0022040        ?   ?   ?  \r           -   -  \t   7   6   B   :       ?
0022060    ?   ?  \r           -   -  \t   7   7   B   :       N   o    
0022100    k   e   y       (   f   o   r       u   s   e       w   i   t
0022120    h       m   o   u   s   e       b   u   t   t   o   n   s   )
0022140   \r  \r           -   -   c   t   r   l       k   e   y       e
0022160    n   c   o   d   i   n   g   s       (   c   t   l       f   i
0022200    e   l   d       o   f       k   e   y   E   v   e   n   t   )
0022220    :  \r           -   -  \t   1   ,   2   :       M   o   u   s
0022240    e       b   u   t   t   o   n   s   :       0   -   n   o   n
0022260    e   ,       1   -   r   e   d   ,       2   -   y   e   l   l
0022300    o   w   ,       3   -   b   l   u   e 376 001  \0 360   F  \r
0022320            -   -  \t   4   :       C   T   R   L  \r           -
0022340    -  \t   1   0   B   :       T   A   B  \r           -   -  \t
0022360    2   0   B   :       S   h   i   f   t       (   e   i   t   h
0022400    e   r   )  \r  \r                   m   o   u   s   e   R   e
0022420    d   :       C   A   R   D   I   N   A   L       =       1   ;
0022440   \r                   m   o   u   s   e   Y   e   l   l   o   w
0022460    :       C   A   R   D   I   N   A   L       =       2   ;  \r
0022500                    m   o   u   s   e   B   l   u   e   :       C
0022520    A   R   D   I   N   A   L       =       3   ;  \r            
0022540        c   t   r   l   K   e   y   :       C   A   R   D   I   N
0022560    A   L       =       4   ;  \r                   t   a   b   K
0022600    e   y   :       C   A   R   D   I   N   A   L       =       1
0022620    0   B   ;  \r                   s   h   i   f   t   K   e   y
0022640    :       C   A   R   D   I   N   A   L       =       2   0   B
0022660    ;  \r  \r  \r           c   u   r   s   o   r   O   n   B   W
0022700    :       B   O   O   L   E   A   N   ;  \r           c   u 376
0022720  001  \0 213 266   r   x   ,       c   u   r   y   :       I   N
0022740    T   E   G   E   R   ;  \r           g   r   i   d   C   o   l
0022760    ,       g   r   i   d   B   W   :       C   A   R   D   I   N
0023000    A   L   ;  \r  \r           m   T   y   p   e   :       S   e
0023020    g   m   e   n   t   D   e   f   s   .   M   a   c   h   i   n
0023040    e   T   y   p   e   ;  \r           c   o   l   o   r   :    
0023060    T   Y   P   E       =       [   0   .   .   1   5   ]   ;  \r
0023100   \r           -   -       *   *   *   *   *   *   *   *  \r    
0023120        b   w   S   c   a   l   e   :       I   N   T   E   G   E
0023140    R   ;  \r           b   w   x   o   f   f   ,       b   w   y
0023160    o   f   f   :       I   N   T   E   G   E   R   ;  \r        
0023200    c   S   c   a   l   e   :       I   N   T   E   G   E   R   ;
0023220   \r           c   x   o   f   f   ,       c   y   o   f   f   :
0023240        I   N   T   E   G   E   R   ;  \r           b   w   S   c
0023260    a   l   e   N   :       I   N   T   E   G   E   R   ;  \r    
0023300        b   w   S   c   a   l   e   D   :       I   N   T   E   G
0023320    E   R   ;  \r 376 001  \0   x   x           c   S   c   a   l
0023340    e   N   :       I   N   T   E   G   E   R   ;  \r           c
0023360    S   c   a   l   e   D   :       I   N   T   E   G   E   R   ;
0023400   \r  \r           b   w   C   l   i   p   x   1   :       I   N
0023420    T   E   G   E   R   ;  \r           b   w   C   l   i   p   x
0023440    2   :       I   N   T   E   G   E   R   ;  \r           b   w
0023460    C   l   i   p   y   1   :       I   N   T   E   G   E   R   ;
0023500   \r           b   w   C   l   i   p   y   2   :       I   N   T
0023520    E   G   E   R   ;  \r           c   C   l   i   p   x   1   :
0023540        I   N   T   E   G   E   R   ;  \r           c   C   l   i
0023560    p   x   2   :       I   N   T   E   G   E   R   ;  \r        
0023600    c   C   l   i   p   y   1   :       I   N   T   E   G   E   R
0023620    ;  \r           c   C   l   i   p   y   2   :       I   N   T
0023640    E   G   E   R   ;  \r  \r           f   n   t   :       P   O
0023660    I   N   T   E   R       T   O       S   t   r   i   k   e   F
0023700    o   n   t   ;  \r  \r           t   y   p   e   O   f   O   b
0023720    j   e   c   t   :       T   Y   P 376 001  \0 211 372   E    
0023740    =       {   r   e   c   t   ,       w   i   r   e   ,       x
0023760    s   t   r   ,       c   e   l   l   ,       c   o   n   t   ,
0024000        b   u   s   ,       t   e   x   t   ,       c   n   T   e
0024020    x   t   }   ;  \r           c   o   n   t   T   y   p   e   :
0024040        T   Y   P   E       =       {   b   u   r   r   ,       m
0024060    D   i   f   ,       d   i   f   S   h   o   r   t   ,       b
0024100    u   t   t   ,       m   P   o   l   ,       m   m   2   }   ;
0024120   \r                   -   -       t   h   e       f   i   r   s
0024140    t       t   h   r   e   e       t   y   p   e   s       a   r
0024160    e       a   l   s   o       c   h   a   r   a   c   t   e   r
0024200    i   z   e   d       b   y       t   h   e       l   a   y   e
0024220    r       o   f       t   h   e   i   r  \r                   -
0024240    -       d   i   f   f   u   s   i   o   n   :       n   d   i
0024260    f   ,       p   d   i   f   ,       n   w   e   l   C   o   n
0024300    t   ,       p   w   e   l   C   o   n   t   .  \r           p
0024320    a   r   m   T   y   p   e   :       T   Y   P   E     376 001
0024340   \0 363 300   =       {   w   i   d   t   h   ,       l   e   n
0024360    g   t   h   ,       d   e   f   a   u   l   t   ,       w   S
0024400    p   a   c   e   ,       l   S   p   a   c   e   ,       c   o
0024420    u   n   t   ,       b   S   p   a   c   e   }   ;  \r  \r    
0024440        c   m   d   M   a   s   k   :       T   Y   P   E       =
0024460        [   0   .   .   7   7   7   7   B   ]   ;  \r           -
0024500    -       1   =   m   a   r   k   ,   2   =   d   r   a   w   ,
0024520    4   =   s   e   l   ,   1   0   B   =   n   o   n   e   ,   2
0024540    0   B   =   c   t   r   l   ,   4   0   B   =   t   a   b   ,
0024560    1   0   0   B   =   c   t   r   l   -   t   a   b   ,  \r    
0024600        -   -           2   0   0   B   =   s   h   i   f   t   ,
0024620    4   0   0   B   =   c   t   r   l   -   s   h   i   f   t   ,
0024640    1   0   0   0   B   =   t   a   b   -   s   h   i   f   t   ,
0024660    2   0   0   0   B   =   c   t   r   l   -   t   a   b   -   s
0024700    h   i   f   t   .  \r  \r           c   m   d   P   r   o   c
0024720    :       T   Y   P   E       =       P   R   O   C       [   k
0024740    :       k 376 001  \0 002   4   e   y   E   v   e   n   t    
0024760    _       n   i   l   K   e   y   E   v   e   n   t   ]   ;  \r
0025000            c   m   d   L   e   n   t   :       T   Y   P   E    
0025020    =       R   E   C   O   R   D       [   m   a   s   k   :    
0025040    c   m   d   M   a   s   k   ,       p   r   o   c   :       c
0025060    m   d   P   r   o   c   ]   ;  \r           c   m   d   E   n
0025100    t   :       T   Y   P   E       =       P   O   I   N   T   E
0025120    R       T   O       A   R   R   A   Y       [   0   .   .   0
0025140    )       O   F       c   m   d   L   e   n   t   ;  \r  \r    
0025160        r   e   m   s   :       T   Y   P   E       =       R   E
0025200    C   O   R   D       [   r   :       R   e   c   t   ,       l
0025220    :       l   e   v   e   l   ]   ;  \r           r   e   m   P
0025240    a   g   e   s   :       C   A   R   D   I   N   A   L       =
0025260        2   0   0   0   0   /   2   5   6   ;  \r           r   e
0025300    m   L   e   n   :       C   A   R   D   I   N   A   L       =
0025320        (   r   e   m   P   a   g   e   s   *   2   5   6   )   /
0025340    S   I   Z   E   [   r   e   m 376 001  \0 364 345   s   ]   ;
0025360   \r  \r           m   a   r   k   P   n   t   ,       m   a   r
0025400    k   D   P   n   t   ,       s   e   l   M   a   r   k   P   n
0025420    t   :       P   o   i   n   t   ;  \r  \r           r   e   c
0025440    t   L   i   s   t   P   t   r   :       T   Y   P   E       =
0025460        L   O   N   G       P   O   I   N   T   E   R       T   O
0025500        r   e   c   t   L   i   s   t       _       N   I   L   ;
0025520   \r           r   e   c   t   L   i   s   t   :       T   Y   P
0025540    E       =       R   E   C   O   R   D       [  \r            
0025560        n   x   t   :       r   e   c   t   L   i   s   t   P   t
0025600    r   ,       r   :       R   e   c   t   ,       l   :       l
0025620    e   v   e   l   ,       f   r   e   e   b   l   :       B   O
0025640    O   L   E   A   N   ]   ;  \r  \r           -   -   *   *   *
0025660    *   *   *   *   *   *   *       s   c   r   e   e   n       u
0025700    p   d   a   t   e       p   r   o   c   e   s   s       s   t
0025720    u   f   f   :  \r  \r           s   C   m   d   T   y   p   e
0025740    :       T   Y   P   E       =       {   n   o   p 376 001  \0
0025760  311 335   ,       r   e   c   t   ,       s   e   l   ,       a
0026000    l   l   }   ;  \r           s   C   m   d   :       T   Y   P
0026020    E       =       R   E   C   O   R   D       [  \r            
0026040        c   m   d   :       s   C   m   d   T   y   p   e   ,    
0026060    e   r   s   :       B   O   O   L   E   A   N   ,       p   :
0026100        l   i   s   t   P   t   r   ,       r   :       R   e   c
0026120    t   ]   ;  \r  \r           d   r   a   w   P   r   o   c   e
0026140    r   :       T   Y   P   E       =       P   R   O   C       [
0026160   \r                   I   N   T   E   G   E   R   ,       I   N
0026200    T   E   G   E   R   ,       I   N   T   E   G   E   R   ,    
0026220    I   N   T   E   G   E   R   ,       l   e   v   e   l   ,    
0026240    P   O   I   N   T   E   R       T   O       R   e   c   t   ]
0026260    ;  \r           d   r   a   w   P   r   o   c   e   r   c   :
0026300        T   Y   P   E       =       P   R   O   C       [  \r    
0026320                I   N   T   E   G   E   R   ,       I   N   T   E
0026340    G   E   R   ,       I   N   T   E   G   E   R   ,       I   N
0026360    T   E 376 001  \0 270   r   G   E   R   ,       c   o   l   o
0026400    r   ,       P   O   I   N   T   E   R       T   O       R   e
0026420    c   t   ]   ;  \r           d   r   a   w   P   r   o   c   e
0026440    r   s   :       T   Y   P   E       =       P   R   O   C    
0026460    [  \r                   I   N   T   E   G   E   R   ,       I
0026500    N   T   E   G   E   R   ,       I   N   T   E   G   E   R   ,
0026520        I   N   T   E   G   E   R   ,       S   T   R   I   N   G
0026540    ,       P   O   I   N   T   E   R       T   O       R   e   c
0026560    t   ]   ;  \r           d   r   R   e   c   o   r   d   :    
0026600    T   Y   P   E       =       R   E   C   O   R   D       [  \r
0026620                    r   ,   b   i   g   r   :       R   e   c   t
0026640    ,  \r                   o   r   A   r   e   a   ,       s   a
0026660    v   e   A   r   e   a   :       d   r   a   w   P   r   o   c
0026700    e   r   ,  \r                   o   u   t   l   :       d   r
0026720    a   w   P   r   o   c   e   r   c   ,  \r                   d
0026740    t   x   t   :       d   r   a   w   P   r   o   c   e   r   s
0026760    ,  \r                   m 376 001  \0 004   5   i   n   S   i
0027000    z   e   :       I   N   T   E   G   E   R   ,  \r            
0027020        q   u   i   c   k   D   r   a   w   :       P   R   O   C
0027040        [   o   b   :       p   p   d   e   f   s   .   o   b   P
0027060    t   r   ,       o   r   i   e   n   t   :       p   p   d   e
0027100    f   s   .   o   r   i   e   n   t   a   t   i   o   n   I   n
0027120    d   e   x   ,  \r                           x   ,       y   :
0027140        p   p   d   e   f   s   .   l   o   c   N   u   m   ,    
0027160    p   r   :       P   O   I   N   T   E   R       T   O       p
0027200    p   d   e   f   s   .   d   r   R   e   c   o   r   d   ]  \r
0027220                            R   E   T   U   R   N   S       [   d
0027240    r   a   w   n   :       B   O   O   L   E   A   N   ]       _
0027260        N   I   L   ]   ;  \r  \r           R   a   s   t   e   r
0027300    :       T   Y   P   E       =       L   O   N   G       P   O
0027320    I   N   T   E   R       T   O       R   a   s   t   e   r   D
0027340    e   s   c       _       N   I   L   ;  \r           R   a   s
0027360    t   e   r   D   e   s   c   :       T   Y   P 376 001  \0 241
0027400    r   E       =       R   E   C   O   R   D       [  \r        
0027420            n   P   i   x   e   l   s   :       P   i   x   e   l
0027440    P   o   i   n   t   ,       -   -       .   x       i   s    
0027460    p   i   x   e   l   s   *   b   i   t   s   /   p   i   x   e
0027500    l   ,       .   y       i   s       s   c   a   n       l   i
0027520    n   e   s  \r                   s   c   a   n   L   i   n   e
0027540    W   o   r   d   s   :       I   N   T   E   G   E   R   ,  \r
0027560                    m   a   p   :       L   O   N   G       P   O
0027600    I   N   T   E   R       T   O       A   R   R   A   Y       [
0027620    0   .   .   0   )       O   F       W   O   R   D  \r        
0027640            ]   ;  \r  \r           P   i   x   e   l   R   e   c
0027660    t   :       T   Y   P   E       =       R   e   c   t   ;  \r
0027700            P   i   x   e   l   P   o   i   n   t   :       T   Y
0027720    P   E       =       P   o   i   n   t   ;  \r           P   i
0027740    x   e   l   :       T   Y   P   E       =       I   N   T   E
0027760    G   E   R   ;       -   -       a   l   o   n   g       a    
0030000    v 376 001  \0 204   6   e   r   t   i   c   a   l       o   r
0030020        h   o   r   i   z   o   n   t   a   l       l   i   n   e
0030040   \r  \r  \r           i   n   i   t   R   e   c   t   s   :    
0030060    P   R   O   C   ;  \r           C   e   n   t   e   r   A   n
0030100    d   S   c   a   l   e   :       P   R   O   C       [   c   e
0030120    n   t   e   r   :       P   o   i   n   t   ,       s   c   a
0030140    l   e   :       I   N   T   E   G   E   R   ,       b   w   ,
0030160        c   o   l   :       B   O   O   L   E   A   N       _    
0030200    F   A   L   S   E   ]   ;  \r           r   e   D   r   a   w
0030220    R   e   c   t   :       P   R   O   C       [   r   :       R
0030240    e   c   t   ,       w   h   e   n   E   r   a   s   e   :    
0030260    C   A   R   D   I   N   A   L   ,       b   w   ,       c   o
0030300    l   ,       a   l   l   :       B   O   O   L   E   A   N   ]
0030320    ;  \r           d   r   a   w   N   e   w   l   y   S   e   l
0030340    :       P   R   O   C       [   p   :       l   i   s   t   P
0030360    t   r   ]   ;  \r           g   e   t   C   o   l   N   e   w
0030400    R   e   c   t   :     376 001  \0 300 364   P   R   O   C    
0030420    R   E   T   U   R   N   S       [   s   C   m   d   ]   ;    
0030440    -   -       w   a   i   t   s       i   f       n   o   n   e
0030460        r   e   a   d   y  \r           g   e   t   B   w   N   e
0030500    w   R   e   c   t   :       P   R   O   C       R   E   T   U
0030520    R   N   S       [   s   C   m   d   ]   ;       -   -       w
0030540    a   i   t   s       i   f       n   o   n   e       r   e   a
0030560    d   y  \r  \r           -   -   *   *   *   *   *   *   *   *
0030600    *       e   x   p   o   r   t   s       f   r   o   m       p
0030620    p   s   p   a   c   e   .   m   e   s   a  \r  \r           s
0030640    w   d   s   A   l   o   c   :       C   A   R   D   I   N   A
0030660    L   ;  \r           l   w   d   s   A   l   o   c   :       L
0030700    O   N   G       I   N   T   E   G   E   R   ;  \r           G
0030720    e   t   S   u   p   e   r   P   o   i   n   t   e   r   :    
0030740    P   R   O   C       R   E   T   U   R   N   S       [   l   i
0030760    s   t   P   t   r   ]   ;  \r           G   e   t   C   e   l
0031000    l   S   u   p   e   r   :       P   R   O 376 001  \0   9 347
0031020    C       R   E   T   U   R   N   S       [   c   e   l   l   P
0031040    t   r   ]   ;  \r           G   e   t   S   p   a   c   e   :
0031060        P   R   O   C       [   C   A   R   D   I   N   A   L   ]
0031100        R   E   T   U   R   N   S       [   L   O   N   G       P
0031120    O   I   N   T   E   R   ]   ;  \r           F   r   e   e   S
0031140    p   a   c   e   :       P   R   O   C       [   p   :       L
0031160    O   N   G       P   O   I   N   T   E   R   ]   ;  \r        
0031200    I   n   i   t   H   e   a   p   :       P   R   O   C       [
0031220    n   p   :       C   A   R   D   I   N   A   L   ]   ;  \r    
0031240        E   r   a   s   e   H   e   a   p   :       P   R   O   C
0031260    ;  \r           G   e   t   S   t   r   i   n   g   :       P
0031300    R   O   C       [   n   c   h   a   r   s   :       C   A   R
0031320    D   I   N   A   L   ]       R   E   T   U   R   N   S       [
0031340    s   :       S   T   R   I   N   G   ]   ;  \r           F   r
0031360    e   e   S   t   r   i   n   g   :       P   R   O   C       [
0031400    s   :       S   T   R   I   N   G   ]   ;  \r           n   e
0031420  376 001  \0   #  \t   w   S   t   r   i   n   g   :       P   R
0031440    O   C       [   s   :       S   T   R   I   N   G   ]       R
0031460    E   T   U   R   N   S       [   s   s   :       S   T   R   I
0031500    N   G   ]   ;  \r           a   l   o   c   R   e   c   t   D
0031520    :       P   R   O   C       R   E   T   U   R   N   S       [
0031540    p   :       L   O   N   G       P   O   I   N   T   E   R    
0031560    T   O       r   e   c   t       o   b   j   e   c   t   ]   ;
0031600   \r           a   l   o   c   W   i   r   e   D   :       P   R
0031620    O   C       R   E   T   U   R   N   S       [   p   :       L
0031640    O   N   G       P   O   I   N   T   E   R       T   O       w
0031660    i   r   e       o   b   j   e   c   t   ]   ;  \r           a
0031700    l   o   c   B   u   s   D   :           P   R   O   C       R
0031720    E   T   U   R   N   S       [   p   :       L   O   N   G    
0031740    P   O   I   N   T   E   R       T   O       b   u   s       o
0031760    b   j   e   c   t   ]   ;  \r           a   l   o   c   X   s
0032000    t   r   D   :       P   R   O   C       R   E   T   U   R   N
0032020    S       [   p   : 376 001  \0   n 247       L   O   N   G    
0032040    P   O   I   N   T   E   R       T   O       x   s   t   r    
0032060    o   b   j   e   c   t   ]   ;  \r           a   l   o   c   C
0032100    e   l   l   D   :       P   R   O   C       R   E   T   U   R
0032120    N   S       [   p   :       c   e   l   l   P   t   r   ]   ;
0032140   \r           a   l   o   c   C   o   n   t   D   :       P   R
0032160    O   C       R   E   T   U   R   N   S       [   p   :       L
0032200    O   N   G       P   O   I   N   T   E   R       T   O       c
0032220    o   n   t       o   b   j   e   c   t   ]   ;  \r           a
0032240    l   o   c   T   e   x   t   D   :       P   R   O   C       R
0032260    E   T   U   R   N   S       [   p   :       L   O   N   G    
0032300    P   O   I   N   T   E   R       T   O       t   e   x   t    
0032320    o   b   j   e   c   t   ]   ;  \r           a   l   o   c   C
0032340    n   T   e   x   t   D   :       P   R   O   C       R   E   T
0032360    U   R   N   S       [   p   :       L   O   N   G       P   O
0032400    I   N   T   E   R       T   O       c   n   T   e   x   t    
0032420    o   b   j   e   c   t   ]   ;  \r     376 001  \0 001 303    
0032440    a   l   o   c   L   i   s   t   :       P   R   O   C       R
0032460    E   T   U   R   N   S       [   p   :       l   i   s   t   P
0032500    t   r   ]   ;  \r           a   l   o   c   C   L   i   s   t
0032520    :       P   R   O   C       R   E   T   U   R   N   S       [
0032540    p   :       c   L   i   s   t   P   t   r   ]   ;  \r        
0032560    f   r   e   e   L   i   s   t   :       P   R   O   C       [
0032600    l   i   s   t   P   t   r   ]   ;  \r           f   r   e   e
0032620    C   e   l   l   :       P   R   O   C       [   p   :       c
0032640    e   l   l   P   t   r   ]   ;  \r  \r           -   -   *   *
0032660    *   *       o   l   d       p   p   p   r   o   c   d   e   f
0032700    s       s   t   u   f   f   :  \r  \r           u   n   D   e
0032720    l   G   r   p   M   a   x   :       C   A   R   D   I   N   A
0032740    L       =       1   0   ;  \r           u   n   D   e   l   I
0032760    t   e   m   M   a   x   :       C   A   R   D   I   N   A   L
0033000        =       3   0   0   ;  \r           u   n   D   e   l   I
0033020    t   e   m   M   i   n   :       C   A   R   D   I   N   A 376
0033040  001  \0 373   J   L       =       3   0   ;  \r  \r           u
0033060    n   D   e   l   P   n   t   :       l   i   s   t   P   t   r
0033100    ;  \r           u   n   D   e   l   G   r   p   C   n   t   ,
0033120        u   n   D   e   l   I   t   e   m   C   n   t   :       C
0033140    A   R   D   I   N   A   L   ;  \r  \r           a   n   y   C
0033160    h   a   n   g   e   s   ,       s   i   n   c   e   I   O   c
0033200    h   a   n   g   e   s   :       B   O   O   L   E   A   N   ;
0033220   \r  \r           D   i   f   f   u   s   i   o   n   T   y   p
0033240    e   :       T   Y   P   E       =       {   n   ,       p   }
0033260    ;  \r           d   i   f   f   u   s   i   o   n   T   y   p
0033300    e   :       D   i   f   f   u   s   i   o   n   T   y   p   e
0033320    ;  \r           D   i   f   f   u   s   i   o   n   P   u   r
0033340    p   o   s   e   :       T   Y   P   E       =       {   w   i
0033360    r   i   n   g   ,       w   e   l   l   C   o   n   t   }   ;
0033400   \r           d   i   f   f   u   s   i   o   n   P   u   r   p
0033420    o   s   e   :       D   i   f   f   u   s   i   o   n   P   u
0033440    r   p   o   s 376 001  \0 355   /   e   ;  \r           d   i
0033460    f   f   u   s   i   o   n   L   e   v   e   l   :       A   R
0033500    R   A   Y       D   i   f   f   u   s   i   o   n   T   y   p
0033520    e       O   F       A   R   R   A   Y       D   i   f   f   u
0033540    s   i   o   n   P   u   r   p   o   s   e       O   F       l
0033560    e   v   e   l       =  \r                   [   n   :       [
0033600    w   i   r   i   n   g   :       d   i   f   ,       w   e   l
0033620    l   C   o   n   t   :       n   w   e   l   C   o   n   t   ]
0033640    ,       p   :       [   w   i   r   i   n   g   :       p   d
0033660    i   f   ,       w   e   l   l   C   o   n   t   :       p   w
0033700    e   l   C   o   n   t   ]   ]   ;  \r  \r           x   R   a
0033720    t   i   o   w   :       I   N   T   E   G   E   R   ;       -
0033740    -       f   o   r       t   r   a   n   s   i   s   t   o   r
0033760    s  \r           x   R   a   t   i   o   l   :       I   N   T
0034000    E   G   E   R   ;  \r           i   m   p   l   a   n   t   :
0034020        D   e   p   l   e   t   i   o   n   S   t   r   e   n   g
0034040    t   h   ;  \r           p   R   a 376 001  \0   q 354   t   i
0034060    o   w   :       I   N   T   E   G   E   R   ;       -   -    
0034100    f   o   r       d   e   p   l   e   t   i   o   n       p   u
0034120    l   l   u   p       s   t   r   u   c   t   u   r   e   s  \r
0034140            p   R   a   t   i   o   l   :       I   N   T   E   G
0034160    E   R   ;  \r           p   u   s   h   L   e   v   e   l   :
0034200        I   N   T   E   G   E   R   ;  \r  \r           -   -   *
0034220    *   *   *       f   r   o   m       p   p   p   r   o   c   s
0034240    ?   :  \r  \r           m   i   n   W   i   d   t   h   A   r
0034260    :       A   R   R   A   Y       l   e   v   e   l       O   F
0034300        I   N   T   E   G   E   R   ;  \r  \r           b   w   G
0034320    r   a   i   n   :       I   N   T   E   G   E   R   ;  \r    
0034340        c   o   l   G   r   a   i   n   :       I   N   T   E   G
0034360    E   R   ;  \r           a   b   o   r   t   C   o   l   o   r
0034400    ,       a   b   o   r   t   B   W   :       B   O   O   L   E
0034420    A   N   ;  \r  \r           r   e   d   o   C   B   B   o   x
0034440    :       P   R   O   C   ;  \r  \r           w   i   r 376 001
0034460   \0   :   !   e   L   i   s   t   :       A   R   R   A   Y    
0034500    l   e   v   e   l       O   F       L   O   N   G       P   O
0034520    I   N   T   E   R       T   O       w   i   r   e       o   b
0034540    j   e   c   t   ;  \r           t   r   a   n   L   i   s   t
0034560    :       L   O   N   G       P   O   I   N   T   E   R       T
0034600    O       x   s   t   r       o   b   j   e   c   t   ;  \r    
0034620        p   u   L   i   s   t   :       L   O   N   G       P   O
0034640    I   N   T   E   R       T   O       x   s   t   r       o   b
0034660    j   e   c   t   ;  \r           c   o   n   t   L   i   s   t
0034700    :       L   O   N   G       P   O   I   N   T   E   R       T
0034720    O       c   o   n   t       o   b   j   e   c   t   ;  \r    
0034740        -   -   d   o   C   o   l   R   e   m   e   m   b   e   r
0034760    :   P   R   O   C       ;  \r           -   -   d   o   B   w
0035000    R   e   m   e   m   b   e   r   :       P   R   O   C       ;
0035020   \r  \r           i   n   r   e   c   t   :       P   R   O   C
0035040        [   x   ,       y   :       I   N   T   E   G   E   R   ,
0035060        l   p 376 001  \0   7 366   :       l   i   s   t   P   t
0035100    r   ]       R   E   T   U   R   N   S       [   B   O   O   L
0035120    E   A   N   ]   ;  \r           w   h   a   t   L   e   v   e
0035140    l   s   :       P   R   O   C       [   l   p   :       l   i
0035160    s   t   P   t   r   ,       x   ,       y   :       l   o   c
0035200    N   u   m   ]  \r                   R   E   T   U   R   N   S
0035220        [   l   e   v   s   :       C   A   R   D   I   N   A   L
0035240    ]   ;  \r           f   l   u   s   h   D   e   l   :       P
0035260    R   O   C       [   l   p   :       l   i   s   t   P   t   r
0035300    ]   ;  \r  \r           c   o   p   y   O   b   j   e   c   t
0035320    :       P   R   O   C       [   l   p   ,       m   p   :    
0035340    l   i   s   t   P   t   r   ,       x   o   f   f   ,       y
0035360    o   f   f   :       I   N   T   E   G   E   R   ]  \r        
0035400            R   E   T   U   R   N   S       [   n   p   :       l
0035420    i   s   t   P   t   r   ]   ;  \r           m   i   n   m   a
0035440    x   :       P   R   O   C       [   l   p   :       l   i   s
0035460    t   P   t   r   ]  \r         376 001  \0   y   N           R
0035500    E   T   U   R   N   S       [   m   i   x   ,       m   i   y
0035520    ,       m   a   x   ,       m   a   y   :       I   N   T   E
0035540    G   E   R   ]   ;  \r           t   y   p   e   I   n   N   u
0035560    m   :       P   R   O   C       [   o   s   1   ,       o   s
0035600    2   ,       o   s   3   :       S   T   R   I   N   G   ]  \r
0035620                    R   E   T   U   R   N   S       [   b   b   :
0035640        B   O   O   L   E   A   N   ,       i   i   :       I   N
0035660    T   E   G   E   R   ,       k   e   :       k   e   y   E   v
0035700    e   n   t   ]   ;  \r           t   y   p   e   I   n   :    
0035720    P   R   O   C       [   o   s   1   ,       o   s   2   ,    
0035740    o   s   3   :       S   T   R   I   N   G   ]  \r            
0035760        R   E   T   U   R   N   S       [   b   b   :       B   O
0036000    O   L   E   A   N   ,       i   s   :       S   T   R   I   N
0036020    G   ,       k   e   :       k   e   y   E   v   e   n   t   ]
0036040    ;  \r           t   y   p   e   I   n   C   :       P   R   O
0036060    C       [   o   s   1   ,       o   s   2   ,     376 001  \0
0036100  320 035   o   s   3   :       S   T   R   I   N   G   ]       R
0036120    E   T   U   R   N   S       [   k   k   :       k   e   y   E
0036140    v   e   n   t   ]   ;  \r           t   y   p   e   O   u   t
0036160    :       P   R   O   C       [   o   s   1   ,       o   s   2
0036200    ,       o   s   3   :       S   T   R   I   N   G   ]   ;  \r
0036220            r   e   f   r   e   s   h   T   y   p   e   I   n   S
0036240    c   r   e   e   n   :       P   R   O   C       ;  \r  \r    
0036260        i   n   i   t   C   o   l   o   r   s   :       P   R   O
0036300    C   ;  \r           s   e   t   C   o   l   o   r   s   :    
0036320    P   R   O   C   ;  \r  \r           g   e   t   c   h   r   :
0036340        P   R   O   C       R   E   T   U   R   N   S       [   k
0036360    e   :       k   e   y   E   v   e   n   t   ]   ;  \r        
0036400    g   e   t   N   u   m   b   e   r   :       P   R   O   C    
0036420    R   E   T   U   R   N   S       [   I   N   T   E   G   E   R
0036440    ]   ;  \r           g   e   t   s   t   r   :       P   R   O
0036460    C       [   x   ,       y   :       C   A   R   D   I   N   A
0036500    L   ] 376 001  \0   k 266       R   E   T   U   R   N   S    
0036520    [   B   O   O   L   E   A   N   ,       S   T   R   I   N   G
0036540    ,       k   e   y   E   v   e   n   t   ]   ;  \r  \r  \r    
0036560        -   -       *   *   *   *   *   *   *   *   *   *   *   *
0036600   \r  \r           x   x   ,       y   y   :       I   N   T   E
0036620    G   E   R   ;  \r           b   b   :       B   O   O   L   E
0036640    A   N   ;  \r  \r           m   o   v   e   O   b   :       P
0036660    R   O   C       [   p   :       l   i   s   t   P   t   r   ,
0036700        x   ,       y   :       I   N   T   E   G   E   R   ]   ;
0036720   \r  \r           m   e   r   g   e   R   e   c   t   s   :    
0036740    P   R   O   C       [   a   ,       b   :       R   e   c   t
0036760    ]       R   E   T   U   R   N   S       [   R   e   c   t   ]
0037000    ;  \r           C   l   i   p   R   e   c   t   :       P   R
0037020    O   C       [   a   ,       b   :       R   e   c   t   ]    
0037040    R   E   T   U   R   N   S       [   R   e   c   t   ]       =
0037060        I   N   L   I   N   E       -   -       i   n   t   e   r
0037100    s   e   c   t   i   o   n 376 001  \0  \n 343  \r            
0037120        {   R   E   T   U   R   N   [   [   x   1   :       M   A
0037140    X   [   a   .   x   1   ,       b   .   x   1   ]   ,       y
0037160    1   :       M   A   X   [   a   .   y   1   ,       b   .   y
0037200    1   ]   ,  \r                           x   2   :       M   I
0037220    N   [   a   .   x   2   ,       b   .   x   2   ]   ,       y
0037240    2   :       M   I   N   [   a   .       y   2   ,       b   .
0037260    y   2   ]   ]   ]   }   ;  \r           E   m   p   t   y   :
0037300        P   R   O   C       [   r   :       R   e   c   t   ]    
0037320    R   E   T   U   R   N   S   [   B   O   O   L   E   A   N   ]
0037340        =       I   N   L   I   N   E  \r                   {   R
0037360    E   T   U   R   N   [   r   .   x   2   <   r   .   x   1    
0037400    O   R       r   .   y   2   <   r   .   y   1   ]   }   ;    
0037420    -   -       f   o   r       d   i   r   e   c   t   e   d    
0037440    R   e   c   t   s  \r           c   a   n   n   o   n   R   e
0037460    c   t   :       P   R   O   C       [   r   :       R   e   c
0037500    t   ]       R   E   T   U   R   N   S       [ 376  \0 327 037
0037520    7   R   e   c   t   ]   ;  \r                   -   -       p
0037540    r   o   d   u   c   e   s       a       n   o   n   -   e   m
0037560    p   t   y       R   e   c   t  \r  \r           g   e   t   R
0037600    e   c   t   :       P   R   O   C       [   l   :       l   i
0037620    s   t   P   t   r   ]       R   E   T   U   R   N   S       [
0037640    r   :       R   e   c   t   ]   ;  \r  \r           M   o   d
0037660    :       P   R   O   C       [   x   :       I   N   T   E   G
0037700    E   R   ,       y   :       N   A   T   ]       R   E   T   U
0037720    R   N   S       [   N   A   T   ]       =       I   N   L   I
0037740    N   E  \r                   {   z   :       I   N   T   E   G
0037760    E   R       =       x       M   O   D       y   ;       R   E
0040000    T   U   R   N   [   I   F       z   >   =   0       T   H   E
0040020    N       z       E   L   S   E       y   +   z   ]   }   ;  \r
0040040   \r           E   N   D   .  \r 377  \0  \0   p   p   d   d   d
0040060    e   f   s   .   m   e   s   a  \0 373 234 017 207 357  \0  \0
0040100  376 001  \0 306 356   -   -       t   h   i   r   d       d   e
0040120    f   i   n   i   t   i   o   n   s       m   o   d   u   l   e
0040140        f   o   r       s   i   l   i   c   o   n       (   p   r
0040160    e   t   t   y       p   i   c   t   u   r   e   )       p   r
0040200    o   g   r   a   m  \r   -   -       l   a   s   t       m   o
0040220    d   i   f   i   e   d       b   y       M   c   C   r   e   i
0040240    g   h   t   ,       D   e   c   e   m   b   e   r       2   0
0040260    ,       1   9   8   3           2   :   3   3       P   M  \r
0040300    -   -       c   r   e   a   t   e   d       b   y       P   e
0040320    t   i   t   ,       S   e   p   t   e   m   b   e   r       1
0040340    8   ,       1   9   8   1           2   :   4   0       P   M
0040360   \r  \r   D   I   R   E   C   T   O   R   Y  \r           S   e
0040400    g   m   e   n   t   D   e   f   s   ,  \r           m   u   l
0040420    t   i   G   r   a   p   h   i   c   s   D   e   f   s   ,  \r
0040440            p   p   d   e   f   s   ,  \r           S   t   r   e
0040460    a   m   D   e   f   s   ;  \r   p   p   d   d   d   e   f   s
0040500    :       D   E   F 376 001  \0   _ 024   I   N   I   T   I   O
0040520    N   S       I   M   P   O   R   T   S       p   p   d   e   f
0040540    s   ,       S   e   g   m   e   n   t   D   e   f   s   ,    
0040560    m   u   l   t   i   G   r   a   p   h   i   c   s   D   e   f
0040600    s   ,       S   t   r   e   a   m   D   e   f   s       =  \r
0040620            B   E   G   I   N       O   P   E   N       p   p   d
0040640    e   f   s   ,       m   u   l   t   i   G   r   a   p   h   i
0040660    c   s   D   e   f   s   ,       S   t   r   e   a   m   D   e
0040700    f   s   ;  \r  \r           -   -       *   *   *   *       e
0040720    x   p   o   r   t   s       f   r   o   m       p   p   p   u
0040740    s   h   :  \r  \r           F   i   n   d   N   a   m   e   d
0040760    C   e   l   l   :       P   R   O   C       [   s   :       S
0041000    T   R   I   N   G   ]       R   E   T   U   R   N   S   [   c
0041020    p   :       c   L   i   s   t   P   t   r   ]   ;  \r        
0041040    -   -       I   f       s       i   s       t   h   e       n
0041060    a   m   e       o   f       a       n   a   m   e   d       c
0041100    e   l   l       o   n       c   e   l 376 001  \0 250 200   l
0041120    L   i   s   t   ,           c   p  \r           -   -       i
0041140    s       t   h   e       e   n   t   r   y       f   o   r    
0041160    t   h   a   t       c   e   l   l   .           O   t   h   e
0041200    r   w   i   s   e       c   p       i   s       N   I   L   .
0041220   \r  \r           d   o   P   o   p   ,       p   u   s   h   N
0041240    a   m   e   ,       p   u   s   h   S   e   l   ,       p   u
0041260    s   h   P   n   t   :       c   m   d   P   r   o   c   ;  \r
0041300   \r           A   d   j   u   s   t   C   a   l   l   e   r   s
0041320    B   B   o   x   e   s   :       P   R   O   C       [   o   b
0041340    :       o   b   P   t   r   ]   ;  \r                   -   -
0041360        F   i   n   d       a   l   l       c   a   l   l   e   r
0041400    s       o   f       o   b       a   n   d       a   d   j   u
0041420    s   t       t   h   e   i   r       b   o   u   n   d   i   n
0041440    g       b   o   x   e   s       a   n   d       c   a   l   l
0041460        p   o   s   i   t   i   o   n   s  \r                   -
0041500    -       a   s       n   e   c   e   s   s   a   r   y   . 376
0041520  001  \0 212   p           C   h   a   n   g   e   s       p   r
0041540    o   p   a   g   a   t   e       r   e   c   u   r   s   i   v
0041560    e   l   y   .  \r           B   B   o   x   H   a   s   C   h
0041600    a   n   g   e   d   :       P   R   O   C       [   o   b   :
0041620        o   b   P   t   r   ]       R   E   T   U   R   N   S    
0041640    [   B   O   O   L   E   A   N   ]   ;  \r                   -
0041660    -       R   e   c   o   m   p   u   t   e       t   h   e    
0041700    b   o   u   n   d   i   n   g       b   o   x       o   f    
0041720    a   n       o   b   j   e   c   t       f   r   o   m       i
0041740    t   s       f   i   r   s   t   -   l   e   v   e   l       s
0041760    u   b   -   o   b   j   e   c   t   s   .  \r                
0042000    -   -       I   f       i   t       h   a   s       c   h   a
0042020    n   g   e   d   ,       a   d   j   u   s   t       t   h   e
0042040        p   o   s   i   t   i   o   n   s       o   f       a   l
0042060    l       c   a   l   l   s       o   n       t   h   i   s    
0042100    o   b   j   e   c   t   .  \r           c   e   l   l   S   h
0042120    i   f   t   : 376 001  \0   V  \n       P   R   O   C       [
0042140    l   p   :       l   i   s   t   P   t   r   ,       i   x   ,
0042160        i   y   ,       a   x   ,       a   y   :       l   o   c
0042200    N   u   m   ]   ;  \r  \r  \r           -   -       *   *   *
0042220    *       e   x   p   o   r   t   s       f   r   o   m       p
0042240    p   p   r   o   c   s   6   :  \r  \r           n   o   C   h
0042260    a   n   g   e   :       B   O   O   L   E   A   N   ;  \r    
0042300        c   C   h   a   n   g   e   ,       b   C   h   a   n   g
0042320    e   ,       d   o   i   n   g   A   r   e   a   S   e   l   :
0042340        B   O   O   L   E   A   N   ;  \r           d   i   d   B
0042360    W   :       B   O   O   L   E   A   N   ;  \r  \r           d
0042400    o   M   o   v   e   :       c   m   d   P   r   o   c   ;  \r
0042420            m   o   v   U   p   :       c   m   d   P   r   o   c
0042440    ;  \r           m   o   v   D   n   :       c   m   d   P   r
0042460    o   c   ;  \r           m   o   v   L   f   t   :       c   m
0042500    d   P   r   o   c   ;  \r           m   o   v   R   g   t   :
0042520        c   m   d   P   r   o   c   ; 376 001  \0 313 020  \r    
0042540        d   i   s   p   E   r   f   :       c   m   d   P   r   o
0042560    c   ;  \r           r   o   t   S   e   l   :       c   m   d
0042600    P   r   o   c   ;  \r           r   o   t   P   n   t   :    
0042620    c   m   d   P   r   o   c   ;  \r           m   i   r   r   o
0042640    r   S   e   l   :       c   m   d   P   r   o   c   ;  \r    
0042660        m   i   r   r   o   r   P   n   t   :       c   m   d   P
0042700    r   o   c   ;  \r           s   e   t   C   o   l   s   :    
0042720    c   m   d   P   r   o   c   ;  \r           d   o   C   o   p
0042740    y   :       c   m   d   P   r   o   c   ;  \r  \r  \r        
0042760    -   -       *   *   *   *   *       e   x   p   o   r   t   s
0043000        f   r   o   m       p   p   f   e   e   d   :  \r  \r    
0043020        m   o   d   e   :       M   o   d   e   ;  \r           c
0043040    r   e   a   t   e   S   e   l   ,   S   t   r   e   t   c   h
0043060    y   :       B   O   O   L   E   A   N   ;  \r           w   i
0043100    r   i   n   g   L   e   v   e   l   :       l   e   v   e   l
0043120    ;  \r           w   i   r   i   n   g   O   r   n   : 376 001
0043140   \0 201 333       o   r   i   e   n   t   a   t   i   o   n   ;
0043160   \r           f   a   v   L   e   v   :       l   e   v   e   l
0043200    ;  \r           S   e   t   F   a   v   L   e   v   :       P
0043220    R   O   C       [   l   :       l   e   v   e   l   ]   ;  \r
0043240            l   e   v   M   a   s   k   :       C   A   R   D   I
0043260    N   A   L   ;  \r           l   a   m   b   d   a   G   r   i
0043300    d   ,       t   i   c   k   G   r   i   d   :       C   A   R
0043320    D   I   N   A   L   ;  \r           b   a   s   i   c   O   r
0043340    i   e   n   t   a   t   i   o   n   :       o   r   i   e   n
0043360    t   a   t   i   o   n   ;  \r           l   o   c   C   e   l
0043400    l   :       S   T   R   I   N   G   ;  \r           l   o   c
0043420    I   N   a   m   e   :       S   T   R   I   N   G   ;  \r    
0043440        i   n   s   i   d   e   C   e   l   l   :       S   T   R
0043460    I   N   G   ;  \r           s   e   l   C   o   u   n   t   :
0043500        C   A   R   D   I   N   A   L   ;  \r           p   C   i
0043520    f   S   c   a   l   e   :       I   N   T   E   G   E   R   ;
0043540   \r         376 001  \0 301 311   t   o   t   L   p   ,       d
0043560    n   e   L   p   :       C   A   R   D   I   N   A   L   ;  \r
0043600    r   e   c   t   a   n   g   l   e   M   o   d   e   :   B   O
0043620    O   L   E   A   N   ;  \r   r   e   c   t   L   e   v   :    
0043640    l   e   v   e   l   ;  \r           t   i   c   k   O   f   f
0043660    :   I   N   T   E   G   E   R   ;  \r  \r           d   i   s
0043700    p   l   a   y   P   a   r   a   m   e   t   e   r   s   :    
0043720    P   R   O   C   E   D   U   R   E   ;  \r           d   o   R
0043740    f   e   e   d   :       P   R   O   C   E   D   U   R   E    
0043760    R   E   T   U   R   N   S       [   B   O   O   L   E   A   N
0044000    ,       B   O   O   L   E   A   N   ]   ;  \r           d   o
0044020    Y   f   e   e   d   :       P   R   O   C   E   D   U   R   E
0044040        R   E   T   U   R   N   S       [   B   O   O   L   E   A
0044060    N   ,       B   O   O   L   E   A   N   ]   ;  \r           d
0044100    o   B   f   e   e   d   :       P   R   O   C   E   D   U   R
0044120    E       R   E   T   U   R   N   S       [   B   O   O   L   E
0044140    A   N   ,       B   O   O   L 376 001  \0 021 271   E   A   N
0044160    ]   ;  \r  \r           s   e   t   B   W   o   f   f   s   e
0044200    t   :       P   R   O   C   E   D   U   R   E       [   x   ,
0044220        y   :       I   N   T   E   G   E   R   ]   ;  \r        
0044240    s   e   t   C   o   f   f   s   e   t   :       P   R   O   C
0044260    E   D   U   R   E       [   x   ,       y   :       I   N   T
0044300    E   G   E   R   ]   ;  \r           s   e   t   B   W   s   c
0044320    a   l   e   :       P   R   O   C   E   D   U   R   E       [
0044340    q   q   :       I   N   T   E   G   E   R   ]   ;  \r        
0044360    s   e   t   C   s   c   a   l   e   :       P   R   O   C   E
0044400    D   U   R   E       [   q   q   :       I   N   T   E   G   E
0044420    R   ]   ;  \r           d   o   P   a   r   m   I   n   i   t
0044440    :       P   R   O   C   E   D   U   R   E   ;  \r  \r  \r    
0044460        -   -   *   *   *   *   *   *       e   x   p   o   r   t
0044500    s       f   r   o   m       p   p   c   c   u   r   :  \r  \r
0044520            w   i   r   i   n   g   ,       b   o   x   i   n   g
0044540    :       B   O   O   L   E   A   N   ;  \r  \r     376 001  \0
0044560  232   s       i   n   i   t   C   c   u   r   s   e   :       P
0044600    R   O   C   E   D   U   R   E       [   s   i   z   e   :    
0044620    C   A   R   D   I   N   A   L   ,       c   p   :       P   O
0044640    I   N   T   E   R       T   O       B   i   t   m   a   p   ]
0044660    ;  \r           g   o   n   n   a   D   o   C   r   e   c   t
0044700    :       P   R   O   C   E   D   U   R   E       [   x   1   ,
0044720        y   1   ,       x   2   ,       y   2   :       I   N   T
0044740    E   G   E   R   ]   ;  \r           d   o   n   e   C   r   e
0044760    c   t   :       P   R   O   C   E   D   U   R   E   ;  \r    
0045000        d   r   a   w   C   o   l   o   r   C   u   r   s   :    
0045020    P   R   O   C   E   D   U   R   E       [   x   ,       y   :
0045040        I   N   T   E   G   E   R   ]   ;  \r           u   n   d
0045060    r   a   w   C   o   l   o   r   C   u   r   s   :       P   R
0045100    O   C   E   D   U   R   E   ;  \r           d   o   T   e   m
0045120    p   s   :       P   R   O   C   E   D   U   R   E   ;  \r    
0045140        s   e   t   u   p   T   e   m   p   W   i   r   e   s   :
0045160        P 376 001  \0 314   ]   R   O   C   E   D   U   R   E    
0045200    [  \r                   p   :       P   o   i   n   t   ,    
0045220    o   :       o   r   i   e   n   t   a   t   i   o   n   ,    
0045240    c   o   l   :   l   e   v   e   l   ,       w   i   d   ,   c
0045260    o   r   n   e   r   O   f   f   s   e   t   :   I   N   T   E
0045300    G   E   R   ,  \r                   b   i   g   C   h   a   n
0045320    g   e   :       B   O   O   L   E   A   N   ]   ;  \r        
0045340    s   e   t   u   p   B   o   x   :       P   R   O   C   E   D
0045360    U   R   E       [   p   :       P   o   i   n   t   ,       b
0045400    i   g   C   h   a   n   g   e   :       B   O   O   L   E   A
0045420    N   ]   ;  \r           s   e   t   u   p   T   e   m   p   B
0045440    u   s   :       P   R   O   C   E   D   U   R   E       [  \r
0045460                    p   :       P   o   i   n   t   ,       o   :
0045500        o   r   i   e   n   t   a   t   i   o   n   ,       c   o
0045520    l   :   l   e   v   e   l   ,       w   i   d   ,   c   o   r
0045540    n   e   r   O   f   f   s   e   t   :   I   N   T   E   G   E
0045560    R   ,  \r                 376 001  \0 020   &   b   i   g   C
0045600    h   a   n   g   e   :       B   O   O   L   E   A   N   ,    
0045620    s   t   r   t   O   f   f   x   ,   s   t   r   t   O   f   f
0045640    y   ,   c   o   r   n   e   r   O   f   f   ,   c   o   u   n
0045660    t   :   I   N   T   E   G   E   R   ]       ;  \r  \r        
0045700    -   -   *   *   *   *       f   r   o   m       p   p   p   r
0045720    o   c   s   :  \r  \r           m   a   k   e   P   u   l   l
0045740    u   p   :       P   R   O   C   E   D   U   R   E       [   w
0045760    ,   l   :   I   N   T   E   G   E   R   ,   w   E   x   t   :
0046000    I   N   T   E   G   E   R   _   w   X   E   x   t   e   n   s
0046020    i   o   n   ,   l   E   x   t   :   I   N   T   E   G   E   R
0046040    _   l   X   E   x   t   e   n   s   i   o   n   ,  \r        
0046060            d   i   f   L   e   v   :       l   e   v   e   l    
0046100    _       u   n   s   p   e   c   i   f   i   e   d   ]       R
0046120    E   T   U   R   N   S       [   p   :       o   b   P   t   r
0046140    ]   ;  \r           m   a   k   e   X   s   t   r   :       P
0046160    R   O   C   E   D   U   R   E       [   w   , 376 001  \0   $
0046200  213       l   :       I   N   T   E   G   E   R   ,       i   m
0046220    p   :       D   e   p   l   e   t   i   o   n   S   t   r   e
0046240    n   g   t   h       _       e   n   h   a   n   c   e   m   e
0046260    n   t   ,  \r                   w   E   x   t   :       I   N
0046300    T   E   G   E   R       _       w   X   E   x   t   e   n   s
0046320    i   o   n   ,       l   E   x   t   :       I   N   T   E   G
0046340    E   R       _       l   X   E   x   t   e   n   s   i   o   n
0046360    ,  \r                   d   i   f   L   e   v   :       l   e
0046400    v   e   l       _       u   n   s   p   e   c   i   f   i   e
0046420    d   ]  \r                   R   E   T   U   R   N   S       [
0046440    p   :       o   b   P   t   r   ]   ;  \r           m   a   k
0046460    e   A   n   g   l   e   X   s   t   r   :       P   R   O   C
0046500    E   D   U   R   E       [   w   ,       l   :       I   N   T
0046520    E   G   E   R   ,       i   m   p   :       D   e   p   l   e
0046540    t   i   o   n   S   t   r   e   n   g   t   h       _       e
0046560    n   h   a   n   c   e   m   e   n   t  \r                   ,
0046600      376 001  \0   G 355   w   E   x   t   :       I   N   T   E
0046620    G   E   R       _       w   X   E   x   t   e   n   s   i   o
0046640    n   ,       l   E   x   t   :   I   N   T   E   G   E   R    
0046660    _       l   X   E   x   t   e   n   s   i   o   n   ,   a   E
0046700    x   t   :   I   N   T   E   G   E   R   _   0   ,  \r        
0046720            d   i   f   L   e   v   :       l   e   v   e   l    
0046740    _       u   n   s   p   e   c   i   f   i   e   d   ]  \r    
0046760                R   E   T   U   R   N   S       [   p   :       o
0047000    b   P   t   r   ]       ;  \r           m   a   k   e   R   e
0047020    c   t   :       P   R   O   C   E   D   U   R   E       [   x
0047040    ,       y   :       I   N   T   E   G   E   R   ,       l   :
0047060        l   e   v   e   l   ]  \r                   R   E   T   U
0047100    R   N   S       [   p   :       o   b   P   t   r   ]   ;  \r
0047120            m   a   k   e   T   e   x   t   :       P   R   O   C
0047140    E   D   U   R   E       [   s   :       S   T   R   I   N   G
0047160    ]       R   E   T   U   R   N   S       [   p   :       o   b
0047200    P   t   r   ]   ;  \r 376 001  \0   ' 302           m   a   k
0047220    e   C   n   T   e   x   t   :       P   R   O   C   E   D   U
0047240    R   E       [  \r                   s   :       S   T   R   I
0047260    N   G   ,       x   w   ,       b   y   w   ,       y   w   :
0047300        I   N   T   E   G   E   R   ,       o   p   :       c   e
0047320    l   l   P   t   r   ,  \r                   n   p   :       c
0047340    L   i   s   t   P   t   r   ]       R   E   T   U   R   N   S
0047360        [   p   :       o   b   P   t   r   ]   ;  \r           m
0047400    a   k   e   B   u   t   c   o   n   :       P   R   O   C   E
0047420    D   U   R   E       [   d   i   f   L   e   v   :       l   e
0047440    v   e   l       _       u   n   s   p   e   c   i   f   i   e
0047460    d   ]       R   E   T   U   R   N   S       [   p   :       o
0047500    b   P   t   r   ]   ;  \r           m   a   k   e   D   i   f
0047520    S   h   o   r   t   C   o   n   t   :       P   R   O   C   E
0047540    D   U   R   E       [   d   i   f   L   e   v   :       l   e
0047560    v   e   l       _       u   n   s   p   e   c   i   f   i   e
0047600    d   ]       R   E   T   U   R   N   S     376 001  \0   e   a
0047620    [   p   :       o   b   P   t   r   ]   ;  \r           m   a
0047640    k   e   P   o   l   y   c   o   n   :       P   R   O   C   E
0047660    D   U   R   E       [   l   l   l   :       I   N   T   E   G
0047700    E   R   ]       R   E   T   U   R   N   S       [   p   :    
0047720    o   b   P   t   r   ]   ;  \r           m   a   k   e   D   i
0047740    f   c   o   n   :       P   R   O   C   E   D   U   R   E    
0047760    [   l   l   l   :       I   N   T   E   G   E   R   ,  \r    
0050000                d   i   f   L   e   v   :       l   e   v   e   l
0050020        _       u   n   s   p   e   c   i   f   i   e   d   ]    
0050040    R   E   T   U   R   N   S       [   p   :       o   b   P   t
0050060    r   ]   ;  \r           m   a   k   e   B   u   C   o   n   t
0050100    :       P   R   O   C   E   D   U   R   E       [   w   i   d
0050120    ,   l   e   n   ,   w   e   x   ,   l   e   x   :       I   N
0050140    T   E   G   E   R   ,  \r                   d   i   f   L   e
0050160    v   :       l   e   v   e   l       _       u   n   s   p   e
0050200    c   i   f   i   e   d   ]  \r                   R   E   T   U
0050220  376 001  \0 273  \r   R   N   S       [   p   :       o   b   P
0050240    t   r   ]   ;  \r           m   a   k   e   M   m   C   o   n
0050260    t   :       P   R   O   C   E   D   U   R   E       [   l   e
0050300    n   ,   w   e   x   ,   l   e   x   :       I   N   T   E   G
0050320    E   R   ]  \r                   R   E   T   U   R   N   S    
0050340    [   p   :       o   b   P   t   r   ]   ;  \r           m   a
0050360    k   e   W   i   r   e   :       P   R   O   C   E   D   U   R
0050400    E       [   l   e   n   ,       w   i   d   :       I   N   T
0050420    E   G   E   R   ,       l   :       l   e   v   e   l   ,   s
0050440    u   r   r   :   I   N   T   E   G   E   R   _   w   e   l   l
0050460    S   u   r   r   o   u   n   d   ]  \r                   R   E
0050500    T   U   R   N   S       [   p   :       o   b   P   t   r   ]
0050520    ;  \r           m   a   k   e   B   u   s   :       P   R   O
0050540    C   E   D   U   R   E       [   l   e   n   ,       w   i   d
0050560    :       I   N   T   E   G   E   R   ,       l   :       l   e
0050600    v   e   l   ,       c   n   t   ,       s   p   c   ,       t
0050620    i   n   c   ,     376 001  \0 035   r   b   i   n   c   :    
0050640    I   N   T   E   G   E   R   ]  \r                   R   E   T
0050660    U   R   N   S       [   p   :       o   b   P   t   r   ]   ;
0050700   \r           m   a   k   e   R   e   p   :       P   R   O   C
0050720    E   D   U   R   E       [   o   b   :   o   b   P   t   r   ,
0050740    w   i   n   c   ,   l   i   n   c   ,   d   x   ,   d   y   ,
0050760    c   n   t   :   I   N   T   E   G   E   R   ,  \r  \t   i   d
0051000    x   :   o   r   i   e   n   t   a   t   i   o   n   I   n   d
0051020    e   x   ]       R   E   T   U   R   N   S       [   p   :    
0051040    o   b   P   t   r   ]   ;  \r           m   a   k   e   C   e
0051060    l   l   :       P   R   O   C   E   D   U   R   E       [   s
0051100    x   ,       s   y   :       I   N   T   E   G   E   R   ,    
0051120    c   n   t   :       C   A   R   D   I   N   A   L   ,       p
0051140    t   r   :       l   i   s   t   P   t   r   ]  \r            
0051160        R   E   T   U   R   N   S       [   p   :       c   e   l
0051200    l   P   t   r   ]   ;  \r           m   a   k   e   L   i   s
0051220    t   :       P   R   O   C   E   D   U 376  \0   h   t   p   R
0051240    E       [  \r                   p   :       o   b   P   t   r
0051260    ,       x   ,       y   :       I   N   T   E   G   E   R   ,
0051300        o   :       o   r   i   e   n   t   a   t   i   o   n   ,
0051320        r   e   f   l   :       r   e   f   l   e   c   t   i   o
0051340    n   ]  \r                   R   E   T   U   R   N   S       [
0051360    l   p   :       l   i   s   t   P   t   r   ]   ;  \r  \r  \r
0051400            E   N   D   .  \r 377  \0  \0   p   p   d   d   e   f
0051420    s   .   m   e   s   a  \0 373 232 256   1   +  \0  \0 376 001
0051440   \0 252 224   -   -       s   e   c   o   n   d       d   e   f
0051460    i   n   i   t   i   o   n   s       m   o   d   u   l   e    
0051500    f   o   r       s   i   l   i   c   o   n       (   p   r   e
0051520    t   t   y       p   i   c   t   u   r   e   )       p   r   o
0051540    g   r   a   m  \r   -   -       m   o   d   i   f   i   e   d
0051560        b   y       M   c   C   r   e   i   g   h   t   ,       M
0051600    a   r   c   h       2   7   ,       1   9   8   3           2
0051620    :   4   5       P   M  \r   -   -       m   o   d   i   f   i
0051640    e   d       b   y       P   e   t   i   t   ,       S   e   p
0051660    t   e   m   b   e   r       1   8   ,       1   9   8   1    
0051700        2   :   4   0       P   M  \r  \r   D   I   R   E   C   T
0051720    O   R   Y  \r           S   e   g   m   e   n   t   D   e   f
0051740    s   ,  \r           m   u   l   t   i   G   r   a   p   h   i
0051760    c   s   D   e   f   s   ,  \r           p   p   d   e   f   s
0052000    ,  \r           S   t   r   e   a   m   D   e   f   s   ;  \r
0052020    p   p   d   d   e   f   s   :       D   E   F   I   N   I   T
0052040    I   O   N 376 001  \0 271   _   S       I   M   P   O   R   T
0052060    S       p   p   d   e   f   s   ,       S   e   g   m   e   n
0052100    t   D   e   f   s   ,       m   u   l   t   i   G   r   a   p
0052120    h   i   c   s   D   e   f   s   ,       S   t   r   e   a   m
0052140    D   e   f   s       =  \r           B   E   G   I   N       O
0052160    P   E   N       p   p   d   e   f   s   ,       m   u   l   t
0052200    i   G   r   a   p   h   i   c   s   D   e   f   s   ,       S
0052220    t   r   e   a   m   D   e   f   s   ;  \r  \r  \r           -
0052240    -   *   *   *   *   *       e   x   p   o   r   t   s       f
0052260    r   o   m       p   p   k   i   n   t   :  \r  \r           i
0052300    n   i   t   k   b   d   :       P   R   O   C   E   D   U   R
0052320    E       [   P   O   I   N   T   E   R       T   O       A   R
0052340    R   A   Y       [   0   .   .   1   5   ]       O   F       C
0052360    A   R   D   I   N   A   L   ,       P   O   I   N   T   E   R
0052400        T   O       B   i   t   m   a   p   ]   ;  \r           g
0052420    e   t   K   c   h   r   :       P   R   O   C   E   D   U   R
0052440    E       R   E   T   U   R   N 376 001  \0 341   |   S       [
0052460    k   e   y   E   v   e   n   t   ]   ;  \r           a   n   y
0052500    K   a   v   a   i   l   :       P   R   O   C   E   D   U   R
0052520    E       R   E   T   U   R   N   S       [   B   O   O   L   E
0052540    A   N   ]   ;  \r  \r           -   -       *   *   *   *    
0052560    e   x   p   o   r   t   s       f   r   o   m       p   p   d
0052600    r   a   w   :  \r  \r           c   T   a   b   C   n   t   :
0052620        C   A   R   D   I   N   A   L   ;  \r           c   o   l
0052640    o   r   T   a   b   s   :       L   O   N   G       P   O   I
0052660    N   T   E   R       T   O       A   R   R   A   Y       [   0
0052700    .   .   0   )       O   F       A   R   R   A   Y       [   0
0052720    .   .   4   9   )       O   F       C   A   R   D   I   N   A
0052740    L   ;  \r           c   u   r   r   e   n   t   C   T   a   b
0052760    :       C   A   R   D   I   N   A   L   ;  \r           a   n
0053000    y   C   T   C   h   a   n   g   e   s   :       B   O   O   L
0053020    E   A   N   ;  \r  \r           o   r   L   t   a   b   :    
0053040    A   R   R   A   Y       l   e   v   e   l       O 376 001  \0
0053060    G 300   F       C   A   R   D   I   N   A   L   ;  \r        
0053100    s   h   o   w   C   o   l   o   r   L   e   v   e   l   :    
0053120    A   R   R   A   Y       l   e   v   e   l       O   F       B
0053140    O   O   L   E   A   N   ;  \r  \r           x   B   W   s   i
0053160    z   e   :       C   A   R   D   I   N   A   L       =       6
0053200    0   6   ;  \r           y   B   W   M   a   x   :       C   A
0053220    R   D   I   N   A   L       =       8   0   8   ;  \r        
0053240    b   w   F   e   e   d   T   o   p   :       C   A   R   D   I
0053260    N   A   L       =       6   4   0   ;  \r  \r           x   C
0053300    o   l   o   r   M   a   x   :       C   A   R   D   I   N   A
0053320    L       =       I   F       c   s   H   o   r       T   H   E
0053340    N       6   4   0       E   L   S   E       4   8   0   ;  \r
0053360            x   M   a   x   :       C   A   R   D   I   N   A   L
0053400        =       x   C   o   l   o   r   M   a   x       +       x
0053420    B   W   s   i   z   e   ;  \r           y   C   o   l   o   r
0053440    M   a   x   :       C   A   R   D   I   N   A   L       =    
0053460    I   F 376 001  \0   ~ 223       c   s   H   o   r       T   H
0053500    E   N       4   8   0       E   L   S   E       6   4   0   ;
0053520   \r  \r           c   o   l   P   a   t   N   u   m   :   C   A
0053540    R   D   I   N   A   L   =   8   ;  \r           c   o   l   P
0053560    a   t   t   e   r   n   T   a   b   s   :   A   R   R   A   Y
0053600        [   0   .   .   c   o   l   P   a   t   N   u   m   )    
0053620    O   F       A   R   R   A   Y       l   e   v   e   l       O
0053640    F       C   A   R   D   I   N   A   L   ;  \r           c   o
0053660    l   P   a   t   t   e   r   n   B   i   t   s   :   A   R   R
0053700    A   Y       [   0   .   .   c   o   l   P   a   t   N   u   m
0053720    )       O   F       C   A   R   D   I   N   A   L   ;  \r    
0053740        c   u   r   r   e   n   t   P   a   t   t   e   r   n   :
0053760    C   A   R   D   I   N   A   L   ;  \r           s   a   v   C
0054000    B   b   o   x   :       R   e   c   t   ;       -   -       w
0054020    h   e   r   e       t   h   e       c   o   l   o   r       s
0054040    c   r   e   e   n       i   s       o   n       t   h   e    
0054060    d   e   s   i   g   n  \r 376 001  \0   (   8           b   w
0054100    C   u   r   s   ,       b   w   C   u   r   s   I   :       A
0054120    R   R   A   Y       [   0   .   .   1   5   ]       O   F    
0054140    C   A   R   D   I   N   A   L   ;  \r  \r           c   u   r
0054160    s   o   r   B   o   x   ,       i   n   s   i   d   e   C   B
0054200    o   x   :       B   i   t   m   a   p   ;  \r  \r           P
0054220    i   x   e   l   :       T   Y   P   E       =       I   N   T
0054240    E   G   E   R   ;  \r           S   c   r   e   e   n   R   e
0054260    c   t   :       T   Y   P   E       =       R   e   c   t   ;
0054300        -   -       s   h   o   u   l   d       r   e   a   l   l
0054320    y       b   e       a       s   e   p   a   r   a   t   e    
0054340    t   y   p   e  \r  \r  \r           i   n   i   t   A   l   l
0054360    :       P   R   O   C   E   D   U   R   E   ;  \r           u
0054400    p   d   a   t   e   C   o   l   o   r   ,       u   p   d   a
0054420    t   e   B   W   :       P   R   O   C   ;       -   -       a
0054440    c   t   u   a   l   l   y       p   r   o   c   e   s   s   e
0054460    s  \r           w   r   i   t   e   C   T   a 376 001  \0 346
0054500    Q   b   :       P   R   O   C   E   D   U   R   E   ;  \r    
0054520        s   e   t   G   l   e   v   :       P   R   O   C   E   D
0054540    U   R   E       [   c   ,       c   c   ,       v   :       I
0054560    N   T   E   G   E   R   ]   ;  \r           i   n   v   e   r
0054600    t   C   o   l   o   r   s   :       P   R   O   C   E   D   U
0054620    R   E   ;  \r           r   e   s   t   o   r   e   C   o   l
0054640    o   r   s   :       P   R   O   C   E   D   U   R   E   ;  \r
0054660            s   e   t   C   o   l   o   r   T   a   b   l   e   :
0054700        P   R   O   C   E   D   U   R   E       [   C   A   R   D
0054720    I   N   A   L   ]   ;  \r           g   e   t   C   u   r   r
0054740    e   n   C   o   l   o   r   :       P   R   O   C   E   D   U
0054760    R   E       [   c   ,       c   c   :       I   N   T   E   G
0055000    E   R   ]       R   E   T   U   R   N   S       [   I   N   T
0055020    E   G   E   R   ]   ;  \r           d   e   S   c   a   l   e
0055040    d   C   u   r   s   o   r   :       P   R   O   C   E   D   U
0055060    R   E       [   x   ,       y   :       I   N   T   E   G   E
0055100    R 376 001  \0 357 206   ]       R   E   T   U   R   N   S    
0055120    [   B   O   O   L   E   A   N   ,       I   N   T   E   G   E
0055140    R   ,       I   N   T   E   G   E   R   ]   ;  \r           b
0055160    w   s   c   a   l   e   R   e   c   t   :       P   R   O   C
0055200    E   D   U   R   E       [   x   1   ,       y   1   ,       x
0055220    2   ,       y   2   :       I   N   T   E   G   E   R   ]  \r
0055240                    R   E   T   U   R   N   S       [   B   O   O
0055260    L   E   A   N   ,       I   N   T   E   G   E   R   ,       I
0055300    N   T   E   G   E   R   ,       I   N   T   E   G   E   R   ,
0055320        I   N   T   E   G   E   R   ]   ;  \r           c   s   c
0055340    a   l   e   R   e   c   t   :       P   R   O   C   E   D   U
0055360    R   E       [   x   1   ,       y   1   ,       x   2   ,    
0055400    y   2   :       I   N   T   E   G   E   R   ]  \r            
0055420        R   E   T   U   R   N   S       [   B   O   O   L   E   A
0055440    N   ,       I   N   T   E   G   E   R   ,       I   N   T   E
0055460    G   E   R   ,       I   N   T   E   G   E   R   ,       I   N
0055500    T   E   G   E   R   ] 376 001  \0   Y  \0   ;  \r           -
0055520    -   o   r   A   r   e   a   :   P   R   O   C   E   D   U   R
0055540    E   [   w   ,   x   ,   y   ,   z   :   I   N   T   E   G   E
0055560    R   ,   l   :   l   e   v   e   l   ]   ;  \r           o   u
0055600    t   l   i   n   e   B   W   :       P   R   O   C   E   D   U
0055620    R   E       [   w   ,       x   ,       y   ,       z   :    
0055640    I   N   T   E   G   E   R   ,       q   :       c   o   l   o
0055660    r   ,       c   l   i   p   :       P   O   I   N   T   E   R
0055700        T   O       R   e   c   t   ]   ;  \r           o   u   t
0055720    l   i   n   e   C   o   l   :       P   R   O   C   E   D   U
0055740    R   E       [   w   ,       x   ,       y   ,       z   :    
0055760    I   N   T   E   G   E   R   ,       q   :       c   o   l   o
0056000    r   ,       c   l   i   p   :       P   O   I   N   T   E   R
0056020        T   O       R   e   c   t   ]   ;  \r           o   r   C
0056040    o   l   A   r   e   a   :       P   R   O   C   E   D   U   R
0056060    E       [   w   ,       x   ,       y   ,       z   :       I
0056100    N   T   E   G   E   R   ,       l   :     376 001  \0   =   Z
0056120    l   e   v   e   l   ,       c   l   i   p   :       P   O   I
0056140    N   T   E   R       T   O       R   e   c   t   ]   ;  \r    
0056160        o   r   B   w   A   r   e   a   :       P   R   O   C   E
0056200    D   U   R   E       [   w   ,       x   ,       y   ,       z
0056220    :       I   N   T   E   G   E   R   ,       l   :       l   e
0056240    v   e   l   ,       c   l   i   p   :       P   O   I   N   T
0056260    E   R       T   O       R   e   c   t   ]   ;  \r           r
0056300    e   p   C   o   l   A   r   e   a   :       P   R   O   C   E
0056320    D   U   R   E       [   w   ,       x   ,       y   ,       z
0056340    :       I   N   T   E   G   E   R   ,       l   :       l   e
0056360    v   e   l   ,       c   l   i   p   :       P   O   I   N   T
0056400    E   R       T   O       R   e   c   t   ]   ;  \r           r
0056420    e   p   B   w   A   r   e   a   :       P   R   O   C   E   D
0056440    U   R   E       [   w   ,       x   ,       y   ,       z   :
0056460        I   N   T   E   G   E   R   ,       l   :       l   e   v
0056500    e   l   ,       c   l   i   p   :       P   O   I   N   T   E
0056520  376 001  \0 346  \a   R       T   O       R   e   c   t   ]   ;
0056540   \r           e   r   a   s   e   S   c   r   e   e   n   :    
0056560    P   R   O   C   E   D   U   R   E       [   w   ,       x   ,
0056600        y   ,       z   :       I   N   T   E   G   E   R   ]   ;
0056620   \r           -   -   e   r   a   s   e   A   r   e   a   :   P
0056640    R   O   C   E   D   U   R   E   [   w   ,   x   ,   y   ,   z
0056660    :   I   N   T   E   G   E   R   ]   ;  \r           e   r   a
0056700    s   e   C   o   l   A   r   e   a   :       P   R   O   C   E
0056720    D   U   R   E       [   w   ,       x   ,       y   ,       z
0056740    :       I   N   T   E   G   E   R   ]   ;  \r           e   r
0056760    a   s   e   B   w   A   r   e   a   :       P   R   O   C   E
0057000    D   U   R   E       [   w   ,       x   ,       y   ,       z
0057020    :       I   N   T   E   G   E   R   ]   ;  \r           -   -
0057040    d   r   a   w   A   r   e   a   :       P   R   O   C   E   D
0057060    U   R   E   [   w   ,   x   ,   y   ,   z   :   I   N   T   E
0057100    G   E   R   ,   c   :   c   o   l   o   r   ]   ;  \r        
0057120    s   e   t   S   e 376 001  \0  \f 372   l   C   o   l   o   r
0057140    :       P   R   O   C   E   D   U   R   E       [   a   :    
0057160    C   A   R   D   I   N   A   L   ]   ;  \r           d   r   a
0057200    w   M   a   r   k   :       P   R   O   C   E   D   U   R   E
0057220        [   x   ,       y   :       I   N   T   E   G   E   R   ]
0057240    ;  \r           d   r   a   w   B   W   T   e   x   t   :    
0057260    P   R   O   C   E   D   U   R   E       [   x   ,       y   ,
0057300        s   x   ,       s   y   :       I   N   T   E   G   E   R
0057320    ,       s   :       S   T   R   I   N   G   ,       c   l   i
0057340    p   :       P   O   I   N   T   E   R       T   O       R   e
0057360    c   t   ]   ;  \r           d   r   a   w   S   t   r   i   n
0057400    g   :       P   R   O   C   E   D   U   R   E       [   s   :
0057420        S   T   R   I   N   G   ,       x   ,       y   :       I
0057440    N   T   E   G   E   R   ]   ;  \r  \r  \r           -   -    
0057460    *   *   *   *   *       e   x   p   o   r   t   s       f   r
0057500    o   m       p   p   i   o   :  \r  \r           r   e   a   d
0057520    C   h   i   p   :       P   R   O   C 376 001  \0 332 321    
0057540    [   g   e   t   :       P   R   O   C       R   E   T   U   R
0057560    N   S       [   U   N   S   P   E   C   I   F   I   E   D   ]
0057600    ]  \r                   R   E   T   U   R   N   S   [   m   a
0057620    s   t   e   r   L   i   s   t   :       l   i   s   t   P   t
0057640    r   ,       c   e   l   l   L   i   s   t   :       c   L   i
0057660    s   t   P   t   r   ,       c   e   l   l   S   t   a   c   k
0057700    :       c   e   l   l   S   E   P   t   r   ]   ;  \r  \r    
0057720        r   e   a   d   A   l   l   :       P   R   O   C   E   D
0057740    U   R   E       [   g   e   t   :       P   R   O   C       R
0057760    E   T   U   R   N   S       [   U   N   S   P   E   C   I   F
0060000    I   E   D   ]   ]   ;  \r           o   p   e   n   I   f   i
0060020    l   e   :       P   R   O   C   E   D   U   R   E       [   f
0060040    n   a   m   e   :       S   T   R   I   N   G   ]       R   E
0060060    T   U   R   N   S       [   S   t   r   e   a   m   D   e   f
0060100    s   .   D   i   s   k   H   a   n   d   l   e   ]   ;  \r  \r
0060120            o   p   e   n   O   T   f   i   l   e   :       P 376
0060140  001  \0 245 271   R   O   C   E   D   U   R   E       [   f   n
0060160    a   m   e   :       S   T   R   I   N   G   ]       R   E   T
0060200    U   R   N   S       [   B   O   O   L   E   A   N   ]   ;  \r
0060220            h   a   r   d   O   u   t   :       P   R   O   C   E
0060240    D   U   R   E       [   f   n   :       S   T   R   I   N   G
0060260    ,       l   p   :       l   i   s   t   P   t   r   ]   ;  \r
0060300   \r           s   c   a   n   L   i   n   e   :       P   R   O
0060320    C   E   D   U   R   E       [   s   :       S   T   R   I   N
0060340    G   ,       i   :       C   A   R   D   I   N   A   L   ]  \r
0060360                    R   E   T   U   R   N   S       [   v   :    
0060400    I   N   T   E   G   E   R   ,       j   :       C   A   R   D
0060420    I   N   A   L   ,       a   n   y   :       B   O   O   L   E
0060440    A   N   ]   ;  \r           r   d   E   r   f   L   i   n   e
0060460    :       P   R   O   C   E   D   U   R   E       R   E   T   U
0060500    R   N   S       [   x   ,       y   :       I   N   T   E   G
0060520    E   R   ,       s   :       S   T   R   I   N   G   ,       n
0060540    u   m   s   : 376 001  \0   | 234       B   O   O   L   E   A
0060560    N   ]   ;  \r           o   p   e   n   E   r   f   i   l   e
0060600    :       P   R   O   C   E   D   U   R   E       [   f   n   a
0060620    m   e   :       S   T   R   I   N   G   ]       R   E   T   U
0060640    R   N   S       [   B   O   O   L   E   A   N   ]   ;  \r  \r
0060660            -   -       *   *   *   *   *   *   *   *       E   x
0060700    p   o   r   t   s       f   r   o   m       p   p   p   r   o
0060720    c   s   2   :  \r  \r           c   e   l   l   N   a   m   e
0060740    M   o   d   e   :       B   O   O   L   E   A   N   ;  \r    
0060760        c   n   L   i   s   t   :       l   i   s   t   P   t   r
0061000    ;  \r  \r           d   o   Z   e   e   :       c   m   d   P
0061020    r   o   c   ;  \r           d   e   l   C   e   l   l   D   e
0061040    f   :       P   R   O   C   E   D   U   R   E       [  \r    
0061060                c   n   :       c   L   i   s   t   P   t   r   ,
0061100        o   b   :       c   e   l   l   P   t   r   ]   ;  \r    
0061120        d   o   H   a   r   d   :       c   m   d   P   r   o   c
0061140    ;  \r  \r           d   o   E   x 376 001  \0 213   N   p   S
0061160    ,       d   o   E   x   p   P   :       c   m   d   P   r   o
0061200    c   ;  \r           r   e   C   o   u   n   t   :       P   R
0061220    O   C   E   D   U   R   E   ;  \r           s   e   l   S   i
0061240    n   g   l   e   :       P   R   O   C   E   D   U   R   E    
0061260    [   m   p   :       l   i   s   t   P   t   r   ,       x   x
0061300    ,       y   y   :       I   N   T   E   G   E   R   ]   ;  \r
0061320            s   e   l   E   x   t   e   n   d   :       P   R   O
0061340    C   E   D   U   R   E       [   m   p   :       l   i   s   t
0061360    P   t   r   ,       x   x   ,       y   y   :       I   N   T
0061400    E   G   E   R   ]   ;  \r           s   e   l   N   e   w   T
0061420    h   i   n   g   :       P   R   O   C   E   D   U   R   E    
0061440    [   m   p   ,       l   p   :       l   i   s   t   P   t   r
0061460    ,       u   n   O   t   h   e   r   s   :       B   O   O   L
0061500    E   A   N   ]   ;  \r           u   n   s   e   l   S   i   n
0061520    g   l   e   :       P   R   O   C   E   D   U   R   E       [
0061540    m   p   :       l   i   s   t   P   t   r   ,       x 376 001
0061560   \0   ( 336   x   ,       y   y   :       I   N   T   E   G   E
0061600    R   ]   ;  \r           s   e   l   A   r   e   a   S   i   n
0061620    g   l   e   :       P   R   O   C   E   D   U   R   E       [
0061640    m   p   :       l   i   s   t   P   t   r   ,       x   x   ,
0061660        y   y   :       I   N   T   E   G   E   R   ]   ;  \r    
0061700        s   e   l   A   r   e   a   E   x   t   e   n   d   :    
0061720    P   R   O   C   E   D   U   R   E       [   m   p   :       l
0061740    i   s   t   P   t   r   ,       x   x   ,       y   y   :    
0061760    I   N   T   E   G   E   R   ]   ;  \r           u   n   s   e
0062000    l   A   r   e   a   S   i   n   g   l   e   :       P   R   O
0062020    C   E   D   U   R   E       [   m   p   :       l   i   s   t
0062040    P   t   r   ,       x   x   ,       y   y   :       I   N   T
0062060    E   G   E   R   ]   ;  \r           r   o   t   R   e   f   l
0062100    S   e   l   :       P   R   O   C   E   D   U   R   E       [
0062120    r   e   f   l   :       B   O   O   L   E   A   N   ]   ;  \r
0062140            r   o   t   R   e   f   l   P   n   t   :       P   R
0062160    O   C   E 376 001  \0 325 311   D   U   R   E       [   r   e
0062200    f   l   :       B   O   O   L   E   A   N   ,       x   x   ,
0062220        y   y   :       I   N   T   E   G   E   R   ]   ;  \r  \r
0062240            c   o   p   y   P   r   o   p   s   :       P   U   B
0062260    L   I   C       P   R   O   C   E   D   U   R   E       [   n
0062300    ,       o   :       l   i   s   t   P   t   r   ]   ;  \r  \r
0062320            g   e   t   E   r   f   i   l   :       c   m   d   P
0062340    r   o   c   ;  \r           e   n   t   e   r   T   e   x   t
0062360    :       c   m   d   P   r   o   c   ;  \r           e   n   t
0062400    e   r   N   a   m   e   :       c   m   d   P   r   o   c   ;
0062420   \r  \r           -   -       *   *   *   *   *   *   *   *    
0062440    E   x   p   o   r   t   s       f   r   o   m       p   p   p
0062460    r   o   c   s   3   :  \r  \r           i   n   s   e   r   t
0062500    L   i   s   t   :       P   R   O   C   E   D   U   R   E    
0062520    [   m   p   ,       l   p   :       l   i   s   t   P   t   r
0062540    ]  \r                   R   E   T   U   R   N   S       [   l
0062560    i   s   t   P   t   r   ]   ; 376 001  \0 177  \v  \r  \r    
0062600        -   -   *   *   *   *   *   *   *   *   *       e   x   p
0062620    o   r   t   s       f   r   o   m       p   p   s   p   a   c
0062640    e   :  \r  \r           a   l   o   c   P   r   o   p   :    
0062660    P   R   O   C   E   D   U   R   E       R   E   T   U   R   N
0062700    S       [   p   :       p   r   o   p   P   t   r   ]   ;  \r
0062720            a   l   o   c   R   e   c   t   L   i   s   t   :    
0062740    P   R   O   C   E   D   U   R   E       R   E   T   U   R   N
0062760    S       [   p   :       L   O   N   G       P   O   I   N   T
0063000    E   R       T   O       r   e   c   t   L   i   s   t   ]   ;
0063020   \r           r   e   t   u   r   n   R   e   c   t   L   i   s
0063040    t   :       P   R   O   C   E   D   U   R   E       [   p   :
0063060        L   O   N   G       P   O   I   N   T   E   R       T   O
0063100        r   e   c   t   L   i   s   t   ]   ;  \r  \r           -
0063120    -       *   *   *   *       e   x   p   o   r   t   s       f
0063140    r   o   m       p   p   p   r   o   c   s   6   :  \r  \r    
0063160        p   u   t   M   a   r   k   :       P   R   O 376  \0 223
0063200    W 201   C   E   D   U   R   E       [   x   x   ,       y   y
0063220    :       I   N   T   E   G   E   R   ,       b   w   :   B   O
0063240    O   L   E   A   N   _   F   A   L   S   E   ]   ;  \r  \r    
0063260        -   -       *   *   *   *   *       e   x   p   o   r   t
0063300    s       f   r   o   m       p   p   f   e   e   d   :  \r  \r
0063320            d   C   h   a   n   g   e   :       B   O   O   L   E
0063340    A   N   ;  \r           H   i   d   e   C   o   l   o   r   ,
0063360        S   h   o   w   C   o   l   o   r   :       P   R   O   C
0063400        [   l   :       l   e   v   e   l   ]   ;  \r  \r        
0063420    E   N   D   .  \r 377  \0  \0   p   p   f   e   e   d   d   e
0063440    f   s   .   m   e   s   a  \0 373 234 017 244   t  \0  \0 376
0063460  001  \0 363   }   -   -       d   e   f   i   n   i   t   i   o
0063500    n   s       f   o   r       c   o   m   m   a   n   d       i
0063520    n   t   e   r   p   r   e   t   e   r       p   a   r   t    
0063540    o   f       s   i   l   i   c   o   n       (   p   r   e   t
0063560    t   y       p   i   c   t   u   r   e   )       p   r   o   g
0063600    r   a   m  \r   -   -       l   a   s   t       m   o   d   i
0063620    f   i   e   d       b   y       M   c   C   r   e   i   g   h
0063640    t   ,       D   e   c   e   m   b   e   r       2   0   ,    
0063660    1   9   8   3           5   :   0   3       P   M  \r   -   -
0063700        w   r   i   t   t   e   n       b   y       P   .       P
0063720    e   t   i   t   ,       D   e   c   e   m   b   e   r       1
0063740    3   ,       1   9   8   1           5   :   5   4       P   M
0063760   \r  \r   D   I   R   E   C   T   O   R   Y  \r           m   u
0064000    l   t   i   G   r   a   p   h   i   c   s   D   e   f   s   ,
0064020    p   p   d   d   e   f   s   ,   p   p   d   d   d   e   f   s
0064040    ,   p   p   d   e   f   s   ;  \r  \r   p   p   f   e   e   d
0064060    d   e   f   s 376 001  \0 330 335   :       D   E   F   I   N
0064100    I   T   I   O   N   S       =  \r           B   E   G   I   N
0064120        O   P   E   N       p   p   d   d   e   f   s   ,   p   p
0064140    d   d   d   e   f   s   ,   p   p   d   e   f   s   ;  \r  \r
0064160    c   x   ,   c   y   :   I   N   T   E   G   E   R   ;  \r  \r
0064200    d   P   r   o   c   :   T   Y   P   E       =       P   R   O
0064220    C   E   D   U   R   E   [   p   :   P   O   I   N   T   E   R
0064240    ,   x   ,   y   ,   c   o   d   e   :   I   N   T   E   G   E
0064260    R   ,       p   a   r   m   :       f   b   P   a   r   m   R
0064300    P   t   r   ]  \r           R   E   T   U   R   N   S   [   I
0064320    N   T   E   G   E   R   ]   ;  \r   m   o   d   P   r   o   c
0064340    :   T   Y   P   E       =       P   R   O   C   E   D   U   R
0064360    E   [   p   :   P   O   I   N   T   E   R   ,   m   a   x   ,
0064400    m   i   n   ,   c   o   d   e   :   I   N   T   E   G   E   R
0064420    ,  \r           p   a   r   m   :       f   b   P   a   r   m
0064440    R   P   t   r   ]   ;  \r   s   e   t   P   r   o   c   :   T
0064460    Y   P   E       =       P   R   O 376 001  \0 240 376   C   E
0064500    D   U   R   E   [   p   :   P   O   I   N   T   E   R   ,   m
0064520    a   x   ,   m   i   n   ,   c   o   d   e   :   I   N   T   E
0064540    G   E   R   ,   s   :   S   T   R   I   N   G   ,   s   i   :
0064560    C   A   R   D   I   N   A   L   ,  \r           p   a   r   m
0064600    :       f   b   P   a   r   m   R   P   t   r   ]   ;  \r  \r
0064620    f   b   P   a   r   m   R   P   t   r   :       T   Y   P   E
0064640        =       L   O   N   G       P   O   I   N   T   E   R    
0064660    T   O       f   b   P   a   r   m   R       _       N   I   L
0064700    ;  \r   f   b   P   a   r   m   R   :   T   Y   P   E       =
0064720        R   E   C   O   R   D   [   n   e   x   t   :       f   b
0064740    P   a   r   m   R   P   t   r   ,  \r               s   x   ,
0064760    s   y   :   I   N   T   E   G   E   R   ,   s   1   :   S   T
0065000    R   I   N   G   ,   p   r   m   :   P   O   I   N   T   E   R
0065020    ,   s   2   :   S   T   R   I   N   G   ,  \r           d   s
0065040    p   P   r   m   :   d   P   r   o   c   ,   t   x   1   ,   t
0065060    y   1   ,   t   x   2   ,   t   y   2   :   I   N   T 376 001
0065100   \0 243 250   E   G   E   R   ,   r   b   P   ,   y   b   P   ,
0065120    b   b   P   :   m   o   d   P   r   o   c  \r           ,   m
0065140    ,   n   ,   c   o   d   e   :   I   N   T   E   G   E   R   ,
0065160    c   h   g   C   ,   c   h   g   B   :   B   O   O   L   E   A
0065200    N   _   F   A   L   S   E   ,   s   e   t   S   t   r   :   S
0065220    T   R   I   N   G   ,   s   e   t   P   :   s   e   t   P   r
0065240    o   c   ]   ;  \r  \r   A   d   d   F   B   P   a   r   m   R
0065260    :       P   R   O   C       [   h   e   a   d   :       P   O
0065300    I   N   T   E   R       T   O       f   b   P   a   r   m   R
0065320    P   t   r   ,       r   :       f   b   P   a   r   m   R   ]
0065340    ;  \r   f   b   A   r   ,       f   b   A   r   2   :       f
0065360    b   P   a   r   m   R   P   t   r   ;  \r  \r   s   e   t   I
0065400    n   t   ,   s   e   t   B   o   o   l   ,   s   e   t   C   m
0065420    x   ,   s   e   t   S   c   l   :   s   e   t   P   r   o   c
0065440    ;  \r  \r   f   i   n   d   C   T   a   b   :   P   U   B   L
0065460    I   C       P   R   O   C   E   D   U   R   E   [   x   ,   y
0065500    :   I   N 376 001  \0 204 326   T   E   G   E   R   ]       R
0065520    E   T   U   R   N   S   [   I   N   T   E   G   E   R   ]   ;
0065540   \r  \r   r   m   B   u   t   t   :       m   o   d   P   r   o
0065560    c   ;  \r  \r   d   s   p   C   M   i   x   :   d   P   r   o
0065600    c   ;  \r   s   e   t   C   M   i   x   :   m   o   d   P   r
0065620    o   c   ;  \r   r   e   s   e   t   C   M   i   x   :   m   o
0065640    d   P   r   o   c   ;  \r   m   o   v   e   C   M   i   x   :
0065660    m   o   d   P   r   o   c   ;  \r   d   s   p   C   P   a   t
0065700    :   d   P   r   o   c   ;  \r   s   e   t   C   P   a   t   :
0065720    m   o   d   P   r   o   c   ;  \r   r   e   s   e   t   C   P
0065740    a   t   :   m   o   d   P   r   o   c   ;  \r   m   o   v   e
0065760    C   P   a   t   :   m   o   d   P   r   o   c   ;  \r  \r   n
0066000    u   l   l   M   P   :   m   o   d   P   r   o   c   ;  \r   n
0066020    u   l   l   D   P   :   d   P   r   o   c   ;  \r   n   u   l
0066040    l   S   T   :   s   e   t   P   r   o   c   ;  \r  \r   d   s
0066060    p   L   e   v   V   i   s   i   b   l   e   :       d   P   r
0066100    o   c   ;  \r   d   s   p   C 376 001  \0   8 204   a   c   h
0066120    e   :       d   P   r   o   c   ;  \r   d   s   p   L   a   m
0066140    :   d   P   r   o   c       ;  \r   d   s   p   C   o   r   e
0066160    :   d   P   r   o   c       ;  \r   d   s   p   N   a   m   e
0066200    :   d   P   r   o   c       ;  \r   d   s   p   L   M   :   d
0066220    P   r   o   c       ;  \r   d   s   p   F   L   :   d   P   r
0066240    o   c       ;  \r   s   e   t   F   L   :   m   o   d   P   r
0066260    o   c       ;  \r   f   l   i   p   L   e   v   V   i   s   i
0066300    b   l   e   :       m   o   d   P   r   o   c   ;  \r   f   l
0066320    i   p   C   a   c   h   e   :       m   o   d   P   r   o   c
0066340    ;  \r   d   s   p   D   i   f   S   e   x   ,       d   s   p
0066360    D   i   f   P   u   r   p   :       d   P   r   o   c       ;
0066400   \r   f   l   i   p   D   i   f   S   e   x   ,       f   l   i
0066420    p   D   i   f   P   u   r   p   :   m   o   d   P   r   o   c
0066440        ;  \r   d   s   p   S   c   l   :   d   P   r   o   c    
0066460    ;  \r   t   y   S   c   l   :   m   o   d   P   r   o   c    
0066500    ;  \r   i   n   c   S   c   l   :   m   o   d   P 376 001  \0
0066520    D 251   r   o   c       ;  \r   d   e   c   S   c   l   :   m
0066540    o   d   P   r   o   c       ;  \r   d   s   p   B   o   o   l
0066560    :   d   P   r   o   c       ;  \r   i   n   c   B   o   o   l
0066600    :   m   o   d   P   r   o   c       ;  \r   d   e   c   B   o
0066620    o   l   :   m   o   d   P   r   o   c       ;  \r   c   m   p
0066640    B   o   o   l   :   m   o   d   P   r   o   c       ;  \r   d
0066660    s   p   M   o   d   e   :   d   P   r   o   c       ;  \r   d
0066700    s   p   I   n   t   :   d   P   r   o   c       ;  \r   i   n
0066720    c   I   n   t   :   m   o   d   P   r   o   c       ;  \r   d
0066740    e   c   I   n   t   :   m   o   d   P   r   o   c       ;  \r
0066760    t   y   I   n   t   :   m   o   d   P   r   o   c       ;  \r
0067000    z   e   r   o   I   m   p   l   a   n   t   ,       i   n   c
0067020    I   m   p   l   a   n   t   ,       m   a   x   I   m   p   l
0067040    a   n   t   :       m   o   d   P   r   o   c   ;  \r   d   s
0067060    p   I   m   p   l   a   n   t   :       d   P   r   o   c   ;
0067100   \r   d   i   s   p   l   a   y   P   a   r   a   m   e   t   e
0067120    r   s 376 001  \0   6   #   :   P   R   O   C   E   D   U   R
0067140    E       ;  \r   d   o   R   f   e   e   d   :   P   R   O   C
0067160    E   D   U   R   E       R   E   T   U   R   N   S   [   B   O
0067200    O   L   E   A   N   ,   B   O   O   L   E   A   N   ]       ;
0067220   \r   d   o   Y   f   e   e   d   :   P   R   O   C   E   D   U
0067240    R   E       R   E   T   U   R   N   S   [   B   O   O   L   E
0067260    A   N   ,   B   O   O   L   E   A   N   ]       ;  \r   d   o
0067300    B   f   e   e   d   :   P   R   O   C   E   D   U   R   E    
0067320    R   E   T   U   R   N   S   [   B   O   O   L   E   A   N   ,
0067340    B   O   O   L   E   A   N   ]       ;  \r   f   e   e   d   T
0067360    r   a   c   k   :   P   R   O   C   E   D   U   R   E       R
0067400    E   T   U   R   N   S   [   f   b   P   a   r   m   R   P   t
0067420    r   ]   ;  \r   S   u   r   r   o   u   n   d   :       P   R
0067440    O   C       [   p   :       P   o   i   n   t   ,       s   :
0067460        S   T   R   I   N   G   ,       b   o   x   ,       g   r
0067500    a   y   :       B   O   O   L   E   A   N       _       F   A
0067520    L   S   E   ,  \r         376  \0   P 002 363   f   o   n   t
0067540    :       m   u   l   t   i   G   r   a   p   h   i   c   s   D
0067560    e   f   s   .   S   t   r   i   k   e   F   o   n   t   P   t
0067600    r       _       N   I   L   ]       R   E   T   U   R   N   S
0067620        [   n   e   x   t   X   :       I   N   T   E   G   E   R
0067640    ]   ;  \r  \r  \r           E   N   D   .  \r 377  \0  \0   p
0067660    p   m   a   i   n   d   e   f   s   .   m   e   s   a  \0 373
0067700  232 274 325 257  \0  \0 376 001  \0 301   :   -   -       d   e
0067720    f   i   n   i   t   i   o   n   s       f   o   r       c   o
0067740    m   m   a   n   d       i   n   t   e   r   p   r   e   t   e
0067760    r       p   a   r   t       o   f       s   i   l   i   c   o
0070000    n       (   p   r   e   t   t   y       p   i   c   t   u   r
0070020    e   )       p   r   o   g   r   a   m  \r   -   -       l   a
0070040    s   t       m   o   d   i   f   i   e   d       b   y       M
0070060    c   C   r   e   i   g   h   t   ,       A   p   r   i   l    
0070100    7   ,       1   9   8   3           4   :   5   6       P   M
0070120   \r  \r   D   I   R   E   C   T   O   R   Y  \r           p   p
0070140    d   e   f   s   ;  \r  \r   p   p   M   a   i   n   D   e   f
0070160    s   :       D   E   F   I   N   I   T   I   O   N   S       =
0070200   \r           B   E   G   I   N       O   P   E   N       p   p
0070220    d   e   f   s   ;  \r  \r           i   i   :       C   A   R
0070240    D   I   N   A   L   ;  \r           s   s   ,       f   i   l
0070260    e   N   a   m   e   :       S   T   R   I   N   G   ;  \r    
0070300        k   e   :       k   e   y   E   v   e 376 001  \0   ' 210
0070320    n   t   ;  \r           c   p   ,       c   p   p   :       L
0070340    O   N   G       P   O   I   N   T   E   R       T   O       c
0070360    L   i   s   t   ;  \r           l   p   ,       l   p   p   ,
0070400        l   q   p   :       L   O   N   G       P   O   I   N   T
0070420    E   R       T   O       l   i   s   t   ;  \r  \r   b   u   s
0070440    M   a   k   i   n   g   :   B   O   O   L   E   A   N   ;  \r
0070460    b   m   C   o   u   n   t   ,   b   m   2   d   x   ,   b   m
0070500    2   d   y   ,   b   m   N   e   w   s   :   I   N   T   E   G
0070520    E   R   ;  \r  \r           w   C   l   o   s   e   s   t   D
0070540    i   s   p   :       B   O   O   L   E   A   N       ;  \r    
0070560        w   i   r   e   P   r   e   v   P   n   t   :       L   O
0070600    N   G       P   O   I   N   T   E   R       T   O       l   i
0070620    s   t   ;  \r           w   i   r   i   n   g   L   e   v   :
0070640        l   e   v   e   l   ;  \r           w   i   r   i   n   g
0070660    O   r   n   S   e   t   :       B   O   O   L   E   A   N   ;
0070700   \r           m   o   v   i   n   g   :       B   O   O   L   E
0070720  376 001  \0 230 026   A   N   ;  \r           c   o   p   y   i
0070740    n   g   :       B   O   O   L   E   A   N   ;  \r           a
0070760    r   e   a   S   e   l   :       B   O   O   L   E   A   N   ;
0071000   \r           m   o   v   e   M   a   r   k   e   d   :       B
0071020    O   O   L   E   A   N   ;  \r  \r           m   a   r   k   x
0071040    ,       m   a   r   k   y   :       I   N   T   E   G   E   R
0071060    ;  \r  \r           w   c   l   L   p   :       L   O   N   G
0071100        P   O   I   N   T   E   R       T   O       l   i   s   t
0071120    ;  \r           w   c   l   N   x   ,       w   c   l   N   y
0071140    ,       o   l   d   N   x   ,       o   l   d   N   y   :    
0071160    I   N   T   E   G   E   R   ;  \r           c   u   r   r   e
0071200    n   t   L   e   v   e   l   :       l   e   v   e   l   ;  \r
0071220            c   u   r   c   o   l   :       I   N   T   E   G   E
0071240    R   ;  \r  \r  \r           d   e   l   C   n   S   e   l   ,
0071260        u   n   Z   e   e   ,       i   g   n   o   r   e   ,    
0071300    u   n   D   o   ,       d   o   R   e   s   t   a   r   t   ,
0071320        d   o   S   t 376 001  \0 353 374   r   e   t   c   h   ,
0071340        d   o   U   n   D   e   l   ,       d   o   F   l   u   s
0071360    h   ,  \r                   y   e   l   l   o   w   U   n   B
0071400    u   t   S   e   e   n   ,       d   o   E   S   C   ,       d
0071420    o   Q   u   i   t   ,       f   l   i   p   W   i   r   e   s
0071440    ,       m   o   v   C   o   l   S   c   r   n   ,       m   o
0071460    v   M   i   d   S   c   r   n   ,  \r                   m   o
0071500    v   B   W   S   c   r   n   ,       n   o   B   B   b   u   t
0071520    t   o   n   s   ,       d   o   M   a   k   B   u   s   ,    
0071540    o   n   e   W   i   r   e   ,       d   o   D   e   S   e   l
0071560    ,  \r                   d   o   A   S   e   l   ,       d   o
0071600    S   e   l   e   c   t   ,       d   o   S   e   l   e   c   t
0071620    A   l   l   ,       d   o   N   o   r   m   a   l   i   z   e
0071640    ,       d   o   C   n   S   e   l   e   c   t   ,       d   o
0071660    A   s   e   l   ,  \r                   d   o   X   ,       d
0071700    o   T   r   a   n   ,       d   o   A   T   r   a   n   ,    
0071720    d   o   P   u   ,       s   e   t   F 376 001  \0 313 306   o
0071740    n   t   :       c   m   d   P   r   o   c   ;  \r  \r  \r    
0071760        d   o   I   n   p   u   t   ,       d   o   O   u   t   p
0072000    u   t   ,       m   a   k   e   C   i   f   ,       d   e   f
0072020    C   e   l   l   ,       g   e   t   C   e   l   l   ,       d
0072040    o   R   u   n   C   o   n   f   i   g   ,       d   o   A   l
0072060    t   e   r   ,  \r                   d   o   W   A   l   t   e
0072100    r   ,       d   o   I   m   p   l   S   e   l   ,       d   o
0072120    U   n   I   m   p   l   S   e   l   ,       d   o   I   m   p
0072140    l   P   n   t   :       c   m   d   P   r   o   c   ;  \r  \r
0072160            s   e   l   L   a   y   e   r   ,   m   a   k   W   C
0072200    o   n   t   ,   m   a   k   C   o   n   t   ,   d   o   O   v
0072220    g   ,   d   o   T   u   b   ,   d   o   O   v   g   R   ,   d
0072240    o   R   e   c   t   a   n   g   l   e   ,   d   o   R   e   p
0072260    e   a   t   O   b   ,  \r                   d   o   B   u   r
0072300    r   ,   m   o   d   P   a   r   a   m   ,   c   o   n   v   T
0072320    o   B   u   s   ,  \r                   c   o   n   v   T 376
0072340  001  \0 336   E   o   B   u   s   D   a   m   n   i   t   ,   d
0072360    e   l   P   n   t   ,   d   e   l   S   e   l   :       c   m
0072400    d   P   r   o   c   ;  \r  \r           d   o   S   e   l   ,
0072420        d   o   D   r   a   w   :       c   m   d   P   r   o   c
0072440    ;  \r  \r           f   l   u   s   h   O   n   e   :       P
0072460    R   O   C   E   D   U   R   E       ;  \r           d   o   T
0072500    h   e   D   e   l   e   t   e   :       P   R   O   C   E   D
0072520    U   R   E       [   l   p   p   :       L   O   N   G       P
0072540    O   I   N   T   E   R       T   O       l   i   s   t   ]    
0072560    ;  \r   r   o   t   C   o   m   p   e   n   s   a   t   e   :
0072600    P   R   O   C   E   D   U   R   E   [   p   :   L   O   N   G
0072620        P   O   I   N   T   E   R       T   O       l   i   s   t
0072640    ]       R   E   T   U   R   N   S   [   w   ,   l   ,   d   w
0072660    ,   d   l   :   I   N   T   E   G   E   R   ]       ;  \r   f
0072700    i   n   d   W   h   i   c   h   W   i   r   e   :   P   R   O
0072720    C   E   D   U   R   E       [   l   p   :   L   O   N   G    
0072740    P   O   I   N 376 001  \0 261 310   T   E   R       T   O    
0072760    l   i   s   t   ]       R   E   T   U   R   N   S   [   w   N
0073000    u   m   :   I   N   T   E   G   E   R   ,  \r  \t   o   n   T
0073020    h   e   W   i   r   e   :   B   O   O   L   E   A   N   ,   w
0073040    l   1   ,   w   l   2   ,   w   ,   l   ,   d   w   ,   d   l
0073060    :   I   N   T   E   G   E   R   ]   ;  \r  \r   d   o   W   i
0073100    d   e   n   S   e   l   ,   d   o   W   i   d   e   n   P   n
0073120    t   ,   d   o   N   a   r   w   S   e   l   ,   d   o   N   a
0073140    r   w   P   n   t   ,   d   o   D   e   f   a   u   l   t   S
0073160    e   l   ,   d   o   D   e   f   a   u   l   t   P   n   t   :
0073200        c   m   d   P   r   o   c   ;  \r   d   o   L   e   n   S
0073220    e   l   ,   d   o   L   e   n   P   n   t   ,   d   o   S   h
0073240    r   t   S   e   l   ,   d   o   S   h   r   t   P   n   t   :
0073260        c   m   d   P   r   o   c       ;  \r  \r           d   o
0073300    P   a   r   m   S   e   l   :       P   R   O   C   E   D   U
0073320    R   E       [  \r                   t   y   p   :       p   a
0073340    r   m   T   y   p   e   ,       e 376  \0 277   [ 036   a   r
0073360    l   y   R   e   c   t   ,       l   a   t   e   R   e   c   t
0073400    :       B   O   O   L   E   A   N   ,       d   x   ,       d
0073420    y   :       I   N   T   E   G   E   R   ]       ;  \r        
0073440    d   o   P   a   r   m   P   n   t   :       P   R   O   C   E
0073460    D   U   R   E       [  \r                   t   y   p   :    
0073500    p   a   r   m   T   y   p   e   ,       e   a   r   l   y   R
0073520    e   c   t   ,       l   a   t   e   R   e   c   t   :       B
0073540    O   O   L   E   A   N   ,       d   x   ,       d   y   :    
0073560    I   N   T   E   G   E   R   ]       ;  \r  \r           s   e
0073600    t   B   u   s   P   a   r   m   s   :       P   R   O   C   E
0073620    D   U   R   E       [   b   i   g   :       B   O   O   L   E
0073640    A   N   ]   ;  \r  \r           E   N   D   .  \r 377  \0  \0
0073660    p   p   o   u   t   d   e   f   s   .   m   e   s   a  \0 373
0073700  232 260 253 243  \0  \0 376 001  \0 347 033   -   -       s   e
0073720    c   o   n   d       d   e   f   i   n   i   t   i   o   n   s
0073740        m   o   d   u   l   e       f   o   r       s   i   l   i
0073760    c   o   n       (   p   r   e   t   t   y       p   i   c   t
0074000    u   r   e   )       p   r   o   g   r   a   m  \r   -   -    
0074020    l   a   s   t       m   o   d   i   f   i   e   d       b   y
0074040        M   c   C   r   e   i   g   h   t   ,       M   a   r   c
0074060    h       2   9   ,       1   9   8   3           1   2   :   0
0074100    7       P   M  \r  \r   D   I   R   E   C   T   O   R   Y  \r
0074120            S   t   r   e   a   m   D   e   f   s   ,  \r        
0074140    p   p   d   e   f   s   ;  \r   p   p   o   u   t   d   e   f
0074160    s   :       D   E   F   I   N   I   T   I   O   N   S       I
0074200    M   P   O   R   T   S       p   p   d   e   f   s       =  \r
0074220            B   E   G   I   N       O   P   E   N       S   t   r
0074240    e   a   m   D   e   f   s   ,       p   p   d   e   f   s   ;
0074260   \r  \r           -   -       *   *   *   *       e   x   p   o
0074300    r   t   s       f   r   o   m       p   p 376 001  \0 373 274
0074320    o   u   t   :  \r  \r           c   o   n   t   T   y   p   A
0074340    L   e   n   :       C   A   R   D   I   N   A   L       =    
0074360    1   2   ;  \r           c   o   n   t   T   y   p   A   :    
0074400    A   R   R   A   Y       [   1   .   .   c   o   n   t   T   y
0074420    p   A   L   e   n   ]       O   F       c   o   n   t   T   y
0074440    p   e       =  \r                   [   m   D   i   f   ,    
0074460    m   P   o   l   ,       b   u   t   t   ,   b   u   r   r   ,
0074500        m   m   2   ,       m   D   i   f   ,   m   D   i   f   ,
0074520    m   m   2   ,   m   m   2   ,   m   m   2   ,   m   m   2   ,
0074540    d   i   f   S   h   o   r   t   ]   ;  \r  \r           c   e
0074560    l   l   N   a   m   e   A   :       L   O   N   G       D   E
0074600    S   C   R   I   P   T   O   R       F   O   R       A   R   R
0074620    A   Y       O   F       L   O   N   G       P   O   I   N   T
0074640    E   R       T   O       c   e   l   l       o   b   j   e   c
0074660    t   ;  \r  \r           c   o   d   e   W   o   r   d   F   o
0074700    r   D   a   t   a   F   i   l   e   :       C   A   R   D   I
0074720  376 001  \0 351   N   N   A   L       =       1   2   3   7   5
0074740    1   B   ;  \r  \r           o   C   n   t   ,       c   C   n
0074760    t   :       C   A   R   D   I   N   A   L   ;  \r  \r        
0075000    w   r   i   t   e   A   l   l   :       P   R   O   C   E   D
0075020    U   R   E       [   p   u   t   :       P   R   O   C       [
0075040    U   N   S   P   E   C   I   F   I   E   D   ]   ]   ;  \r    
0075060        o   p   e   n   O   f   i   l   e   :       P   R   O   C
0075100    E   D   U   R   E       [   f   n   a   m   e   :       S   T
0075120    R   I   N   G   ,       e   x   i   s   t   O   K   :       B
0075140    O   O   L   E   A   N   ]  \r                   R   E   T   U
0075160    R   N   S       [   S   t   r   e   a   m   D   e   f   s   .
0075200    D   i   s   k   H   a   n   d   l   e   ]   ;  \r  \r        
0075220    B   a   c   k   u   p   D   e   m   o   n   P   r   o   c   e
0075240    s   s   ,       E   n   a   b   l   e   B   a   c   k   u   p
0075260    ,       D   i   s   a   b   l   e   B   a   c   k   u   p   :
0075300        P   R   O   C   [   ]   ;  \r           b   a   c   k   u
0075320    p   P   a   s   s 376  \0 031 313 322   :       L   O   N   G
0075340        C   A   R   D   I   N   A   L   ;  \r  \r           E   N
0075360    D   .  \r 377  \0  \0   c   h   i   p   o   r   i   e   n   t
0075400    .   m   e   s   a  \0 373 232   ' 344 347  \0  \0 376 001  \0
0075420    1 275   -   -       C   h   i   p   O   r   i   e   n   t   .
0075440    m   e   s   a  \r  \r   -   -       l   a   s   t       e   d
0075460    i   t   e   d       b   y       E   .       M   c   C   r   e
0075500    i   g   h   t   ,       D   e   c   e   m   b   e   r       1
0075520    5   ,       1   9   8   2           6   :   1   6       P   M
0075540   \r   -   -       w   r   i   t   t   e   n       b   y       E
0075560    .       M   c   C   r   e   i   g   h   t   ,       F   e   b
0075600    r   u   a   r   y       2   2   ,       1   9   8   2        
0075620    1   0   :   0   0       A   M  \r  \r   D   I   R   E   C   T
0075640    O   R   Y  \r           I   n   l   i   n   e   D   e   f   s
0075660    ,  \r           p   p   d   e   f   s   ;  \r  \r   C   h   i
0075700    p   O   r   i   e   n   t   :       D   E   F   I   N   I   T
0075720    I   O   N   S       I   M   P   O   R   T   S       I   n   l
0075740    i   n   e   D   e   f   s       =  \r           B   E   G   I
0075760    N       O   P   E   N       p   p   d   e   f   s   ;  \r  \r
0076000            M   a   p   R   e   c   t   :       P   R   O   C    
0076020    [   i 376 001  \0 357   I   t   e   m   I   n   C   e   l   l
0076040    :       R   e   c   t   ,       c   e   l   l   S   i   z   e
0076060    :       P   o   i   n   t   ,  \r                   c   e   l
0076100    l   I   n   s   t   O   r   i   e   n   t   :       o   r   i
0076120    e   n   t   a   t   i   o   n   I   n   d   e   x   ,       c
0076140    e   l   l   I   n   s   t   P   o   s   :       P   o   i   n
0076160    t       _       [   0   ,   0   ]   ]  \r                   R
0076200    E   T   U   R   N   S       [   i   t   e   m   I   n   W   o
0076220    r   l   d   :       R   e   c   t   ]   ;  \r  \r            
0076240        -   -       G   i   v   e   n       a   n       i   t   e
0076260    m       i   n       a       p   r   o   t   o   t   y   p   e
0076300        c   e   l   l   ,       a   n   d       t   h   e  \r    
0076320                -   -       s   i   z   e       o   f       t   h
0076340    e       p   r   o   t   o   t   y   p   e       c   e   l   l
0076360    ,       b   o   t   h       i   n       "   c   e   l   l   "
0076400        c   o   -   o   r   d   i   n   a   t   e   s   ,       a
0076420    n   d  \r                 376 001  \0 020   R   -   -       t
0076440    h   e       p   o   s   i   t   i   o   n       a   n   d    
0076460    o   r   i   e   n   t   a   t   i   o   n       i   n   d   e
0076500    x       o   f       a   n       i   n   s   t   a   n   c   e
0076520        o   f       t   h   a   t       c   e   l   l       i   n
0076540        "   w   o   r   l   d   "  \r                   -   -    
0076560    c   o   -   o   r   d   i   n   a   t   e   s   ,       t   h
0076600    i   s       p   r   o   c   e   d   u   r   e       r   e   t
0076620    u   r   n   s       t   h   e       w   o   r   l   d  \r    
0076640                -   -       c   o   -   o   r   d   i   n   a   t
0076660    e   s       o   f       t   h   e       i   n   s   t   a   n
0076700    c   e       o   f       t   h   e       i   t   e   m   .  \r
0076720   \r  \r           D   e   M   a   p   R   e   c   t   :       P
0076740    R   O   C       [   i   t   e   m   I   n   W   o   r   l   d
0076760    :       R   e   c   t   ,       c   e   l   l   S   i   z   e
0077000    :       P   o   i   n   t   ,  \r                   c   e   l
0077020    l   I   n   s   t   O   r   i   e   n   t   : 376 001  \0 354
0077040    [       o   r   i   e   n   t   a   t   i   o   n   I   n   d
0077060    e   x   ,       c   e   l   l   I   n   s   t   P   o   s   :
0077100        P   o   i   n   t       _       [   0   ,   0   ]   ]  \r
0077120                    R   E   T   U   R   N   S       [   i   t   e
0077140    m   I   n   C   e   l   l   :       R   e   c   t   ]   ;  \r
0077160   \r                   -   -       G   i   v   e   n       a   n
0077200        i   t   e   m       i   n       w   o   r   l   d       c
0077220    o   -   o   r   d   i   n   a   t   e   s   ,       a   n   d
0077240        t   h   e  \r                   -   -       s   i   z   e
0077260        o   f       a       p   r   o   t   o   t   y   p   e    
0077300    c   e   l   l   ,       b   o   t   h       i   n       "   c
0077320    e   l   l   "       c   o   -   o   r   d   i   n   a   t   e
0077340    s   ,       a   n   d  \r                   -   -       t   h
0077360    e       p   o   s   i   t   i   o   n       a   n   d       o
0077400    r   i   e   n   t   a   t   i   o   n       i   n   d   e   x
0077420        o   f       a   n       i   n   s   t   a   n   c   e    
0077440    o 376 001  \0 365   9   f       t   h   a   t       c   e   l
0077460    l       i   n       "   w   o   r   l   d   "  \r            
0077500        -   -       c   o   -   o   r   d   i   n   a   t   e   s
0077520    ,       t   h   i   s       p   r   o   c   e   d   u   r   e
0077540        r   e   t   u   r   n   s       t   h   e       c   e   l
0077560    l       p   r   o   t   o   t   y   p   e  \r                
0077600    -   -       c   o   -   o   r   d   i   n   a   t   e   s    
0077620    o   f       t   h   a   t       i   t   e   m   .  \r  \r  \r
0077640            C   o   m   p   o   s   e   O   r   i   e   n   t   :
0077660        P   R   O   C       [  \r                   i   t   e   m
0077700    O   r   i   e   n   t   I   n   C   e   l   l   ,       c   e
0077720    l   l   O   r   i   e   n   t   I   n   W   o   r   l   d   :
0077740        o   r   i   e   n   t   a   t   i   o   n   I   n   d   e
0077760    x   ]  \r                   R   E   T   U   R   N   S       [
0100000    i   t   e   m   O   r   i   e   n   t   I   n   W   o   r   l
0100020    d   :       o   r   i   e   n   t   a   t   i   o   n   I   n
0100040    d   e   x   ]   ;  \r 376 001  \0 270 333  \r                
0100060    -   -       T   h   i   s       p   r   o   c   e   d   u   r
0100100    e       p   r   o   d   u   c   e   s       t   h   e       c
0100120    o   m   p   o   s   i   t   e       o   r   i   e   n   t   a
0100140    t   i   o   n  \r                   -   -       o   b   t   a
0100160    i   n   e   d       b   y       f   i   r   s   t       d   o
0100200    i   n   g       i   t   e   m   I   n   C   e   l   l       a
0100220    n   d       t   h   e   n  \r                   -   -       d
0100240    o   i   n   g       c   e   l   l   I   n   W   o   r   l   d
0100260    .  \r  \r  \r           I   n   v   e   r   s   e   O   r   i
0100300    e   n   t   :       P   R   O   C       [   o   r   i   e   n
0100320    t   :       o   r   i   e   n   t   a   t   i   o   n   I   n
0100340    d   e   x   ]  \r                   R   E   T   U   R   N   S
0100360        [   i   n   v   e   r   s   e   :       o   r   i   e   n
0100400    t   a   t   i   o   n   I   n   d   e   x   ]   ;  \r  \r    
0100420                -   -       F   o   r       a   l   l       o   r
0100440    i   e   n   t   a   t   i   o   n   I   n 376 001  \0   _ 021
0100460    d   e   x   e   s       o   1   ,       C   o   m   p   o   s
0100500    e   O   r   i   e   n   t   [   o   1   ,       I   n   v   e
0100520    r   s   e   O   r   i   e   n   t   [   o   1   ]   ]       =
0100540        0   .  \r  \r  \r           D   e   c   o   m   p   o   s
0100560    e   O   r   i   e   n   t   :       P   R   O   C   E   D   U
0100600    R   E   [  \r                   i   t   e   m   O   r   i   e
0100620    n   t   I   n   W   o   r   l   d   ,       c   e   l   l   O
0100640    r   i   e   n   t   I   n   W   o   r   l   d   :       o   r
0100660    i   e   n   t   a   t   i   o   n   I   n   d   e   x   ]  \r
0100700                    R   E   T   U   R   N   S       [   i   t   e
0100720    m   O   r   i   e   n   t   I   n   C   e   l   l   :       o
0100740    r   i   e   n   t   a   t   i   o   n   I   n   d   e   x   ]
0100760    ;  \r  \r                   -   -       F   o   r       a   l
0101000    l       o   r   i   e   n   t   a   t   i   o   n   I   n   d
0101020    e   x   e   s       o   1       a   n   d       o   2   ,  \r
0101040                    -   -       D   e   c   o   m   p   o   s   e
0101060  376 001  \0   +   ~   O   r   i   e   n   t   [   c   e   l   l
0101100    O   r   i   e   n   t   I   n   W   o   r   l   d   :       o
0101120    1   ,       i   t   e   m   O   r   i   e   n   t   I   n   W
0101140    o   r   l   d   :  \r                   -   -               C
0101160    o   m   p   o   s   e   O   r   i   e   n   t   [   c   e   l
0101200    l   O   r   i   e   n   t   I   n   W   o   r   l   d   :    
0101220    o   1   ,       i   t   e   m   O   r   i   e   n   t   I   n
0101240    C   e   l   l   :       o   2   ]   ]       =       o   2   .
0101260   \r  \r  \r           R   e   f   P   t   :       P   R   O   C
0101300        [   r   :       R   e   c   t   ]       R   E   T   U   R
0101320    N   S       [   P   o   i   n   t   ]   ;  \r                
0101340    -   -       T   h   i   s       p   r   o   c   e   d   u   r
0101360    e       r   e   t   u   r   n   s       a       l   a   m   b
0101400    d   a   -   g   r   i   d       p   o   i   n   t       n   e
0101420    a   r       t   h   e  \r                   -   -       c   e
0101440    n   t   e   r       o   f       t   h   e       r   e   c   t
0101460    a   n   g   l   e 376 001  \0 367   m   .  \r  \r  \r        
0101500    N   o   r   m   a   l   i   z   e   L   i   s   t   :       P
0101520    R   O   C       [   l   p   :       l   i   s   t   P   t   r
0101540    ,       o   r   i   g   i   n   :       P   o   i   n   t    
0101560    _       [   0   ,   0   ]   ]  \r                   R   E   T
0101600    U   R   N   S       [   s   i   z   e   ,       o   f   f   s
0101620    e   t   :       P   o   i   n   t   ]   ;  \r                
0101640    -   -       T   h   i   s       p   r   o   c   e   d   u   r
0101660    e       n   o   r   m   a   l   i   z   e   s       t   h   e
0101700        l   i   s   t       s   o       t   h   a   t       s   o
0101720    m   e       e   l   e   m   e   n   t  \r                   -
0101740    -       s   t   a   r   t   s       a   t       x   =   o   r
0101760    i   g   i   n   .   x       a   n   d       s   o   m   e    
0102000    e   l   e   m   e   n   t       s   t   a   r   t   s       a
0102020    t       y   =   o   r   i   g   i   n   .   y   .  \r        
0102040            -   -       n   e   w       _       o   l   d   +   o
0102060    f   f   s   e   t   .  \r  \r  \r     376 001  \0   7 006    
0102100    B   o   u   n   d   i   n   g   R   e   c   t   :       P   R
0102120    O   C       [   l   p   :       l   i   s   t   P   t   r   ]
0102140        R   E   T   U   R   N   S       [   r   :       R   e   c
0102160    t   ]   ;  \r  \r  \r           R   o   t   9   0   :       P
0102200    R   O   C       [   o   r   i   e   n   t   :       p   p   d
0102220    e   f   s   .   o   r   i   e   n   t   a   t   i   o   n   I
0102240    n   d   e   x   ]       R   E   T   U   R   N   S       [   [
0102260    0   .   .   1   ]   ]       =       I   N   L   I   N   E  \r
0102300                    {   R   E   T   U   R   N   [   I   F       I
0102320    n   l   i   n   e   D   e   f   s   .   B   I   T   A   N   D
0102340    [   o   r   i   e   n   t   ,       4   ]   =   0       T   H
0102360    E   N       0       E   L   S   E       1   ]   }   ;  \r  \r
0102400   \r           S   i   z   e   :       P   R   O   C       [   s
0102420    i   z   e   :       p   p   d   e   f   s   .   P   o   i   n
0102440    t   ,       o   r   i   e   n   t   :       p   p   d   e   f
0102460    s   .   o   r   i   e   n   t   a   t   i   o   n   I   n 376
0102500  001  \0 317 030   d   e   x   ]  \r                   R   E   T
0102520    U   R   N   S       [   p   p   d   e   f   s   .   P   o   i
0102540    n   t   ]       =       I   N   L   I   N   E  \r            
0102560        {   R   E   T   U   R   N   [   I   F       I   n   l   i
0102600    n   e   D   e   f   s   .   B   I   T   A   N   D   [   o   r
0102620    i   e   n   t   ,       4   ]   =   0       T   H   E   N    
0102640    s   i   z   e       E   L   S   E  \r                        
0102660    [   x   :       s   i   z   e   .   y   ,       y   :       s
0102700    i   z   e   .   x   ]   ]   }   ;  \r  \r           D   e   c
0102720    o   m   p   o   s   e   R   e   c   t   :       P   R   O   C
0102740        [   r   ,       t   e   s   t   :       p   p   d   e   f
0102760    s   .   R   e   c   t   ,       r   I   n   s   i   d   e   T
0103000    e   s   t   ,  \r                   r   O   u   t   s   i   d
0103020    e   T   e   s   t   :       P   R   O   C   [   p   p   d   e
0103040    f   s   .   R   e   c   t   ]   ]   ;  \r                   -
0103060    -       c   a   l   l   s       r   I   n   s   i   d   e   T
0103100    e   s   t     376  \0   {   M 305   a   n   d       r   O   u
0103120    t   s   i   d   e   T   e   s   t       o   n       a       s
0103140    e   t       o   f       u   p       t   o       5       r   e
0103160    c   t   a   n   g   l   e   s  \r                   -   -    
0103200    t   h   a   t       a   r   e       m   u   t   u   a   l   l
0103220    y       e   x   c   l   u   s   i   v   e       a   n   d    
0103240    e   x   h   a   u   s   t       r   .  \r  \r           E   N
0103260    D   .       -   -       o   f       C   h   i   p   O   r   i
0103300    e   n   t  \r 377  \0  \0   c   h   i   p   u   s   e   r   i
0103320    n   t   .   m   e   s   a  \0 373 232 224 327 232  \0  \0 376
0103340  001  \0 201 300   -   -       C   h   i   p   U   s   e   r   I
0103360    n   t   .   m   e   s   a  \r   -   -       t   h   e       d
0103400    e   f   i   n   i   t   i   o   n   s       f   o   r       a
0103420    n       i   m   p   r   o   v   e   d       u   s   e   r    
0103440    i   n   t   e   r   f   a   c   e       f   o   r       t   e
0103460    x   t  \r   -   -       t   o       C   h   i   p   m   o   n
0103500    k   .  \r  \r   -   -       l   a   s   t       m   o   d   i
0103520    f   i   e   d       b   y       E   .       M   c   C   r   e
0103540    i   g   h   t   ,       M   a   r   c   h       8   ,       1
0103560    9   8   3           9   :   3   0       A   M  \r   -   -    
0103600    w   r   i   t   t   e   n       b   y       E   .       M   c
0103620    C   r   e   i   g   h   t   ,       N   o   v   e   m   b   e
0103640    r       1   9   ,       1   9   8   1           2   :   4   3
0103660        P   M  \r  \r   D   I   R   E   C   T   O   R   Y  \r    
0103700        p   p   d   e   f   s   ;  \r  \r   C   h   i   p   U   s
0103720    e   r   I   n   t   :       D   E   F   I   N   I   T   I   O
0103740    N   S       = 376 001  \0 352   M  \r           B   E   G   I
0103760    N  \r  \r           P   u   n   t   :       S   I   G   N   A
0104000    L   ;  \r  \r           E   x   p   l   a   i   n   :       P
0104020    R   O   C   E   D   U   R   E       [   w   h   a   t   ,    
0104040    w   h   y   ,       e   x   p   l   a   n   a   t   i   o   n
0104060    :       L   O   N   G       S   T   R   I   N   G       _    
0104100    N   I   L   ]   ;  \r  \r           F   i   x   E   x   t   e
0104120    n   s   i   o   n   :       P   R   O   C   E   D   U   R   E
0104140        [   s   ,       e   x   t   :       S   T   R   I   N   G
0104160    ]       R   E   T   U   R   N   S       [   s   e   :       S
0104200    T   R   I   N   G   ]   ;  \r  \r           R   e   q   u   e
0104220    s   t   S   t   r   i   n   g   :       P   R   O   C   E   D
0104240    U   R   E   [   s   1   ,       s   2   ,       s   3   :    
0104260    L   O   N   G       S   T   R   I   N   G       _       N   I
0104300    L   ,  \r                   l   o   w   e   r   C   a   s   e
0104320    O   K   :       B   O   O   L   E   A   N       _       F   A
0104340    L   S   E   ,  \r                 376 001  \0 230 234   f   l
0104360    a   s   h   C   o   l   o   r   :       B   O   O   L   E   A
0104400    N       _       T   R   U   E   ,  \r                   b   r
0104420    e   a   k   C   h   a   r   s   :       L   O   N   G       S
0104440    T   R   I   N   G       _       N   I   L   ,  \r            
0104460        a   p   p   e   n   d   B   r   e   a   k   C   h   a   r
0104500    :       B   O   O   L   E   A   N       _       F   A   L   S
0104520    E   ,  \r                   i   n   i   t   R   e   s   u   l
0104540    t   :       L   O   N   G       S   T   R   I   N   G       _
0104560        N   I   L   ]  \r                   R   E   T   U   R   N
0104600    S   [   s   R   e   s   u   l   t   :       S   T   R   I   N
0104620    G   ]   ;  \r  \r           R   e   q   u   e   s   t   I   n
0104640    t   e   g   e   r   :       P   R   O   C   E   D   U   R   E
0104660    [   s   1   ,       s   2   :       L   O   N   G       S   T
0104700    R   I   N   G       _       N   I   L   ]  \r                
0104720    R   E   T   U   R   N   S   [   I   N   T   E   G   E   R   ]
0104740    ;  \r  \r           H   e   S   a   y   s   Y   e   s 376 001
0104760   \0   = 256   :       P   R   O   C   E   D   U   R   E   [   s
0105000    1   ,       s   2   ,       s   3   :       L   O   N   G    
0105020    S   T   R   I   N   G       _       N   I   L   ]  \r        
0105040            R   E   T   U   R   N   S   [   B   O   O   L   E   A
0105060    N   ]   ;  \r  \r           R   e   m   a   r   k   A   t   P
0105100    o   i   n   t   ,       D   e   b   u   g   A   t   P   o   i
0105120    n   t   :  \r                   P   R   O   C   E   D   U   R
0105140    E   [   p   :       p   p   d   e   f   s   .   P   o   i   n
0105160    t   ,       s   :       L   O   N   G       S   T   R   I   N
0105200    G   ]   ;  \r  \r           G   r   i   d   P   o   i   n   t
0105220    :       P   R   O   C   E   D   U   R   E   [   p   :       p
0105240    p   d   e   f   s   .   P   o   i   n   t   ]       R   E   T
0105260    U   R   N   S   [   p   p   d   e   f   s   .   P   o   i   n
0105300    t   ]   ;  \r                   -   -       r   e   t   u   r
0105320    n   s       n   e   a   r   b   y       p   o   i   n   t    
0105340    o   n   -   g   r   i   d   .  \r  \r           M   o   v   e
0105360    T   o   X 376  \0 245 331 017   Y   :       P   R   O   C   E
0105400    D   U   R   E   [   x   ,       y   :       p   p   d   e   f
0105420    s   .   l   o   c   N   u   m   ]   ;  \r                   -
0105440    -       m   a   i   n   l   y       f   o   r       d   e   b
0105460    u   g   g   e   r  \r  \r           C   o   l   o   r   O   n
0105500    ,       C   o   l   o   r   O   f   f   :       P   R   O   C
0105520    E   D   U   R   E   [   ]   ;  \r  \r           C   o   l   o
0105540    r   I   s   O   n   :       P   R   O   C   E   D   U   R   E
0105560        R   E   T   U   R   N   S   [   B   O   O   L   E   A   N
0105600    ]   ;  \r  \r           E   N   D   .       -   -       o   f
0105620        C   h   i   p   U   s   e   r   I   n   t  \r 377  \0  \0
0105640    p   p   p   d   e   f   s   .   m   e   s   a  \0 373 232   p
0105660    V 274  \0  \0 376 001  \0   1 211   -   -       d   e   f   i
0105700    n   i   t   i   o   n   s       m   o   d   u   l   e       f
0105720    o   r       p   p   p   r   o   c   s   5       f   o   r    
0105740    s   i   l   i   c   o   n       (   p   r   e   t   t   y    
0105760    p   i   c   t   u   r   e   )       p   r   o   g   r   a   m
0106000   \r   -   -       l   a   s   t       m   o   d   i   f   i   e
0106020    d       b   y       M   c   C   r   e   i   g   h   t   ,    
0106040    F   e   b   r   u   a   r   y       8   ,       1   9   8   3
0106060            5   :   0   4       P   M  \r  \r   D   I   R   E   C
0106100    T   O   R   Y  \r           S   e   g   m   e   n   t   D   e
0106120    f   s   ,  \r           m   u   l   t   i   G   r   a   p   h
0106140    i   c   s   D   e   f   s   ,  \r           p   p   d   e   f
0106160    s   ,  \r           S   t   r   e   a   m   D   e   f   s   ;
0106200   \r   p   p   p   d   e   f   s   :       D   E   F   I   N   I
0106220    T   I   O   N   S       I   M   P   O   R   T   S       p   p
0106240    d   e   f   s   ,       S   e   g   m   e   n   t   D   e   f
0106260    s   ,       m   u   l   t   i   G 376 001  \0 223 301   r   a
0106300    p   h   i   c   s   D   e   f   s   ,       S   t   r   e   a
0106320    m   D   e   f   s       =  \r           B   E   G   I   N    
0106340    O   P   E   N       p   p   d   e   f   s   ,       m   u   l
0106360    t   i   G   r   a   p   h   i   c   s   D   e   f   s   ,    
0106400    S   t   r   e   a   m   D   e   f   s   ;  \r  \r           d
0106420    r   A   r   b   :       P   R   O   C   E   D   U   R   E   [
0106440    d   r   0   :       d   r   P   r   o   c   ,       o   r   i
0106460    e   n   t   :       o   r   i   e   n   t   a   t   i   o   n
0106500    I   n   d   e   x   ,  \r                   o   b   :       o
0106520    b   P   t   r   ,       x   ,       y   :       l   o   c   N
0106540    u   m   ,       p   r   :       P   O   I   N   T   E   R    
0106560    T   O       d   r   R   e   c   o   r   d   ]   ;  \r  \r    
0106600        d   r   T   e   x   t   :       d   r   P   r   o   c   ;
0106620   \r           d   r   C   n   T   e   x   t   :       d   r   P
0106640    r   o   c   ;  \r           d   r   R   e   c   t   0   :    
0106660    d   r   P   r   o   c   ;  \r           d   r   R   e 376 001
0106700   \0 352 373   c   t   2   :       d   r   P   r   o   c   ;  \r
0106720            d   r   C   e   l   l   0   :       d   r   P   r   o
0106740    c   ;  \r           d   r   C   e   l   l   2   :       d   r
0106760    P   r   o   c   ;  \r           d   r   C   e   l   l   4   :
0107000        d   r   P   r   o   c   ;  \r           d   r   C   e   l
0107020    l   6   :       d   r   P   r   o   c   ;  \r           d   r
0107040    C   e   l   l   0   R   :       d   r   P   r   o   c   ;  \r
0107060            d   r   C   e   l   l   2   R   :       d   r   P   r
0107100    o   c   ;  \r           d   r   C   e   l   l   4   R   :    
0107120    d   r   P   r   o   c   ;  \r           d   r   C   e   l   l
0107140    6   R   :       d   r   P   r   o   c   ;  \r           d   r
0107160    X   s   t   r   0   :       d   r   P   r   o   c   ;  \r    
0107200        d   r   X   s   t   r   2   :       d   r   P   r   o   c
0107220    ;  \r           d   r   P   X   s   t   r   0   :       d   r
0107240    P   r   o   c   ;  \r           d   r   P   X   s   t   r   2
0107260    :       d   r   P   r   o   c   ;  \r           d   r   A   X
0107300    s   t   r 376 001  \0 311 207   0   :       d   r   P   r   o
0107320    c   ;  \r           d   r   A   X   s   t   r   R   0   :    
0107340    d   r   P   r   o   c   ;  \r           d   r   A   X   s   t
0107360    r   2   :       d   r   P   r   o   c   ;  \r           d   r
0107400    A   X   s   t   r   R   2   :       d   r   P   r   o   c   ;
0107420   \r           d   r   A   X   s   t   r   4   :       d   r   P
0107440    r   o   c   ;  \r           d   r   A   X   s   t   r   R   4
0107460    :       d   r   P   r   o   c   ;  \r           d   r   A   X
0107500    s   t   r   6   :       d   r   P   r   o   c   ;  \r        
0107520    d   r   A   X   s   t   r   R   6   :       d   r   P   r   o
0107540    c   ;  \r           d   r   P   u   0   :       d   r   P   r
0107560    o   c   ;  \r           d   r   P   u   2   :       d   r   P
0107600    r   o   c   ;  \r           d   r   P   u   4   :       d   r
0107620    P   r   o   c   ;  \r           d   r   P   u   6   :       d
0107640    r   P   r   o   c   ;  \r           d   r   W   i   r   e   0
0107660    :       d   r   P   r   o   c   ;  \r           d   r   W   i
0107700    r   e   2   :       d   r   P 376 001  \0 355 337   r   o   c
0107720    ;  \r           d   r   D   i   f   W   i   r   e   0   :    
0107740    d   r   P   r   o   c   ;  \r           d   r   D   i   f   W
0107760    i   r   e   2   :       d   r   P   r   o   c   ;  \r        
0110000    d   r   B   C   0   :       d   r   P   r   o   c   ;  \r    
0110020        d   r   B   C   2   :       d   r   P   r   o   c   ;  \r
0110040            d   r   B   C   4   :       d   r   P   r   o   c   ;
0110060   \r           d   r   B   C   6   :       d   r   P   r   o   c
0110100    ;  \r           d   r   M   D   C   0   :       d   r   P   r
0110120    o   c   ;  \r           d   r   M   D   C   2   :       d   r
0110140    P   r   o   c   ;  \r           d   r   D   C   0   :       d
0110160    r   P   r   o   c   ;  \r           d   r   D   C   2   :    
0110200    d   r   P   r   o   c   ;  \r           d   r   P   D   C   0
0110220    :       d   r   P   r   o   c   ;  \r           d   r   P   D
0110240    C   2   :       d   r   P   r   o   c   ;  \r           d   r
0110260    M   P   D   C   0   :       d   r   P   r   o   c   ;  \r    
0110300        d   r   M   P   D   C   2   :       d   r   P 376 001  \0
0110320    C 355   r   o   c   ;  \r           d   r   M   M   0   :    
0110340    d   r   P   r   o   c   ;  \r           d   r   M   M   2   :
0110360        d   r   P   r   o   c   ;  \r  \r           d   r   B   u
0110400    C   0   :       d   r   P   r   o   c   ;  \r           d   r
0110420    B   u   C   2   :       d   r   P   r   o   c   ;  \r        
0110440    d   r   B   u   C   4   :       d   r   P   r   o   c   ;  \r
0110460            d   r   B   u   C   6   :       d   r   P   r   o   c
0110500    ;  \r  \r           d   r   D   i   f   S   h   o   r   t   0
0110520    :       d   r   P   r   o   c   ;  \r           d   r   D   i
0110540    f   S   h   o   r   t   2   :       d   r   P   r   o   c   ;
0110560   \r           d   r   D   i   f   S   h   o   r   t   4   :    
0110600    d   r   P   r   o   c   ;  \r           d   r   D   i   f   S
0110620    h   o   r   t   6   :       d   r   P   r   o   c   ;  \r  \r
0110640            d   r   B   u   s   0   :       d   r   P   r   o   c
0110660    ;  \r           d   r   B   u   s   2   :       d   r   P   r
0110700    o   c   ;  \r           d   r   B   u   s   4   :       d   r
0110720    P   r 376 001  \0 016 232   o   c   ;  \r           d   r   B
0110740    u   s   6   :       d   r   P   r   o   c   ;  \r           d
0110760    r   B   u   s   R   0   :       d   r   P   r   o   c   ;  \r
0111000            d   r   B   u   s   R   2   :       d   r   P   r   o
0111020    c   ;  \r           d   r   B   u   s   R   4   :       d   r
0111040    P   r   o   c   ;  \r           d   r   B   u   s   R   6   :
0111060        d   r   P   r   o   c   ;  \r  \r           d   r   R   e
0111100    p   0   :       d   r   P   r   o   c   ;  \r           d   r
0111120    R   e   p   2   :       d   r   P   r   o   c   ;  \r        
0111140    d   r   R   e   p   4   :       d   r   P   r   o   c   ;  \r
0111160            d   r   R   e   p   6   :       d   r   P   r   o   c
0111200    ;  \r           d   r   R   e   p   R   0   :       d   r   P
0111220    r   o   c   ;  \r           d   r   R   e   p   R   2   :    
0111240    d   r   P   r   o   c   ;  \r           d   r   R   e   p   R
0111260    4   :       d   r   P   r   o   c   ;  \r           d   r   R
0111300    e   p   R   6   :       d   r   P   r   o   c   ;  \r  \r  \r
0111320            E   N   D   .  \r 377  \0  \0   p   p   c   a   c   h
0111340    e   .   m   e   s   a  \0 373 232   `   9   q  \0  \0 376 001
0111360   \0   # 335   -   -       B   i   t   m   a   p       c   a   c
0111400    h   e       d   e   f   i   n   i   t   i   o   n   s       f
0111420    o   r       C   h   i   p   m   o   n   k  \r   -   -       l
0111440    a   s   t       m   o   d   i   f   i   e   d       b   y    
0111460    M   c   C   r   e   i   g   h   t   ,       J   a   n   u   a
0111500    r   y       2   4   ,       1   9   8   3           9   :   5
0111520    5       A   M  \r   -   -       w   r   i   t   t   e   n    
0111540    b   y       M   c   C   r   e   i   g   h   t   ,       J   a
0111560    n   u   a   r   y       1   1   ,       1   9   8   3        
0111600    2   :   2   1       P   M  \r  \r   D   I   R   E   C   T   O
0111620    R   Y  \r           p   p   d   e   f   s   ;  \r  \r   p   p
0111640    C   a   c   h   e   :       D   E   F   I   N   I   T   I   O
0111660    N   S       =  \r           B   E   G   I   N  \r  \r        
0111700    E   n   a   b   l   e   C   a   c   h   e   ,       D   i   s
0111720    a   b   l   e   C   a   c   h   e   ,       F   l   u   s   h
0111740    E   n   t   i   r   e   C   a   c   h   e   :       P   R   O
0111760    C   ;  \r 376 001  \0   o 020  \r           C   a   c   h   i
0112000    n   g   I   s   E   n   a   b   l   e   d   :       P   R   O
0112020    C       R   E   T   U   R   N   S       [   B   O   O   L   E
0112040    A   N   ]   ;  \r  \r           F   l   u   s   h   O   b   j
0112060    e   c   t   C   a   c   h   e   :       P   R   O   C       [
0112100    o   b   :       p   p   d   e   f   s   .   o   b   P   t   r
0112120    ]   ;  \r  \r           S   e   t   u   p   C   a   c   h   e
0112140    G   r   a   y   T   a   b   l   e   s   :       P   R   O   C
0112160    ;  \r                   -   -       c   a   l   l   e   d    
0112200    w   h   e   n   e   v   e   r       c   o   l   o   r       m
0112220    a   p       c   h   a   n   g   e   s  \r  \r           D   r
0112240    a   w   W   i   t   h   C   a   c   h   i   n   g   :       P
0112260    R   O   C       [   o   b   :       p   p   d   e   f   s   .
0112300    o   b   P   t   r   ,       o   r   i   e   n   t   :       p
0112320    p   d   e   f   s   .   o   r   i   e   n   t   a   t   i   o
0112340    n   I   n   d   e   x   ,  \r                   x   ,       y
0112360    :       p   p   d   e   f   s 376 001  \0 355 374   .   l   o
0112400    c   N   u   m   ,       p   r   :       P   O   I   N   T   E
0112420    R       T   O       p   p   d   e   f   s   .   d   r   R   e
0112440    c   o   r   d   ,       d   e   s   t   :       p   p   d   e
0112460    f   s   .   R   a   s   t   e   r   ]   ;  \r                
0112500    -   -       c   r   e   a   t   e   s       a       n   e   w
0112520        p   r       w   i   t   h       o   r   C   a   c   h   e
0112540        f   i   l   l   e   d       i   n       t   o       p   a
0112560    i   n   t       i   n   t   o       d   e   s   t   ,       t
0112600    h   e   n       c   a   l   l   s  \r                   -   -
0112620        o   b   .   p   .   d   r   a   w   m   e   [   o   r   i
0112640    e   n   t   ]       o   n       i   t   .      \r  \r        
0112660    p   e   r   m   i   t   t   e   d   C   a   c   h   e   K   :
0112700        I   N   T   E   G   E   R   ;  \r                   -   -
0112720        n   u   m   b   e   r       o   f       k       w   o   r
0112740    d   s       o   f       l   o   n   g       s   t   o   r   a
0112760    g   e       t   h   a   t       c   a   n       b 376  \0 201
0113000  351 236   e       d   e   v   o   t   e   d       t   o       b
0113020    i   t   m   a   p       c   a   c   h   e   s  \r            
0113040        -   -       <   =   0       d   i   s   a   b   l   e   s
0113060        c   a   c   h   i   n   g  \r  \r           m   a   x   C
0113100    o   l   P   i   x   e   l   s   P   e   r   C   a   c   h   e
0113120    M   a   p   ,       m   a   x   B   W   P   i   x   e   l   s
0113140    P   e   r   C   a   c   h   e   M   a   p   :       L   O   N
0113160    G       I   N   T   E   G   E   R   ;  \r  \r           E   N
0113200    D   .  \r 377  \0  \0   c   h   i   p   o   r   i   e   n   t
0113220    i   m   p   l   .   m   e   s   a  \0 373 232   .   L   2  \0
0113240   \0 376 001  \0  \0 327   -   -       C   h   i   p   O   r   i
0113260    e   n   t   I   m   p   l   .   m   e   s   a  \r  \r   -   -
0113300        A       p   a   c   k   a   g   e       t   o       t   r
0113320    a   n   s   f   o   r   m       C   h   i   p   m   o   n   k
0113340        r   e   c   t   a   n   g   l   e   s       a   n   d  \r
0113360    -   -       o   r   i   e   n   t   a   t   i   o   n   s   .
0113400   \r  \r   -   -       l   a   s   t       e   d   i   t   e   d
0113420        b   y       E   .       M   c   C   r   e   i   g   h   t
0113440    ,       D   e   c   e   m   b   e   r       1   5   ,       1
0113460    9   8   2           6   :   1   0       P   M  \r   -   -    
0113500    w   r   i   t   t   e   n       b   y       E   .       M   c
0113520    C   r   e   i   g   h   t   ,       F   e   b   r   u   a   r
0113540    y       2   2   ,       1   9   8   2           1   0   :   1
0113560    1       A   M  \r  \r   D   I   R   E   C   T   O   R   Y  \r
0113600            C   h   i   p   O   r   i   e   n   t   ,  \r        
0113620    I   n   l   i   n   e   D   e   f   s   ,  \r           p   p
0113640    d   e   f   s   ;  \r 376 001  \0   1 320  \r   C   h   i   p
0113660    O   r   i   e   n   t   I   m   p   l   :       P   R   O   G
0113700    R   A   M  \r           I   M   P   O   R   T   S       C   h
0113720    i   p   O   r   i   e   n   t   ,       I   n   l   i   n   e
0113740    D   e   f   s   ,       p   p   d   e   f   s  \r           E
0113760    X   P   O   R   T   S       C   h   i   p   O   r   i   e   n
0114000    t       =  \r           B   E   G   I   N       O   P   E   N
0114020        p   p   d   e   f   s   ,       C   h   i   p   O   r   i
0114040    e   n   t   ;  \r  \r  \r           -   -       O   r   i   e
0114060    n   t   a   t   i   o   n       T   r   a   n   s   f   o   r
0114100    m   a   t   i   o   n   s  \r  \r           -   -       x    
0114120    i   n   c   r   e   a   s   e   s       t   o       t   h   e
0114140        r   i   g   h   t   ,       y       i   n   c   r   e   a
0114160    s   e   s       d   o   w   n   w   a   r   d   .  \r  \r    
0114200        -   -       A   n       o   r   i   e   n   t   a   t   i
0114220    o   n   I   n   d   e   x       i   d   x       i   s       c
0114240    o   m   p   o   s   e   d       o   f     376 001  \0 347 327
0114260    t   w   o       p   a   r   t   s   :  \r           -   -    
0114300                a       c   l   o   c   k   w   i   s   e       r
0114320    o   t   a   t   i   o   n       o   f       (   i   d   x   /
0114340    2   )   *   4   5       d   e   g   r   e   e   s   ,  \r    
0114360        -   -                   f   o   l   l   o   w   e   d    
0114400    b   y       a       r   e   f   l   e   c   t   i   o   n    
0114420    i   n       x       i   f       (   i   d   x       M   O   D
0114440        2   )   #   0   .  \r           -   -       O   d   d    
0114460    m   u   l   t   i   p   l   e   s       o   f       4   5    
0114500    d   e   g   r   e   e   s       a   r   e       n   o   t    
0114520    y   e   t       s   u   p   p   o   r   t   e   d   .  \r  \r
0114540            M   a   p   R   e   c   t   :       P   U   B   L   I
0114560    C       P   R   O   C       [   i   t   e   m   I   n   C   e
0114600    l   l   :       R   e   c   t   ,       c   e   l   l   S   i
0114620    z   e   :       P   o   i   n   t   ,  \r                   c
0114640    e   l   l   I   n   s   t   O   r   i   e   n   t   :       o
0114660  376 001  \0   ]  \f   r   i   e   n   t   a   t   i   o   n   I
0114700    n   d   e   x   ,       c   e   l   l   I   n   s   t   P   o
0114720    s   :       P   o   i   n   t       _       [   0   ,   0   ]
0114740    ]  \r                   R   E   T   U   R   N   S       [   i
0114760    t   e   m   I   n   W   o   r   l   d   :       R   e   c   t
0115000    ]       =  \r  \r                   -   -       G   i   v   e
0115020    n       a   n       i   t   e   m       i   n       a       p
0115040    r   o   t   o   t   y   p   e       c   e   l   l   ,       a
0115060    n   d       t   h   e  \r                   -   -       s   i
0115100    z   e       o   f       t   h   e       p   r   o   t   o   t
0115120    y   p   e       c   e   l   l   ,       b   o   t   h       i
0115140    n       "   c   e   l   l   "       c   o   -   o   r   d   i
0115160    n   a   t   e   s   ,       a   n   d  \r                   -
0115200    -       t   h   e       p   o   s   i   t   i   o   n       a
0115220    n   d       o   r   i   e   n   t   a   t   i   o   n       i
0115240    n   d   e   x       o   f       a   n       i   n   s   t   a
0115260    n   c   e       o 376 001  \0 240 271   f       t   h   a   t
0115300        c   e   l   l       i   n       "   w   o   r   l   d   "
0115320   \r                   -   -       c   o   -   o   r   d   i   n
0115340    a   t   e   s   ,       t   h   i   s       p   r   o   c   e
0115360    d   u   r   e       r   e   t   u   r   n   s       t   h   e
0115400        w   o   r   l   d  \r                   -   -       c   o
0115420    -   o   r   d   i   n   a   t   e   s       o   f       t   h
0115440    e       i   n   s   t   a   n   c   e       o   f       t   h
0115460    e       i   t   e   m   .  \r  \r                   B   E   G
0115500    I   N       O   P   E   N       I   n   l   i   n   e   D   e
0115520    f   s   ;  \r                   x   1   ,       y   1   ,    
0115540    x   2   ,       y   2   ,       s   i   z   e   X   ,       s
0115560    i   z   e   Y   ,       t   :       l   o   c   N   u   m   ;
0115600   \r                   I   F       c   e   l   l   I   n   s   t
0115620    O   r   i   e   n   t   =   0       T   H   E   N  \r        
0115640                    R   E   T   U   R   N   [   [   x   1   :    
0115660    c   e   l   l   I   n   s   t   P   o 376 001  \0 376 204   s
0115700    .   x   +   i   t   e   m   I   n   C   e   l   l   .   x   1
0115720    ,  \r                                   x   2   :       c   e
0115740    l   l   I   n   s   t   P   o   s   .   x   +   i   t   e   m
0115760    I   n   C   e   l   l   .   x   2   ,  \r                    
0116000                y   1   :       c   e   l   l   I   n   s   t   P
0116020    o   s   .   y   +   i   t   e   m   I   n   C   e   l   l   .
0116040    y   1   ,  \r                                   y   2   :    
0116060    c   e   l   l   I   n   s   t   P   o   s   .   y   +   i   t
0116100    e   m   I   n   C   e   l   l   .   y   2   ]   ]   ;  \r    
0116120                                -   -       m   o   s   t       c
0116140    o   m   m   o   n       c   a   s   e  \r                   [
0116160    x   :       s   i   z   e   X   ,       y   :       s   i   z
0116200    e   Y   ]       _       c   e   l   l   S   i   z   e   ;  \r
0116220                    [   x   1   :       x   1   ,       x   2   :
0116240        x   2   ,       y   1   :       y   1   ,       y   2   :
0116260        y   2   ]       _       i   t   e   m   I   n   C   e 376
0116300  001  \0 177 250   l   l   ;  \r  \r                   S   E   L
0116320    E   C   T       B   I   T   A   N   D   [   c   e   l   l   I
0116340    n   s   t   O   r   i   e   n   t   ,       1   4   B   ]    
0116360    F   R   O   M  \r                           0       =   >    
0116400    N   U   L   L   ;  \r                           4       =   >
0116420        -   -       9   0       d   e   g   r   e   e   s       c
0116440    l   o   c   k   w   i   s   e  \r                            
0116460        B   E   G   I   N  \r                                   t
0116500        _       y   1   ;  \r                                   y
0116520    1       _       x   1   ;  \r                                
0116540    x   1       _       s   i   z   e   Y   -   y   2   ;  \r    
0116560                                y   2       _       x   2   ;  \r
0116600                                    x   2       _       s   i   z
0116620    e   Y   -   t   ;  \r                                   s   i
0116640    z   e   X       _       s   i   z   e   Y   ;  \r            
0116660                        E   N   D   ;  \r                        
0116700    1   0   B     376 001  \0   : 235   =   >       -   -       1
0116720    8   0       d   e   g   r   e   e   s       c   l   o   c   k
0116740    w   i   s   e  \r                                   B   E   G
0116760    I   N  \r                                   t       _       s
0117000    i   z   e   X   -   x   1   ;       x   1       _       s   i
0117020    z   e   X   -   x   2   ;       x   2       _       t   ;  \r
0117040                                    t       _       s   i   z   e
0117060    Y   -   y   1   ;       y   1       _       s   i   z   e   Y
0117100    -   y   2   ;       y   2       _       t   ;  \r            
0117120                        E   N   D   ;  \r                        
0117140    1   4   B       =   >       -   -       2   7   0       d   e
0117160    g   r   e   e   s       c   l   o   c   k   w   i   s   e  \r
0117200                                    B   E   G   I   N  \r        
0117220                            t       _       x   1   ;  \r        
0117240                            x   1       _       y   1   ;  \r    
0117260                                y   1       _       s   i   z   e
0117300    X   -   x   2   ;  \r             376 001  \0 206   \        
0117320                x   2       _       y   2   ;  \r                
0117340                    y   2       _       s   i   z   e   X   -   t
0117360    ;  \r                                   s   i   z   e   X    
0117400    _       s   i   z   e   Y   ;  \r                            
0117420        E   N   D   ;  \r                           E   N   D   C
0117440    A   S   E   ;  \r  \r                   I   F       B   I   T
0117460    A   N   D   [   c   e   l   l   I   n   s   t   O   r   i   e
0117500    n   t   ,       1   ]   #   0       T   H   E   N       -   -
0117520        m   i   r   r   o   r       i   n       x  \r            
0117540                {   t       _       s   i   z   e   X   -   x   1
0117560    ;       x   1       _       s   i   z   e   X   -   x   2   ;
0117600        x   2       _       t   }   ;  \r  \r                   i
0117620    t   e   m   I   n   W   o   r   l   d       _       [   x   1
0117640    :       c   e   l   l   I   n   s   t   P   o   s   .   x   +
0117660    x   1   ,       -   -       t   r   a   n   s   l   a   t   e
0117700        b   y       c   e   l   l   I   n   s   t   P   o 376 001
0117720   \0 345 251   s  \r                           y   1   :       c
0117740    e   l   l   I   n   s   t   P   o   s   .   y   +   y   1   ,
0117760        x   2   :       c   e   l   l   I   n   s   t   P   o   s
0120000    .   x   +   x   2   ,  \r                           y   2   :
0120020        c   e   l   l   I   n   s   t   P   o   s   .   y   +   y
0120040    2   ]   ;  \r                   E   N   D   ;  \r  \r  \r    
0120060        D   e   M   a   p   R   e   c   t   :       P   U   B   L
0120100    I   C       P   R   O   C       [   i   t   e   m   I   n   W
0120120    o   r   l   d   :       R   e   c   t   ,       c   e   l   l
0120140    S   i   z   e   :       P   o   i   n   t   ,  \r            
0120160        c   e   l   l   I   n   s   t   O   r   i   e   n   t   :
0120200        o   r   i   e   n   t   a   t   i   o   n   I   n   d   e
0120220    x   ,       c   e   l   l   I   n   s   t   P   o   s   :    
0120240    P   o   i   n   t       _       [   0   ,   0   ]   ]  \r    
0120260                R   E   T   U   R   N   S       [   i   t   e   m
0120300    I   n   C   e   l   l   :       R   e   c   t   ]       =  \r
0120320              376 001  \0 325 251       B   E   G   I   N       O
0120340    P   E   N       I   n   l   i   n   e   D   e   f   s   ;  \r
0120360   \r                   -   -       G   i   v   e   n       a   n
0120400        i   t   e   m       i   n       w   o   r   l   d       c
0120420    o   -   o   r   d   i   n   a   t   e   s   ,       a   n   d
0120440        t   h   e  \r                   -   -       s   i   z   e
0120460        o   f       a       p   r   o   t   o   t   y   p   e    
0120500    c   e   l   l   ,       b   o   t   h       i   n       "   c
0120520    e   l   l   "       c   o   -   o   r   d   i   n   a   t   e
0120540    s   ,       a   n   d  \r                   -   -       t   h
0120560    e       p   o   s   i   t   i   o   n       a   n   d       o
0120600    r   i   e   n   t   a   t   i   o   n       i   n   d   e   x
0120620        o   f       a   n       i   n   s   t   a   n   c   e    
0120640    o   f       t   h   a   t       c   e   l   l       i   n    
0120660    "   w   o   r   l   d   "  \r                   -   -       c
0120700    o   -   o   r   d   i   n   a   t   e   s   ,       t   h   i
0120720    s       p   r   o   c   e   d 376 001  \0 024 356   u   r   e
0120740        r   e   t   u   r   n   s       t   h   e       c   e   l
0120760    l       p   r   o   t   o   t   y   p   e  \r                
0121000    -   -       c   o   -   o   r   d   i   n   a   t   e   s    
0121020    o   f       t   h   a   t       i   t   e   m   .  \r  \r    
0121040                i   n   v   e   r   s   e   O   r   i   e   n   t
0121060    :       o   r   i   e   n   t   a   t   i   o   n   I   n   d
0121100    e   x       =       I   n   v   e   r   s   e   O   r   i   e
0121120    n   t   [   c   e   l   l   I   n   s   t   O   r   i   e   n
0121140    t   ]   ;  \r                   i   t   e   m   I   n   C   e
0121160    l   l       _       M   a   p   R   e   c   t   [  \r        
0121200                    i   t   e   m   I   n   C   e   l   l   :    
0121220    [   x   1   :       i   t   e   m   I   n   W   o   r   l   d
0121240    .   x   1   -   c   e   l   l   I   n   s   t   P   o   s   .
0121260    x   ,       y   1   :       i   t   e   m   I   n   W   o   r
0121300    l   d   .   y   1   -   c   e   l   l   I   n   s   t   P   o
0121320    s   .   y   ,  \r                                 376 001  \0
0121340  354   _                   x   2   :       i   t   e   m   I   n
0121360    W   o   r   l   d   .   x   2   -   c   e   l   l   I   n   s
0121400    t   P   o   s   .   x   ,       y   2   :       i   t   e   m
0121420    I   n   W   o   r   l   d   .   y   2   -   c   e   l   l   I
0121440    n   s   t   P   o   s   .   y   ]   ,  \r                    
0121460        c   e   l   l   I   n   s   t   O   r   i   e   n   t   :
0121500        i   n   v   e   r   s   e   O   r   i   e   n   t   ,  \r
0121520                            c   e   l   l   S   i   z   e   :    
0121540    S   i   z   e   [   s   i   z   e   :       c   e   l   l   S
0121560    i   z   e   ,       o   r   i   e   n   t   :       i   n   v
0121600    e   r   s   e   O   r   i   e   n   t   ]   ]   ;  \r        
0121620            E   N   D   ;  \r  \r  \r           C   o   m   p   o
0121640    s   e   O   r   i   e   n   t   :       P   U   B   L   I   C
0121660        P   R   O   C       [  \r                   i   t   e   m
0121700    O   r   i   e   n   t   I   n   C   e   l   l   ,       c   e
0121720    l   l   O   r   i   e   n   t   I   n   W   o   r   l   d   :
0121740        o 376 001  \0 253 215   r   i   e   n   t   a   t   i   o
0121760    n   I   n   d   e   x   ]  \r                   R   E   T   U
0122000    R   N   S       [   i   t   e   m   O   r   i   e   n   t   I
0122020    n   W   o   r   l   d   :       o   r   i   e   n   t   a   t
0122040    i   o   n   I   n   d   e   x   ]       =  \r                
0122060    B   E   G   I   N       O   P   E   N       I   n   l   i   n
0122100    e   D   e   f   s   ;  \r  \r                   -   -       T
0122120    h   i   s       p   r   o   c   e   d   u   r   e       p   r
0122140    o   d   u   c   e   s       t   h   e       c   o   m   p   o
0122160    s   i   t   e       o   r   i   e   n   t   a   t   i   o   n
0122200   \r                   -   -       o   b   t   a   i   n   e   d
0122220        b   y       f   i   r   s   t       d   o   i   n   g    
0122240    i   t   e   m   O   r   i   e   n   t   I   n   C   e   l   l
0122260        a   n   d       t   h   e   n  \r                   -   -
0122300        d   o   i   n   g       c   e   l   l   O   r   i   e   n
0122320    t   I   n   W   o   r   l   d   .           I   t       u   s
0122340    e   s       t   h   e     376 001  \0   @ 312   o   b   s   e
0122360    r   v   a   t   i   o   n  \r                   -   -       t
0122400    h   a   t       a       r   e   f   l   e   c   t   i   o   n
0122420        i   n       x       f   o   l   l   o   w   e   d       b
0122440    y       a       z   -   d   e   g   r   e   e       c   l   o
0122460    c   k   w   i   s   e  \r                   -   -       r   o
0122500    t   a   t   i   o   n       i   s       t   h   e       s   a
0122520    m   e       a   s       a       (   3   6   0   -   z   )   -
0122540    d   e   g   r   e   e       c   l   o   c   k   w   i   s   e
0122560        r   o   t   a   t   i   o   n  \r                   -   -
0122600        f   o   l   l   o   w   e   d       b   y       a       r
0122620    e   f   l   e   c   t   i   o   n       i   n       x   .    
0122640        T   h   u   s       i   f       i   t   e   m   O   r   i
0122660    e   n   t   I   n   C   e   l   l  \r                   -   -
0122700        c   o   n   t   a   i   n   s       a       f   i   n   a
0122720    l       r   e   f   l   e   c   t   i   o   n   ,       t   h
0122740    e   n       c   e   l   l   O   r   i   e   n 376 001  \0   =
0122760  037   t   I   n   W   o   r   l   d   '   s       r   o   t   a
0123000    t   i   o   n  \r                   -   -       o   p   e   r
0123020    a   t   e   s       i   n       r   e   v   e   r   s   e   .
0123040   \r  \r                   r   e   f   l   1   :       [   0   .
0123060    .   1   ]       _       B   I   T   A   N   D   [   i   t   e
0123100    m   O   r   i   e   n   t   I   n   C   e   l   l   ,       1
0123120    ]   ;  \r                   r   o   t   2   :       [   0   .
0123140    .   1   4   ]       _       B   I   T   A   N   D   [   c   e
0123160    l   l   O   r   i   e   n   t   I   n   W   o   r   l   d   ,
0123200        1   4   ]   ;  \r                   I   F       r   e   f
0123220    l   1   #   0       A   N   D       r   o   t   2   #   0    
0123240    T   H   E   N       r   o   t   2       _       1   6   -   r
0123260    o   t   2   ;  \r                   i   t   e   m   O   r   i
0123300    e   n   t   I   n   W   o   r   l   d       _       B   I   T
0123320    A   N   D   [   B   I   T   A   N   D   [   i   t   e   m   O
0123340    r   i   e   n   t   I   n   C   e   l   l   ,       1   4   ]
0123360    + 376 001  \0   = 313  \r                           r   o   t
0123400    2   +   B   I   T   X   O   R   [   r   e   f   l   1   ,    
0123420    B   I   T   A   N   D   [   c   e   l   l   O   r   i   e   n
0123440    t   I   n   W   o   r   l   d   ,       1   ]   ]   ,       1
0123460    5   ]   ;  \r                   E   N   D   ;  \r  \r  \r    
0123500        I   n   v   e   r   s   e   O   r   i   e   n   t   :    
0123520    P   U   B   L   I   C       P   R   O   C       [   o   r   i
0123540    e   n   t   :       o   r   i   e   n   t   a   t   i   o   n
0123560    I   n   d   e   x   ]  \r                   R   E   T   U   R
0123600    N   S       [   i   n   v   e   r   s   e   :       o   r   i
0123620    e   n   t   a   t   i   o   n   I   n   d   e   x   ]       =
0123640   \r                   B   E   G   I   N       O   P   E   N    
0123660    I   n   l   i   n   e   D   e   f   s   ;  \r  \r            
0123700        -   -       F   o   r       a   l   l       o   r   i   e
0123720    n   t   a   t   i   o   n   I   n   d   e   x   e   s       o
0123740    1   ,       C   o   m   p   o   s   e   O   r   i   e   n   t
0123760    [   o   1   ,       I 376 001  \0 266   s   n   v   e   r   s
0124000    e   O   r   i   e   n   t   [   o   1   ]   ]       =       0
0124020    .  \r  \r                   -   -       A       r   e   f   l
0124040    e   c   t   i   o   n       i   n       x       f   o   l   l
0124060    o   w   e   d       b   y       a       z   -   d   e   g   r
0124100    e   e       c   l   o   c   k   w   i   s   e  \r            
0124120        -   -       r   o   t   a   t   i   o   n       i   s    
0124140    t   h   e       s   a   m   e       a   s       a       (   3
0124160    6   0   -   z   )   -   d   e   g   r   e   e       c   l   o
0124200    c   k   w   i   s   e       r   o   t   a   t   i   o   n  \r
0124220                    -   -       f   o   l   l   o   w   e   d    
0124240    b   y       a       r   e   f   l   e   c   t   i   o   n    
0124260    i   n       x   .           T   h   u   s       i   f       o
0124300    r   i   e   n   t  \r                   -   -       c   o   n
0124320    t   a   i   n   s       a       f   i   n   a   l       r   e
0124340    f   l   e   c   t   i   o   n   ,       t   h   e   n       t
0124360    h   e       i   n   v   e   r   s   e     376 001  \0  \0 362
0124400    r   o   t   a   t   i   o   n  \r                   -   -    
0124420    o   p   e   r   a   t   e   s       i   n       t   h   e    
0124440    s   a   m   e       d   i   r   e   c   t   i   o   n       a
0124460    s       t   h   e       f   o   r   w   a   r   d       o   n
0124500    e   .  \r  \r                   r   e   f   l   :       [   0
0124520    .   .   1   ]       _       B   I   T   A   N   D   [   o   r
0124540    i   e   n   t   ,       1   ]   ;  \r                   r   o
0124560    t   :       [   0   .   .   1   4   ]       _       B   I   T
0124600    A   N   D   [   o   r   i   e   n   t   ,       1   4   ]   ;
0124620   \r                   I   F       r   e   f   l   =   0       A
0124640    N   D       r   o   t   #   0       T   H   E   N       r   o
0124660    t       _       1   6   -   r   o   t   ;  \r                
0124700    i   n   v   e   r   s   e       _       r   o   t   +   r   e
0124720    f   l   ;  \r                   E   N   D   ;  \r  \r  \r    
0124740        D   e   c   o   m   p   o   s   e   O   r   i   e   n   t
0124760    :       P   U   B   L   I   C       P   R   O   C       [  \r
0125000  376 001  \0 203 327                   i   t   e   m   O   r   i
0125020    e   n   t   I   n   W   o   r   l   d   ,       c   e   l   l
0125040    O   r   i   e   n   t   I   n   W   o   r   l   d   :       o
0125060    r   i   e   n   t   a   t   i   o   n   I   n   d   e   x   ]
0125100   \r                   R   E   T   U   R   N   S       [   i   t
0125120    e   m   O   r   i   e   n   t   I   n   C   e   l   l   :    
0125140    o   r   i   e   n   t   a   t   i   o   n   I   n   d   e   x
0125160    ]       =  \r                   B   E   G   I   N  \r  \r    
0125200                -   -       F   o   r       a   l   l       o   r
0125220    i   e   n   t   a   t   i   o   n   I   n   d   e   x   e   s
0125240        o   1       a   n   d       o   2   ,  \r                
0125260    -   -       D   e   c   o   m   p   o   s   e   O   r   i   e
0125300    n   t   [   c   e   l   l   O   r   i   e   n   t   I   n   W
0125320    o   r   l   d   :       o   1   ,       i   t   e   m   O   r
0125340    i   e   n   t   I   n   W   o   r   l   d   :  \r            
0125360        -   -               C   o   m   p   o   s   e   O   r   i
0125400    e   n   t   [   c 376 001  \0 230 201   e   l   l   O   r   i
0125420    e   n   t   I   n   W   o   r   l   d   :       o   1   ,    
0125440    i   t   e   m   O   r   i   e   n   t   I   n   C   e   l   l
0125460    :       o   2   ]   ]       =       o   2   .  \r  \r        
0125500            R   E   T   U   R   N   [   C   o   m   p   o   s   e
0125520    O   r   i   e   n   t   [   i   t   e   m   O   r   i   e   n
0125540    t   I   n   C   e   l   l   :       i   t   e   m   O   r   i
0125560    e   n   t   I   n   W   o   r   l   d   ,  \r                
0125600            c   e   l   l   O   r   i   e   n   t   I   n   W   o
0125620    r   l   d   :       I   n   v   e   r   s   e   O   r   i   e
0125640    n   t   [   c   e   l   l   O   r   i   e   n   t   I   n   W
0125660    o   r   l   d   ]   ]   ]   ;  \r                   E   N   D
0125700    ;  \r  \r  \r           R   e   f   P   t   :       P   U   B
0125720    L   I   C       P   R   O   C       [   r   :       R   e   c
0125740    t   ]       R   E   T   U   R   N   S       [   P   o   i   n
0125760    t   ]       =  \r                   {   R   E   T   U   R   N
0126000    [   [   x   :       (   (   r   .   x 376 001  \0 216 362   1
0126020    +   r   .   x   2   )   /   (   2   *   L   a   m   b   d   a
0126040    )   )   *   L   a   m   b   d   a   ,  \r                    
0126060        y   :       (   (   r   .   y   1   +   r   .   y   2   )
0126100    /   (   2   *   L   a   m   b   d   a   )   )   *   L   a   m
0126120    b   d   a   ]   ]   }   ;  \r  \r  \r           N   o   r   m
0126140    a   l   i   z   e   L   i   s   t   :       P   U   B   L   I
0126160    C       P   R   O   C       [   l   p   :       l   i   s   t
0126200    P   t   r   ,  \r                   o   r   i   g   i   n   :
0126220        P   o   i   n   t       _       [   0   ,   0   ]   ]    
0126240    R   E   T   U   R   N   S       [   s   i   z   e   ,       o
0126260    f   f   s   e   t   :       P   o   i   n   t   ]       =  \r
0126300                    B   E   G   I   N  \r                   r   :
0126320        R   e   c   t       _       B   o   u   n   d   i   n   g
0126340    R   e   c   t   [   l   p   ]   ;  \r                   o   f
0126360    f   s   e   t       _       [   x   :       o   r   i   g   i
0126400    n   .   x   -   r   .   x   1   ,       y   :       o   r 376
0126420  001  \0   D   2   i   g   i   n   .   y   -   r   .   y   1   ]
0126440    ;  \r                   s   i   z   e       _       [   x   :
0126460        r   .   x   2   -   r   .   x   1   ,       y   :       r
0126500    .   y   2   -   r   .   y   1   ]   ;  \r                   F
0126520    O   R       l   p   p   :       l   i   s   t   P   t   r    
0126540    _       l   p   ,       l   p   p   .   n   x   t       W   H
0126560    I   L   E       l   p   p   #   N   I   L       D   O  \r    
0126600                        l   p   p   .   l   x       _       l   p
0126620    p   .   l   x   +   o   f   f   s   e   t   .   x   ;  \r    
0126640                        l   p   p   .   l   y       _       l   p
0126660    p   .   l   y   +   o   f   f   s   e   t   .   y   ;  \r    
0126700                        E   N   D   L   O   O   P   ;  \r        
0126720            E   N   D   ;  \r  \r  \r           B   o   u   n   d
0126740    i   n   g   R   e   c   t   :       P   U   B   L   I   C    
0126760    P   R   O   C       [   l   p   :       l   i   s   t   P   t
0127000    r   ]  \r                   R   E   T   U   R   N   S       [
0127020    r   :       R 376 001  \0   F 236   e   c   t   ]       =  \r
0127040                    B   E   G   I   N  \r                   x   1
0127060    ,       y   1   ,       x   2   ,       y   2   :       l   o
0127100    c   N   u   m   ;  \r                   [   m   i   x   :    
0127120    x   1   ,       m   i   y   :       y   1   ,       m   a   x
0127140    :       x   2   ,       m   a   y   :       y   2   ]       _
0127160        m   i   n   m   a   x   [   l   p   ]   ;  \r            
0127200        r       _       [   x   1   :       x   1   ,       y   1
0127220    :       y   1   ,       x   2   :       x   2   ,       y   2
0127240    :       y   2   ]   ;  \r                   E   N   D   ;  \r
0127260   \r  \r           D   e   c   o   m   p   o   s   e   R   e   c
0127300    t   :       P   U   B   L   I   C       P   R   O   C       [
0127320    r   ,       t   e   s   t   :       R   e   c   t   ,       r
0127340    I   n   s   i   d   e   T   e   s   t   ,       r   O   u   t
0127360    s   i   d   e   T   e   s   t   :       P   R   O   C   [   R
0127400    e   c   t   ]   ]       =  \r                   B   E   G   I
0127420    N  \r                   I   F     376 001  \0   #       r   .
0127440    x   1   <   t   e   s   t   .   x   1       T   H   E   N  \r
0127460                            B   E   G   I   N  \r                
0127500            r   O   u   t   s   i   d   e   T   e   s   t   [   [
0127520    x   1   :       r   .   x   1   ,       y   1   :       r   .
0127540    y   1   ,       x   2   :       M   I   N   [   r   .   x   2
0127560    ,       t   e   s   t   .   x   1   ]   ,       y   2   :    
0127600    r   .   y   2   ]   ]   ;  \r                           I   F
0127620        r   .   x   2   <   t   e   s   t   .   x   1       T   H
0127640    E   N       R   E   T   U   R   N   ;  \r                    
0127660        E   N   D   ;  \r                   I   F       r   .   y
0127700    1   <   t   e   s   t   .   y   1       T   H   E   N  \r    
0127720                        B   E   G   I   N  \r                    
0127740        r   O   u   t   s   i   d   e   T   e   s   t   [   [   x
0127760    1   :       M   A   X   [   t   e   s   t   .   x   1   ,    
0130000    r   .   x   1   ]   ,       y   1   :       r   .   y   1   ,
0130020        x   2   :       r   .   x   2   ,       y   2   : 376 001
0130040   \0   G   /       M   I   N   [   r   .   y   2   ,       t   e
0130060    s   t   .   y   1   ]   ]   ]   ;  \r                        
0130100    I   F       r   .   y   2   <   t   e   s   t   .   y   1    
0130120    T   H   E   N       R   E   T   U   R   N   ;  \r            
0130140                E   N   D   ;  \r                   I   F       t
0130160    e   s   t   .   y   2   <   r   .   y   2       T   H   E   N
0130200   \r                           B   E   G   I   N  \r            
0130220                r   O   u   t   s   i   d   e   T   e   s   t   [
0130240    [   x   1   :       M   A   X   [   t   e   s   t   .   x   1
0130260    ,       r   .   x   1   ]   ,       y   1   :       M   A   X
0130300    [   t   e   s   t   .   y   2   ,       r   .   y   1   ]   ,
0130320        x   2   :       r   .   x   2   ,  \r                    
0130340                y   2   :       r   .   y   2   ]   ]   ;  \r    
0130360                        I   F       t   e   s   t   .   y   2   <
0130400    r   .   y   1       T   H   E   N       R   E   T   U   R   N
0130420    ;  \r                           E   N   D   ;  \r            
0130440        I   F 376 001  \0   S 233       t   e   s   t   .   x   2
0130460    <   r   .   x   2       T   H   E   N  \r                    
0130500        B   E   G   I   N  \r                           r   O   u
0130520    t   s   i   d   e   T   e   s   t   [   [   x   1   :       M
0130540    A   X   [   t   e   s   t   .   x   2   ,       r   .   x   1
0130560    ]   ,       y   1   :       M   A   X   [   t   e   s   t   .
0130600    y   1   ,       r   .   y   1   ]   ,       x   2   :       r
0130620    .   x   2   ,  \r                                   y   2   :
0130640        M   I   N   [   r   .   y   2   ,       t   e   s   t   .
0130660    y   2   ]   ]   ]   ;  \r                           I   F    
0130700    t   e   s   t   .   x   2   <   r   .   x   1       T   H   E
0130720    N       R   E   T   U   R   N   ;  \r                        
0130740    E   N   D   ;  \r                   r   I   n   s   i   d   e
0130760    T   e   s   t   [   [   x   1   :       M   A   X   [   t   e
0131000    s   t   .   x   1   ,       r   .   x   1   ]   ,       y   1
0131020    :       M   A   X   [   t   e   s   t   .   y   1   ,       r
0131040    .   y   1   ]   ,  \r         376 001  \0 226   r            
0131060        x   2   :       M   I   N   [   t   e   s   t   .   x   2
0131100    ,       r   .   x   2   ]   ,       y   2   :       M   I   N
0131120    [   t   e   s   t   .   y   2   ,       r   .   y   2   ]   ]
0131140    ]   ;  \r                   E   N   D   ;  \r  \r  \r        
0131160    -   -       C   e   r   t   i   f   i   c   a   t   i   o   n
0131200        t   e   s   t   s   ,       c   a   n       b   e       c
0131220    o   m   m   e   n   t   e   d       o   u   t       f   o   r
0131240        s   p   e   e   d       o   f       s   t   a   r   t   u
0131260    p  \r  \r   -   -           F   O   R       o   1   :       o
0131300    r   i   e   n   t   a   t   i   o   n   I   n   d   e   x    
0131320    I   N       o   r   i   e   n   t   a   t   i   o   n   I   n
0131340    d   e   x       D   O  \r   -   -                   I   F    
0131360    C   o   m   p   o   s   e   O   r   i   e   n   t   [   o   1
0131400    ,       I   n   v   e   r   s   e   O   r   i   e   n   t   [
0131420    o   1   ]   ]       #       0       T   H   E   N       E   R
0131440    R   O   R   ;  \r   -   -                   F   O 376 001  \0
0131460    G 232   R       o   2   :       o   r   i   e   n   t   a   t
0131500    i   o   n   I   n   d   e   x       I   N       o   r   i   e
0131520    n   t   a   t   i   o   n   I   n   d   e   x       D   O  \r
0131540    -   -                           I   F       D   e   c   o   m
0131560    p   o   s   e   O   r   i   e   n   t   [   c   e   l   l   O
0131600    r   i   e   n   t   I   n   W   o   r   l   d   :       o   1
0131620    ,       i   t   e   m   O   r   i   e   n   t   I   n   W   o
0131640    r   l   d   :  \r   -   -                                   C
0131660    o   m   p   o   s   e   O   r   i   e   n   t   [   c   e   l
0131700    l   O   r   i   e   n   t   I   n   W   o   r   l   d   :    
0131720    o   1   ,       i   t   e   m   O   r   i   e   n   t   I   n
0131740    C   e   l   l   :       o   2   ]   ]       #       o   2    
0131760    T   H   E   N       E   R   R   O   R   ;  \r   -   -        
0132000                    E   N   D   L   O   O   P   ;  \r   -   -    
0132020                E   N   D   L   O   O   P   ;  \r  \r           E
0132040    N   D   .       -   -       o   f       C   h   i   p   O   r
0132060    i   e 376  \0  \a   (   T   n   t   I   m   p   l  \r 377  \0
0132100   \0   c   h   i   p   u   s   e   r   i   n   t   i   m   p   l
0132120    .   m   e   s   a  \0 373 232 225  \v 202  \0  \0 376 001  \0
0132140  016 233   -   -       C   h   i   p   U   s   e   r   I   n   t
0132160    I   m   p   l   .   m   e   s   a  \r   -   -       a       p
0132200    r   o   g   r   a   m       t   o       r   u   n       w   i
0132220    t   h   i   n       C   h   i   p   m   o   n   k  \r  \r   -
0132240    -       l   a   s   t       m   o   d   i   f   i   e   d    
0132260    b   y       E   .       M   c   C   r   e   i   g   h   t   ,
0132300        M   a   r   c   h       8   ,       1   9   8   3        
0132320    1   :   1   7       P   M  \r   -   -       w   r   i   t   t
0132340    e   n       b   y       E   .       M   c   C   r   e   i   g
0132360    h   t   ,       A   u   g   u   s   t       7   ,       1   9
0132400    8   1           3   :   5   2       P   M  \r  \r   D   I   R
0132420    E   C   T   O   R   Y  \r           C   h   i   p   U   s   e
0132440    r   I   n   t   ,  \r           I   n   l   i   n   e   D   e
0132460    f   s   ,  \r           M   i   s   c   D   e   f   s   ,  \r
0132500            m   u   l   t   i   G   r   a   p   h   i   c   s   D
0132520    e   f   s   ,  \r           p   p   d   d   d   e   f   s   ,
0132540   \r     376 001  \0 256 330       p   p   d   d   e   f   s   ,
0132560   \r           p   p   d   e   f   s   ,  \r           P   r   o
0132600    c   e   s   s   D   e   f   s   ,  \r           S   e   g   m
0132620    e   n   t   D   e   f   s   ,  \r           S   t   r   i   n
0132640    g   D   e   f   s   ;  \r  \r   C   h   i   p   U   s   e   r
0132660    I   n   t   I   m   p   l   :       M   O   N   I   T   O   R
0132700   \r           I   M   P   O   R   T   S       I   n   l   i   n
0132720    e   D   e   f   s   ,       M   i   s   c   D   e   f   s   ,
0132740        m   u   l   t   i   G   r   a   p   h   i   c   s   D   e
0132760    f   s   ,  \r           p   p   d   d   d   e   f   s   ,    
0133000    p   p   d   d   e   f   s   ,       p   p   d   e   f   s   ,
0133020        P   r   o   c   e   s   s   D   e   f   s   ,       S   e
0133040    g   m   e   n   t   D   e   f   s   ,  \r           S   t   r
0133060    i   n   g   D   e   f   s  \r           E   X   P   O   R   T
0133100    S       C   h   i   p   U   s   e   r   I   n   t       =  \r
0133120            B   E   G   I   N       O   P   E   N       p   p   d
0133140    d   d   e   f   s   ,     376 001  \0   { 310   p   p   d   d
0133160    e   f   s   ,       p   p   d   e   f   s   ;  \r  \r        
0133200    D   E   L   :       C   H   A   R   A   C   T   E   R       =
0133220        1   7   7   C   ;  \r           E   S   C   :       C   H
0133240    A   R   A   C   T   E   R       =       0   3   3   C   ;  \r
0133260            C   R   :       C   H   A   R   A   C   T   E   R    
0133300    =       0   1   5   C   ;  \r           L   F   :       C   H
0133320    A   R   A   C   T   E   R       =       0   1   2   C   ;  \r
0133340            B   S   :       C   H   A   R   A   C   T   E   R    
0133360    =       0   1   0   C   ;  \r  \r           U   N   D   O   :
0133400        C   H   A   R   A   C   T   E   R       =       2   0   0
0133420    C   ;  \r           D   E   B   U   G   :       C   H   A   R
0133440    A   C   T   E   R       =       2   0   1   C   ;  \r        
0133460    O   T   H   E   R   :       C   H   A   R   A   C   T   E   R
0133500        =       0   0   7   C   ;       -   -       A   s   c   i
0133520    i       B   E   L  \r  \r           P   u   n   t   :       P
0133540    U   B   L   I   C       S   I   G   N   A   L 376 001  \0   2
0133560  035       =       C   O   D   E   ;  \r  \r           E   x   p
0133600    l   a   i   n   :       P   U   B   L   I   C       P   R   O
0133620    C   E   D   U   R   E       [   w   h   a   t   ,       w   h
0133640    y   ,       e   x   p   l   a   n   a   t   i   o   n   :    
0133660    L   O   N   G       S   T   R   I   N   G       _       N   I
0133700    L   ]       =  \r                   B   E   G   I   N  \r    
0133720                F   r   e   e   S   t   r   i   n   g   [   R   e
0133740    q   u   e   s   t   S   t   r   i   n   g   [   w   h   a   t
0133760    ,       w   h   y   ,       e   x   p   l   a   n   a   t   i
0134000    o   n   ]   ]   ;  \r                   E   N   D   ;  \r  \r
0134020            F   i   x   E   x   t   e   n   s   i   o   n   :    
0134040    P   U   B   L   I   C       P   R   O   C   E   D   U   R   E
0134060        [   s   ,       e   x   t   :       S   T   R   I   N   G
0134100    ]       R   E   T   U   R   N   S       [   s   e   :       S
0134120    T   R   I   N   G   ]       =  \r                   B   E   G
0134140    I   N  \r                   l   a   s   t   P   e   r   i   o
0134160    d 376 001  \0 247 205   :       C   A   R   D   I   N   A   L
0134200        _       s   .   l   e   n   g   t   h   ;  \r            
0134220        F   O   R       i   :       C   A   R   D   I   N   A   L
0134240        I   N       [   0   .   .   s   .   l   e   n   g   t   h
0134260    )       D   O  \r                           I   F       s   [
0134300    i   ]       =       '   .       T   H   E   N       l   a   s
0134320    t   P   e   r   i   o   d       _       i       E   N   D   L
0134340    O   O   P   ;  \r                   s   e       _       G   e
0134360    t   S   t   r   i   n   g   [   l   a   s   t   P   e   r   i
0134400    o   d       +       e   x   t   .   l   e   n   g   t   h   ]
0134420    ;  \r                   F   O   R       i   :       C   A   R
0134440    D   I   N   A   L       I   N       [   0   .   .   l   a   s
0134460    t   P   e   r   i   o   d   )       D   O       s   e   [   i
0134500    ]       _       s   [   i   ]       E   N   D   L   O   O   P
0134520    ;  \r                   s   e   .   l   e   n   g   t   h    
0134540    _       l   a   s   t   P   e   r   i   o   d   ;  \r        
0134560            S   t   r   i 376 001  \0   v 276   n   g   D   e   f
0134600    s   .   A   p   p   e   n   d   S   t   r   i   n   g   [   t
0134620    o   :       s   e   ,       f   r   o   m   :       e   x   t
0134640    ]   ;  \r                   F   r   e   e   S   t   r   i   n
0134660    g   [   s   ]   ;  \r                   E   N   D   ;  \r  \r
0134700            R   e   q   u   e   s   t   S   t   r   i   n   g   :
0134720        P   U   B   L   I   C       P   R   O   C   E   D   U   R
0134740    E   [   s   1   ,       s   2   ,       s   3   :       L   O
0134760    N   G       S   T   R   I   N   G       _       N   I   L   ,
0135000   \r                   l   o   w   e   r   C   a   s   e   O   K
0135020    :       B   O   O   L   E   A   N       _       F   A   L   S
0135040    E   ,  \r                   f   l   a   s   h   C   o   l   o
0135060    r   :       B   O   O   L   E   A   N       _       T   R   U
0135100    E   ,  \r                   b   r   e   a   k   C   h   a   r
0135120    s   :       L   O   N   G       S   T   R   I   N   G       _
0135140        N   I   L   ,  \r                   a   p   p   e   n   d
0135160    B   r   e   a   k   C   h   a   r   :     376 001  \0 376 033
0135200    B   O   O   L   E   A   N       _       F   A   L   S   E   ,
0135220   \r                   i   n   i   t   R   e   s   u   l   t   :
0135240        L   O   N   G       S   T   R   I   N   G       _       N
0135260    I   L   ]  \r                   R   E   T   U   R   N   S   [
0135300    s   R   e   s   u   l   t   :       S   T   R   I   N   G   ]
0135320        =  \r                   B   E   G   I   N       O   P   E
0135340    N       m   u   l   t   i   G   r   a   p   h   i   c   s   D
0135360    e   f   s   ,       P   r   o   c   e   s   s   D   e   f   s
0135400    ;  \r                   s   :       S   T   R   I   N   G    
0135420    =       [   2   0   0   ]   ;  \r                   t   i   C
0135440    x   :       C   A   R   D   I   N   A   L       =       1   0
0135460    0   ;  \r                   t   i   C   y   :       C   A   R
0135500    D   I   N   A   L       =       b   w   M   s   g   T   o   p
0135520    +   4   ;  \r                   t   i   L   y   :       C   A
0135540    R   D   I   N   A   L       =       5   0   ;  \r            
0135560        r   e   f   r   e   s   h   P   r   o   m   p   t   :    
0135600  376 001  \0   9   0   B   O   O   L   E   A   N       _       T
0135620    R   U   E   ;  \r                   c   o   l   o   r   I   n
0135640    v   e   r   t   e   d   :       B   O   O   L   E   A   N    
0135660    _       F   A   L   S   E   ;  \r                   c   o   l
0135700    o   r   W   a   s   O   n   :       B   O   O   L   E   A   N
0135720        _       C   o   l   o   r   I   s   O   n   [   ]   ;  \r
0135740                    r   e   p   a   i   n   t   P   r   o   c   e
0135760    s   s   :       P   R   O   C   E   S   S   ;  \r            
0136000        d   o   R   e   p   a   i   n   t   ,       r   e   p   a
0136020    i   n   t   D   o   n   e   :       C   O   N   D   I   T   I
0136040    O   N   ;  \r                   t   f   b   :       R   e   c
0136060    t       =       [   t   i   C   x   -   3   ,       t   i   C
0136100    y   ,       7   0   0   ,       b   w   M   s   g   B   o   t
0136120    t   o   m   -   6   ]   ;  \r                           -   -
0136140        t   h   e       r   e   c   t   a   n   g   l   e       o
0136160    n       t   h   e       b   /   w       s   c   r   e   e   n
0136200        c   o   n   t 376 001  \0  \0 214   a   i   n   i   n   g
0136220        t   h   e       t   e   x   t       f   e   e   d   b   a
0136240    c   k       a   r   e   a  \r  \r                   R   e   p
0136260    a   i   n   t   T   e   x   t   :       E   N   T   R   Y    
0136300    P   R   O   C   E   D   U   R   E   [   ]       =  \r        
0136320                    B   E   G   I   N       E   N   A   B   L   E
0136340        A   B   O   R   T   E   D       =   >       G   O   T   O
0136360        S   t   o   p   R   e   p   a   i   n   t   i   n   g   ;
0136400   \r                           D   O  \r                        
0136420            W   A   I   T       d   o   R   e   p   a   i   n   t
0136440    ;  \r                                   I   F       r   e   f
0136460    r   e   s   h   P   r   o   m   p   t       T   H   E   N  \r
0136500                                            B   E   G   I   N  \r
0136520   \r                                           R   T   :       P
0136540    R   O   C       [   s   :       L   O   N   G       S   T   R
0136560    I   N   G   ,       d   e   l   t   a   :       I   N   T   E
0136600    G   E   R   ]       =  \r             376 001  \0       \    
0136620                                    B   E   G   I   N  \r        
0136640                                            s   s   :       S   T
0136660    R   I   N   G       =       [   2   0   0   ]   ;  \r        
0136700                                            C   o   p   y   S   t
0136720    r   i   n   g   [   f   r   o   m   :       s   ,       t   o
0136740    :       s   s   ]   ;  \r                                    
0136760                [   ]       _       R   e   p   l   a   c   e   T
0137000    e   x   t   [   s   s   ,       t   i   C   x   ,       b   w
0137020    M   s   g   T   o   p       +       d   e   l   t   a   ,    
0137040    f   n   t   ,       n   o   r   m   a   l   ]   ;  \r        
0137060                                            E   N   D   ;  \r  \r
0137100                                            E   r   a   s   e   A
0137120    r   e   a   [   t   f   b   .   x   1   ,       t   f   b   .
0137140    y   1   ,       t   f   b   .   x   2   ,       t   f   b   .
0137160    y   2   ]   ;  \r                                           R
0137200    T   [   s   1   ,       2   0   ]   ;  \r                 376
0137220  001  \0   7   _                           R   T   [   s   2   ,
0137240        3   0   ]   ;  \r                                        
0137260    R   T   [   s   3   ,       4   0   ]   ;  \r                
0137300                            d   r   a   w   S   t   r   i   n   g
0137320    [   s   ,       t   i   C   x   ,       b   w   M   s   g   T
0137340    o   p       +       5   0   ]   ;  \r                        
0137360                    I   F       c   o   l   o   r   I   n   v   e
0137400    r   t   e   d       O   R       (   f   l   a   s   h   C   o
0137420    l   o   r       A   N   D       s   .   l   e   n   g   t   h
0137440    =   0   )       T   H   E   N  \r                            
0137460                        S   e   t   C   o   l   o   r   P   a   r
0137500    i   t   y   [   i   n   v   e   r   t   :       N   O   T    
0137520    c   o   l   o   r   I   n   v   e   r   t   e   d   ]   ;  \r
0137540                                            E   N   D   ;  \r    
0137560                                N   O   T   I   F   Y       r   e
0137600    p   a   i   n   t   D   o   n   e   ;  \r                    
0137620                E 376 001  \0 222 223   N   D   L   O   O   P   ;
0137640   \r                           E   X   I   T   S       S   t   o
0137660    p   R   e   p   a   i   n   t   i   n   g       =   >       R
0137700    e   s   t   o   r   e   D   i   s   p   l   a   y   [   ]   ;
0137720   \r                           E   N   D   ;       -   -       o
0137740    f       R   e   p   a   i   n   t   T   e   x   t  \r  \r    
0137760                R   e   p   a   i   n   t   N   o   w   :       E
0140000    N   T   R   Y       P   R   O   C   E   D   U   R   E       =
0140020   \r                           B   E   G   I   N  \r            
0140040                r   e   f   r   e   s   h   P   r   o   m   p   t
0140060        _       T   R   U   E   ;  \r                           N
0140100    O   T   I   F   Y       d   o   R   e   p   a   i   n   t   ;
0140120   \r                           W   A   I   T       r   e   p   a
0140140    i   n   t   D   o   n   e   ;  \r                           E
0140160    N   D   ;  \r  \r                   L   o   a   n   S   c   r
0140200    e   e   n   :       E   N   T   R   Y       P   R   O   C   E
0140220    D   U   R   E       =  \r         376 001  \0 202 230        
0140240            B   E   G   I   N       O   P   E   N       P   r   o
0140260    c   e   s   s   D   e   f   s   ;  \r                        
0140300    R   e   s   t   o   r   e   D   i   s   p   l   a   y   [   ]
0140320    ;  \r                           E   N   D   ;  \r  \r        
0140340            R   e   s   t   o   r   e   D   i   s   p   l   a   y
0140360    :       I   N   T   E   R   N   A   L       P   R   O   C   E
0140400    D   U   R   E       =  \r                           B   E   G
0140420    I   N  \r                           r   e   f   r   e   s   h
0140440    P   r   o   m   p   t       _       F   A   L   S   E   ;  \r
0140460                            S   e   t   C   o   l   o   r   P   a
0140500    r   i   t   y   [   i   n   v   e   r   t   :       F   A   L
0140520    S   E   ]   ;  \r                           E   r   a   s   e
0140540    A   r   e   a   [   t   f   b   .   x   1   ,       t   f   b
0140560    .   y   1   ,       t   f   b   .   x   2   ,       t   f   b
0140600    .   y   2   ]   ;  \r                           E   N   D   ;
0140620   \r  \r                   S   e   t   C   o   l   o   r 376 001
0140640   \0   F   ;   P   a   r   i   t   y   :       I   N   T   E   R
0140660    N   A   L       P   R   O   C   E   D   U   R   E   [   i   n
0140700    v   e   r   t   :       B   O   O   L   E   A   N   ]       =
0140720   \r                           B   E   G   I   N  \r            
0140740                I   F       i   n   v   e   r   t   #   c   o   l
0140760    o   r   I   n   v   e   r   t   e   d       T   H   E   N  \r
0141000                                    B   E   G   I   N  \r        
0141020                            c   o   l   o   r   I   n   v   e   r
0141040    t   e   d       _       i   n   v   e   r   t   ;  \r        
0141060                            I   F       i   n   v   e   r   t    
0141100    T   H   E   N       i   n   v   e   r   t   C   o   l   o   r
0141120    s   [   ]       E   L   S   E       r   e   s   t   o   r   e
0141140    C   o   l   o   r   s   [   ]   ;  \r                        
0141160            E   N   D   ;  \r                           E   N   D
0141200    ;  \r  \r                   G   e   t   S   t   r   i   n   g
0141220    :       P   R   O   C   E   D   U   R   E   [   s   :       S
0141240    T   R   I 376 001  \0 323 372   N   G   ]       =  \r        
0141260                    B   E   G   I   N       O   P   E   N       I
0141300    n   l   i   n   e   D   e   f   s   ,       m   u   l   t   i
0141320    G   r   a   p   h   i   c   s   D   e   f   s   ,       S   t
0141340    r   i   n   g   D   e   f   s   ;  \r  \r                    
0141360        c   m   d   K   e   y   :       B   O   O   L   E   A   N
0141400        _       F   A   L   S   E   ;  \r  \r                    
0141420        C   h   e   c   k   K   e   y   :       k   e   C   h   e
0141440    c   k   P   r   o   c       =  \r                            
0141460        B   E   G   I   N  \r                                   I
0141500    F       B   I   T   A   N   D   [   k   .   c   t   l   ,    
0141520