ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     U
    e5dZH                    @   s4  d ddddddddd	d
dgZ ddlmZ ddlmZ eddZdd ZG dd dZ	d7dd Z
dd ZG dd dZddlZedjfddZd8ddZdd Zd9d"dZd#d$ Zd:d%dZd&d' Zd;d*d	Zdefd+dZddefd,d-Zd.Zd/Zd0Zd1ZG d2d
 d
eZ[d3d Z d4d5 Z!e"d6kr0e!  dS )<get_close_matchesndiffrestoreSequenceMatcherDifferIS_CHARACTER_JUNKIS_LINE_JUNKcontext_diffunified_diff
diff_bytesHtmlDiffMatch    )nlargest)
namedtupleza b sizec                 C   s   |rd|  | S dS )Ng       @      ? )matcheslengthr   r   /usr/lib64/python3.8/difflib.py_calculate_ratio&   s    r   c                   @   sp   e Zd ZdddZdd Zdd	 Zd
d Zdd Zdd Zdd Z	dd Z
dddZdd Zdd Zdd ZdS )r   N Tc                 C   s(   || _ d  | _| _|| _| || d S N)isjunkabautojunkset_seqs)selfr   r   r   r   r   r   r   __init__   s    ;zSequenceMatcher.__init__c                 C   s   |  | | | d S r   )set_seq1set_seq2)r   r   r   r   r   r   r      s    	
zSequenceMatcher.set_seqsc                 C   s$   || j krd S || _ d  | _| _d S r   )r   matching_blocksopcodes)r   r   r   r   r   r      s    
zSequenceMatcher.set_seq1c                 C   s2   || j krd S || _ d  | _| _d | _|   d S r   )r   r!   r"   
fullbcount_SequenceMatcher__chain_b)r   r   r   r   r   r       s    
zSequenceMatcher.set_seq2c                 C   s   | j }i  | _}t|D ]\}}||g }|| qt  | _}| j}|r~| D ]}||rV|	| qV|D ]
}||= qrt  | _
}t|}	| jr|	dkr|	d d }
| D ]\}}t||
kr|	| q|D ]
}||= qd S )N   d      )r   b2j	enumerate
setdefaultappendsetbjunkr   keysaddZbpopularlenr   items)r   r   r(   ieltindicesZjunkr   ZpopularnZntestZidxsr   r   r   Z	__chain_b)  s,    
zSequenceMatcher.__chain_bc                 C   s4  | j | j| j| jjf\}}}}||d  }	}
}i }g }t||D ]}|j}i }||| |D ]\}||k rlq^||krx q||d dd  }||< ||kr^|| d || d |  }	}
}q^|}q@|	|kr |
|kr |||
d  s ||	d  ||
d  kr |	d |
d |d   }	}
}q|	| |k rt|
| |k rt|||
|  st||	|  ||
|  krt|d7 }q |	|kr|
|kr|||
d  r||	d  ||
d  kr|	d |
d |d   }	}
}qt|	| |k r(|
| |k r(|||
|  r(||	|  ||
|  kr(|d }qt|	|
|S Nr   r'   )r   r   r(   r-   __contains__rangegetr   )r   aloahiblobhir   r   r(   ZisbjunkZbestiZbestjZbestsizeZj2lenZnothingr2   Zj2lengetZnewj2lenjkr   r   r   find_longest_matchP  sR    8"	 z"SequenceMatcher.find_longest_matchc                 C   s|  | j d k	r| j S t| jt| j }}d|d|fg}g }|r| \}}}}| |||| \}	}
}}|r8|| ||	k r||
k r|||	||
f |	| |k r8|
| |k r8||	| ||
| |f q8|  d } }}g }|D ]V\}}}|| |kr|| |kr||7 }q|r,||||f |||  }}}q|rT||||f |||df tt	t
j|| _ | j S Nr   )r!   r0   r   r   popr@   r+   sortlistmapr   _make)r   lalbZqueuer!   r:   r;   r<   r=   r2   r>   r?   xi1j1Zk1Znon_adjacenti2j2Zk2r   r   r   get_matching_blocks  s8    


z#SequenceMatcher.get_matching_blocksc                 C   s   | j d k	r| j S d }}g  | _ }|  D ]\}}}d}||k rN||k rNd}n||k r\d}n||k rhd}|r||||||f || ||  }}|r*|d||||f q*|S )Nr   r   replacedeleteinsertequal)r"   rN   r+   )r   r2   r>   Zansweraibjsizetagr   r   r   get_opcodes  s$    

zSequenceMatcher.get_opcodes   c           
      c   sn  |   }|sdg}|d d dkrZ|d \}}}}}|t||| |t||| |f|d< |d d dkr|d \}}}}}||t||| |t||| f|d< || }g }	|D ]\}}}}}|dkr(|| |kr(|	||t||| |t||| f |	V  g }	t||| t|||  }}|	|||||f q|	rjt|	dkrd|	d d dksj|	V  d S )N)rR   r   r'   r   r'   r   rR   r'   )rW   maxminr+   r0   )
r   r5   ZcodesrV   rJ   rL   rK   rM   Znngroupr   r   r   get_grouped_opcodes<  s(    &&(&z#SequenceMatcher.get_grouped_opcodesc                 C   s0   t dd |  D }t|t| jt| j S )Nc                 s   s   | ]}|d  V  qdS )rY   Nr   ).0Ztripler   r   r   	<genexpr>  s     z(SequenceMatcher.ratio.<locals>.<genexpr>)sumrN   r   r0   r   r   )r   r   r   r   r   ration  s    zSequenceMatcher.ratioc                 C   s   | j d kr4i  | _ }| jD ]}||dd ||< q| j }i }|jd }}| jD ]>}||rf|| }n||d}|d ||< |dkrP|d }qPt|t| jt| j S r6   )r#   r   r9   r7   r   r   r0   )r   r#   r3   ZavailZavailhasr   Znumbr   r   r   quick_ratio  s    






zSequenceMatcher.quick_ratioc                 C   s*   t | jt | j }}tt|||| S r   )r0   r   r   r   r[   )r   rG   rH   r   r   r   real_quick_ratio  s    z SequenceMatcher.real_quick_ratio)Nr   r   T)rX   )__name__
__module____qualname__r   r   r   r    r$   r@   rN   rW   r]   ra   rb   rc   r   r   r   r   r   +   s   l
@,'nG7
2rX   333333?c                 C   s   |dkst d|f d|  kr*dks:n t d|f g }t }||  |D ]D}|| | |krR| |krR| |krR|| |f qRt||}dd |D S )Nr   zn must be > 0: %rg        r   z cutoff must be in [0.0, 1.0]: %rc                 S   s   g | ]\}}|qS r   r   )r^   ZscorerI   r   r   r   
<listcomp>  s     z%get_close_matches.<locals>.<listcomp>)	
ValueErrorr   r    r   rc   rb   ra   r+   	_nlargest)ZwordZpossibilitiesr5   cutoffresultsrI   r   r   r   r     s"    




c                 C   s   d dd t| |D S )Nr   c                 s   s*   | ]"\}}|d kr|  r|n|V  qdS ) N)isspace)r^   cZtag_cr   r   r   r_     s   z$_keep_original_ws.<locals>.<genexpr>)joinzip)rm   Ztag_sr   r   r   _keep_original_ws  s    
rs   c                   @   sF   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dS )r   Nc                 C   s   || _ || _d S r   linejunkcharjunk)r   ru   rv   r   r   r   r   H  s    zDiffer.__init__c           
   	   c   s   t | j||}| D ]\}}}}}|dkrB| ||||||}	n\|dkr\| d|||}	nB|dkrv| d|||}	n(|dkr| d|||}	ntd|f |	E d H  qd S )	NrO   rP   -rQ   +rR   rn   unknown tag %r)r   ru   rW   _fancy_replace_dumpri   )
r   r   r   cruncherrV   r:   r;   r<   r=   gr   r   r   compare_  s    zDiffer.comparec                 c   s&   t ||D ]}d||| f V  q
d S )Nz%s %s)r8   )r   rV   rI   lohir2   r   r   r   r{     s    zDiffer._dumpc           
      c   sn   || || k r2|  d|||}|  d|||}n |  d|||}|  d|||}||fD ]}	|	E d H  qZd S )Nrx   rw   )r{   )
r   r   r:   r;   r   r<   r=   firstsecondr}   r   r   r   _plain_replace  s    zDiffer._plain_replacec                 c   s:  d\}}t | j}	d\}
}t||D ]}|| }|	| t||D ]j}|| }||krl|
d krD|| }
}qD|	| |	 |krD|	 |krD|	 |krD|	 ||  }}}qDq$||k r|
d kr| ||||||E d H  d S |
|d  }}}nd }
| 	||||||E d H  || ||  }}|
d kr
d }}|	
|| |	 D ]\}}}}}|| ||  }}|dkr|d| 7 }|d| 7 }nb|dkr|d| 7 }nJ|d	kr|d
| 7 }n2|dkr|d| 7 }|d| 7 }ntd|f qH| ||||E d H  n
d| V  | 	||d |||d |E d H  d S )N)gGz?g      ?)NNr   r   rO   ^rP   rw   rQ   rx   rR   rn   ry     r'   )r   rv   r8   r    r   rc   rb   ra   r   _fancy_helperr   rW   ri   _qformat)r   r   r:   r;   r   r<   r=   Z
best_ratiork   r|   ZeqiZeqjr>   rT   r2   rS   Zbest_iZbest_jZaeltZbeltatagsbtagsrV   Zai1Zai2Zbj1Zbj2rG   rH   r   r   r   rz     s\    











zDiffer._fancy_replacec                 c   sb   g }||k r<||k r*|  ||||||}qT| d|||}n||k rT| d|||}|E d H  d S )Nrw   rx   )rz   r{   )r   r   r:   r;   r   r<   r=   r}   r   r   r   r     s    zDiffer._fancy_helperc                 c   sX   t || }t || }d| V  |r8d| dV  d| V  |rTd| dV  d S )N- z? 
+ )rs   rstrip)r   ZalineZbliner   r   r   r   r   r     s    

zDiffer._qformat)NN)
rd   re   rf   r   r~   r{   r   rz   r   r   r   r   r   r   r     s   ^
)^Nz\s*(?:#\s*)?$c                 C   s   || d k	S r   r   )lineZpatr   r   r   r   3  s     	c                 C   s   | |kS r   r   )ZchZwsr   r   r   r   C  s    c                 C   s:   | d }||  }|dkr"d |S |s.|d8 }d ||S Nr'   z{}z{},{}formatstartstopZ	beginningr   r   r   r   _format_range_unifiedZ  s    
r   r   r   c                 c   sP  t | |||||| d}td | ||D ]}	|s|d}|rFd|nd}
|rXd|nd}d||
|V  d|||V  |	d |	d  }}t|d	 |d
 }t|d |d }d|||V  |	D ]\}}}}}|dkr| || D ]}d| V  qq|dkr"| || D ]}d| V  q|dkr||| D ]}d| V  q6qq*d S )NFT	{}r   
--- {}{}{}z
+++ {}{}{}r   rY   r'      rX      z@@ -{} +{} @@{}rR   rn   >   rP   rO   rw   >   rO   rQ   rx   )_check_typesr   r]   r   r   )r   r   fromfiletofilefromfiledate
tofiledater5   linetermstartedr\   fromdatetodater   lastfile1_rangefile2_rangerV   rJ   rL   rK   rM   r   r   r   r   r	   e  s0    )
c                 C   sB   | d }||  }|s|d8 }|dkr.d |S d ||| d S r   r   r   r   r   r   _format_range_context  s    
r   c                 c   s  t | |||||| tddddd}d}	td | ||D ]R}
|	sd}	|rVd|nd	}|rhd|nd	}d
|||V  d|||V  |
d |
d  }}d| V  t|d |d }d||V  tdd |
D r|
D ]8\}}}}}|dkr| || D ]}|| | V  qqt|d |d }d||V  tdd |
D r:|
D ]<\}}}}}|dkrP||| D ]}|| | V  qtqPq:d S )Nr   r   z! r   )rQ   rP   rO   rR   FTr   r   z
*** {}{}{}r   r   rY   z***************r'   r   z*** {} ****{}c                 s   s    | ]\}}}}}|d kV  qdS )>   rP   rO   Nr   r^   rV   _r   r   r   r_     s     zcontext_diff.<locals>.<genexpr>rQ   rX   r   z--- {} ----{}c                 s   s    | ]\}}}}}|d kV  qdS )>   rO   rQ   Nr   r   r   r   r   r_      s     rP   )r   dictr   r]   r   r   any)r   r   r   r   r   r   r5   r   prefixr   r\   r   r   r   r   r   rV   rJ   rL   r   r   r   rK   rM   r   r   r   r     s4    ,

c                 G   s   | r0t | d ts0tdt| d j| d f |r`t |d ts`tdt|d j|d f |D ]}t |tsdtd|f qdd S )Nr   z)lines to compare must be str, not %s (%r)z"all arguments must be str, not: %r)
isinstancestr	TypeErrortyperd   )r   r   argsargr   r   r   r     s    
r          
c	              	   c   s~   dd }	t t|	|}t t|	|}|	|}|	|}|	|}|	|}|	|}| ||||||||}
|
D ]}|ddV  qfd S )Nc              
   S   sR   z|  ddW S  tk
rL } z dt| j| f }t||W 5 d }~X Y nX d S )Nasciisurrogateescapez(all arguments must be bytes, not %s (%r))decodeAttributeErrorr   rd   r   )rm   errmsgr   r   r   r   "  s    zdiff_bytes.<locals>.decoder   r   )rD   rE   encode)Zdfuncr   r   r   r   r   r   r5   r   r   linesr   r   r   r   r
     s    c                 C   s   t ||| |S r   )r   r~   )r   r   ru   rv   r   r   r   r   5  s    #c                 #   s  dd l }|dt| |||ddgffdd	fdd  fdd}| }|d krj|E d H  n|d	7 }d}dd g|  }	}
d
}|d
krzt|\}}}W n tk
r   Y d S X |	| }|||f|
|< |	d	7 }	q|	|krdV  |}n|	}d}	|r"|	| }|	d	7 }	|
| V  |d	8 }q|d	 }z@|rht|\}}}|rP|d	 }n|d	8 }|||fV  q,W qv tk
r   Y d S X qvd S )Nr   z(\++|\-+|\^+)c                    s   ||  d7  < |d kr2|| |  ddd  fS |dkr|  d|  d }}g }|fdd} || t|D ]<\}\}	}
|d|	 d | ||	|
  d ||
d   }qt|dd  }n*|  ddd  }|sd	}d| | d }|| |fS )
Nr'   r   r   ?c                 S   s&   | | dd |  g | dS )Nr'   r   )r+   r\   span)Zmatch_objectsub_infor   r   r   record_sub_info  s    z3_mdiff.<locals>._make_line.<locals>.record_sub_info rn   )rB   subreversed)r   Z
format_keysideZ	num_linestextZmarkersr   r   keyZbeginend)	change_rer   r   
_make_line  s     2z_mdiff.<locals>._make_linec                  3   sn  g } d\}}t | dk r*| td qddd | D }|drP|}n|dr| | dd	 | dd
dfV  qn|dr|d
8 } | dd	d dfV  qnl|drֈ | dd	d  }}|d
 d	 }}n>|dr | d d	 | dd
dfV  qn|dr0 | dd	 | d d
dfV  qn|dr\|d
8 } | dd	d dfV  qn|dr|d
7 }d  | dd
dfV  qn|drd  | dd
 }}|d
 d	 }}n^|dr|d
7 }d  | dd
dfV  qn2|dr | d d  d d	 | d d
dfV  q|d	k r0|d
7 }dV  q|d	krL|d
8 }dV  q0|dr\d S ||dfV  qd S )N)r   r   r   Xr   c                 S   s   g | ]}|d  qS )r   r   r^   r   r   r   r   rh     s     z2_mdiff.<locals>._line_iterator.<locals>.<listcomp>z-?+?r   r   r'   Tz--++rw   )z--?+z--+r   z-+?z-?+z+--rx   )r   z+-rn   F)Nr   r   T)r   NT)r0   r+   nextrq   
startswith)r   Znum_blanks_pendingZnum_blanks_to_yieldrm   	from_lineto_line)r   diff_lines_iteratorr   r   _line_iterator  sd    



$



z_mdiff.<locals>._line_iteratorc                  3   s     } g g  }}t |dks(t |dkrzt| \}}}W n tk
rP   Y d S X |d k	rh|||f |d k	r|||f q|d\}}|d\}}|||p|fV  qd S rA   )r0   r   StopIterationr+   rB   )Zline_iterator	fromlinestolinesr   r   
found_diffZfromDiffZto_diff)r   r   r   _line_pair_iterator  s    
z#_mdiff.<locals>._line_pair_iteratorr'   F)NNN)recompiler   r   r   )r   r   contextru   rv   r   r   Zline_pair_iteratorZlines_to_writeindexZcontextLinesr   r   r   r2   r   )r   r   r   r   r   _mdiffZ  sR    "
8X!



r   an  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>

<head>
    <meta http-equiv="Content-Type"
          content="text/html; charset=%(charset)s" />
    <title></title>
    <style type="text/css">%(styles)s
    </style>
</head>

<body>
    %(table)s%(legend)s
</body>

</html>aH  
        table.diff {font-family:Courier; border:medium;}
        .diff_header {background-color:#e0e0e0}
        td.diff_header {text-align:right}
        .diff_next {background-color:#c0c0c0}
        .diff_add {background-color:#aaffaa}
        .diff_chg {background-color:#ffff77}
        .diff_sub {background-color:#ffaaaa}aZ  
    <table class="diff" id="difflib_chg_%(prefix)s_top"
           cellspacing="0" cellpadding="0" rules="groups" >
        <colgroup></colgroup> <colgroup></colgroup> <colgroup></colgroup>
        <colgroup></colgroup> <colgroup></colgroup> <colgroup></colgroup>
        %(header_row)s
        <tbody>
%(data_rows)s        </tbody>
    </table>a  
    <table class="diff" summary="Legends">
        <tr> <th colspan="2"> Legends </th> </tr>
        <tr> <td> <table border="" summary="Colors">
                      <tr><th> Colors </th> </tr>
                      <tr><td class="diff_add">&nbsp;Added&nbsp;</td></tr>
                      <tr><td class="diff_chg">Changed</td> </tr>
                      <tr><td class="diff_sub">Deleted</td> </tr>
                  </table></td>
             <td> <table border="" summary="Links">
                      <tr><th colspan="2"> Links </th> </tr>
                      <tr><td>(f)irst change</td> </tr>
                      <tr><td>(n)ext change</td> </tr>
                      <tr><td>(t)op</td> </tr>
                  </table></td> </tr>
    </table>c                   @   s   e Zd ZeZeZeZeZdZdddefddZ	dd	d
ddZ
dd Zdd Zdd Zdd Zdd Zdd Zdd ZdddZdS )r   r      Nc                 C   s   || _ || _|| _|| _d S r   )_tabsize_wrapcolumn	_linejunk	_charjunk)r   tabsizeZ
wrapcolumnru   rv   r   r   r   r     s    zHtmlDiff.__init__r   F   zutf-8)charsetc                C   s:   | j t| j| j| j||||||d|d |d|S )N)r   numlines)ZstylesZlegendtabler   xmlcharrefreplace)_file_templater   _styles_legend
make_tabler   r   )r   r   r   fromdesctodescr   r   r   r   r   r   	make_file  s      zHtmlDiff.make_filec                    s8   fdd  fdd|D } fdd|D }||fS )Nc                    s6   |  dd} |  j} |  dd} |  dddS )Nrn   r   	r   )rO   
expandtabsr   r   )r   )r   r   r   expand_tabs  s    z2HtmlDiff._tab_newline_replace.<locals>.expand_tabsc                    s   g | ]} |qS r   r   r   r   r   r   rh     s     z1HtmlDiff._tab_newline_replace.<locals>.<listcomp>c                    s   g | ]} |qS r   r   r   r   r   r   rh     s     r   )r   r   r   r   )r   r   r   _tab_newline_replace  s    
	zHtmlDiff._tab_newline_replacec                 C   s  |s| ||f d S t|}| j}||ksB||dd  |krT| ||f d S d}d}d}||k r||k r|| dkr|d7 }|| }|d7 }q`|| dkr|d7 }d}q`|d7 }|d7 }q`|d | }	||d  }
|r|	d }	d| |
 }
| ||	f | |d|
 d S )Nr   rX   r   r   r'   r   >)r+   r0   r   count_split_line)r   Z	data_listZline_numr   rU   rZ   r2   r5   ZmarkZline1Zline2r   r   r   r     s8    


zHtmlDiff._split_linec                 c   s   |D ]\}}}|d kr$|||fV  q|| \}}\}}g g  }	}
|  |	|| |  |
|| |	sd|
r|	rt|	d}nd}|
r|
d}nd}|||fV  q\qd S )Nr   )r   rn   )r   rB   )r   diffsfromdatatodataflagZfromlineZfromtextZtolineZtotextfromlisttolistr   r   r   _line_wrapper0  s     
zHtmlDiff._line_wrapperc              	   C   s   g g g   }}}|D ]r\}}}z4| | jd|f|  | | jd|f|  W n( tk
rz   | d  | d  Y nX | | q|||fS r6   )r+   _format_liner   )r   r   r   r   flaglistr   r   r   r   r   r   _collect_linesL  s    
zHtmlDiff._collect_linesc                 C   sr   zd| }d| j | |f }W n tk
r6   d}Y nX |dddddd	}|d
d }d|||f S )Nz%dz
 id="%s%s"r   &z&amp;r   z&gt;<z&lt;rn   &nbsp;z<<td class="diff_header"%s>%s</td><td nowrap="nowrap">%s</td>)_prefixr   rO   r   )r   r   r   Zlinenumr   idr   r   r   r   a  s    
zHtmlDiff._format_linec                 C   s0   dt j }dt j }t  jd7  _||g| _d S )Nzfrom%d_zto%d_r'   )r   _default_prefixr  )r   Z
fromprefixtoprefixr   r   r   _make_prefixx  s    

zHtmlDiff._make_prefixc                 C   s   | j d }dgt| }dgt| }d\}	}
d}t|D ]V\}}|r|
sd}
|}td|| g}d||	f ||< |	d7 }	d||	f ||< q:d}
q:|sdg}dg}dg}d}|rd	g}|}n
d
g }}|d sd| |d< d| ||< |||||fS )Nr'   r   )r   Fr   Tz id="difflib_chg_%s_%d"z"<a href="#difflib_chg_%s_%d">n</a>Fz2<td></td><td>&nbsp;No Differences Found&nbsp;</td>z(<td></td><td>&nbsp;Empty File&nbsp;</td>z!<a href="#difflib_chg_%s_0">f</a>z#<a href="#difflib_chg_%s_top">t</a>)r  r0   r)   rZ   )r   r   r   r   r   r   r  next_id	next_hrefZnum_chgZ	in_changer   r2   r   r   r   r   _convert_flags  s>    
 
zHtmlDiff._convert_flagsc              
   C   sR  |    | ||\}}|r"|}nd }t|||| j| jd}| jrL| |}| |\}	}
}| |	|
|||\}	}
}}}g }d}t	t
|D ]P}|| d kr|dkr|d q|||| || |	| || |
| f  q|s|rddd| dd| f }nd}| jtd||| jd	 d
 }|ddddddddddS )Nrt   zV            <tr><td class="diff_next"%s>%s</td>%s<td class="diff_next">%s</td>%s</tr>
r   z)        </tbody>        
        <tbody>
z <thead><tr>%s%s%s%s</tr></thead>z!<th class="diff_next"><br /></th>z+<th colspan="2" class="diff_header">%s</th>r   r'   )Z	data_rows
header_rowr   z +z<span class="diff_add">z -z<span class="diff_sub">z ^z<span class="diff_chg">r   z</span>r   r  )r	  r   r   r   r   r   r   r  r  r8   r0   r+   _table_templater   rq   r  rO   )r   r   r   r   r   r   r   Zcontext_linesr   r   r   r   r  r
  rm   Zfmtr2   r  r   r   r   r   r     sl    
     

    zHtmlDiff.make_table)r   r   Fr   )r   r   Fr   )rd   re   rf   r   r   r  r   r  r   r   r   r   r   r   r  r   r	  r  r   r   r   r   r   r     s0   
    7/  c                 c   sn   zdddt | }W n" tk
r8   td| d Y nX d|f}| D ]"}|d d |krF|dd  V  qFd S )Nr   r   )r'   r   z)unknown delta choice (must be 1 or 2): %rr   r   )intKeyErrorri   )ZdeltaZwhichrV   prefixesr   r   r   r   r     s    c                  C   s   dd l } dd l}| |S rA   )doctestdifflibZtestmod)r  r  r   r   r   _test!  s    r  __main__)rX   rg   )r   )r   r   r   r   rX   r   )r   r   r   r   rX   r   )r   r   r   r   rX   r   )#__all__heapqr   rj   collectionsr   Z_namedtupler   r   r   r   rs   r   r   r   matchr   r   r   r	   r   r   r   r
   r   r   r   r   r  r   objectr   r   r  rd   r   r   r   r   <module>   s         
     

1	  I
      
I        
L        
%
  	
  a 
