
    h{                     Z   d Z ddlZddlZddlZddlZddlmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZmZ ddlmZmZ ddl m!Z! ddl"m#Z# ddl$m%Z%m&Z& ddl'm(Z(  G d d      Z)d+dZ*ejV                  d+d       Z,ejV                  d        Z- G d d      Z. G d d      Z/ G d de/      Z0 ed      Z1 e2ejf                        Z4ejj                  d         Z6 G d! d"      Z7 G d# d$e/      Z8 G d% d&      Z9 G d' d(      Z: G d) d*      Z;y),z
This module converts requested URLs to callback view functions.

URLResolver is the main class here. Its resolve() method takes a URL (as
a string) and returns a ResolverMatch object which provides access to all
attributes of the resolved URL match.
    N)import_module)PicklingError)quote)Local)settings)ErrorWarning)check_resolver)ImproperlyConfigured)MultiValueDict)cached_property)RFC3986_SUBDELIMSescape_leading_slashes)_lazy_re_compile	normalize)get_language   )get_converters)NoReverseMatchResolver404)get_callablec                   4    e Zd Z	 	 	 	 	 	 	 ddZd Zd Zd Zy)ResolverMatchNc                    || _         || _        || _        || _        || _        || _        |	| _        |
| _        |r|D cg c]  }|s|	 c}ng | _        dj                  | j                        | _
        |r|D cg c]  }|s|	 c}ng | _        dj                  | j                        | _        t        |d      r|j                  }t        |d      s6|j                  j                   dz   |j                  j"                  z   | _        n!|j                   dz   |j"                  z   | _        |xs | j$                  }dj                  | j                  |gz         | _        y c c}w c c}w )N:
view_class__name__.)funcargskwargsurl_nameroutetriedcaptured_kwargsextra_kwargs	app_namesjoinapp_name
namespaces	namespacehasattrr   	__class__
__module__r   
_func_path	view_name)selfr   r    r!   r"   r'   r*   r#   r$   r%   r&   x	view_paths                R/var/www/django_project/virt/lib/python3.12/site-packages/django/urls/resolvers.py__init__zResolverMatch.__init__#   s'    		 

.( 9BY4!!4r0:Dj6A16"$//24&??DtZ("nn77#=@W@WWDO #oo3dmmCDO/	$//YK"?@ 56s   E!E!;E&E&c                 N    | j                   | j                  | j                  f|   S N)r   r    r!   )r1   indexs     r4   __getitem__zResolverMatch.__getitem__L   s     		499dkk2599    c                    t        | j                  t        j                        rt	        | j                        }n| j
                  }d|d| j                  d| j                  d| j                  d| j                  d| j                  d| j                  | j                  rd| j                  nd	| j                  rd
| j                  dS d	dS )NzResolverMatch(func=z, args=z	, kwargs=z, url_name=z, app_names=z, namespaces=z, route=z, captured_kwargs= z, extra_kwargs=))
isinstancer   	functoolspartialreprr/   r    r!   r"   r'   r*   r#   r%   r&   )r1   r   s     r4   __repr__zResolverMatch.__repr__O   s    dii!2!23		?D??D
 		

 ++ ))=)=(@A <@;L;L/$"3"3!67T	
  SUT	
r:   c                 H    t        d| j                  j                   d      )NzCannot pickle r   )r   r-   __qualname__)r1   protocols     r4   __reduce_ex__zResolverMatch.__reduce_ex__h   s!    nT^^-H-H,IKLLr:   )NNNNNNN)r   r.   rD   r5   r9   rB   rF    r:   r4   r   r   "   s0     'AR:
2Mr:   r   c                 <    | t         j                  } t        |       S r7   )r   ROOT_URLCONF_get_cached_resolverurlconfs    r4   get_resolverrM   l   s    ''((r:   c                 ,    t        t        d      |       S N^/)URLResolverRegexPatternrK   s    r4   rJ   rJ   r   s    |E*G44r:   c                     t        |       }t        |      |_        t        ||j                        }t        t        d      |g      S rO   )rR   dict
convertersrQ   url_patterns)
ns_patternresolverrU   patternns_resolvers        r4   get_ns_resolverr[   w   sA    
 :&Gj)Ggx'<'<=K|E*[M::r:   c                       e Zd ZddZd Zy)LocaleRegexDescriptorNc                 8   || S |j                   }t        |t              r-| j                  |      |j                  d<   |j                  d   S t               }||j                  vr'| j                  t        |            |j                  |<   |j                  |   S )T
        Return a compiled regular expression based on the active language.
        regex)_regexr>   str_compile__dict__r   _regex_dict)r1   instanceclsrY   language_codes        r4   __get__zLocaleRegexDescriptor.__get__   s     K //gs#)-w)?Hg&$$W--$ 4 4426--G2MH  /##M22r:   c                     	 t        j                  |      S # t         j                  $ r}t        d| d|       |d }~ww xY w)N"z%" is not a valid regular expression: )recompileerrorr   )r1   r`   es      r4   rc   zLocaleRegexDescriptor._compile   sK    	::e$$xx 	&E7?sC	s    A<Ar7   )r   r.   rD   ri   rc   rG   r:   r4   r]   r]      s    3$r:   r]   c                       e Zd Zd Zd Zy)CheckURLMixinc                 |    dj                  |       }| j                  r|dj                  | j                        z  }|S )zI
        Format the URL pattern for display in warning messages.
        '{}'z [name='{}'])formatname)r1   descriptions     r4   describezCheckURLMixin.describe   s8     mmD)99>00;;Kr:   c                     t         j                  sg S | j                  j                  d      rH| j                  j	                  d      s-t        dj                  | j                               d      }|gS g S )zM
        Check that the pattern does not begin with a forward slash.
        )/rP   z^\/ry   zYour URL pattern {} has a route beginning with a '/'. Remove this slash as it is unnecessary. If this pattern is targeted in an include(), ensure the include() pattern has a trailing '/'.z	urls.W002id)r   APPEND_SLASHra   
startswithendswithr	   rt   rw   r1   warnings     r4   _check_pattern_startswith_slashz-CheckURLMixin._check_pattern_startswith_slash   sv     $$ I;;!!"56t{{?S?S@
 NNTfMMOO G 9Ir:   N)r   r.   rD   rw   r   rG   r:   r4   rq   rq      s    r:   rq   c                   :    e Zd Z e       ZddZd Zd Zd Zd Z	y)rR   Nc                 J    || _         i | _        || _        || _        i | _        y r7   )ra   re   _is_endpointru   rU   )r1   r`   ru   is_endpoints       r4   r5   zRegexPattern.__init__   s'    '	r:   c                    | j                   r@| j                  j                  j                  d      r| j                  j	                  |      n| j                  j                  |      }|r`|j                         }|rdn|j                         }|j                         D ci c]  \  }}|	|| }}}||j                         d  ||fS y c c}}w )N$rG   )
r   r`   rY   r~   	fullmatchsearch	groupdictgroupsitemsend)r1   pathmatchr!   r    kvs          r4   r   zRegexPattern.match   s       TZZ%7%7%@%@%E JJ  &""4( 	
  __&F2U\\^D'-||~Gtq!adGFG		&f44 Hs   !
C,Cc                     g }|j                  | j                                | j                  s|j                  | j                                |S r7   )extendr   r   _check_include_trailing_dollarr1   warningss     r4   checkzRegexPattern.check   s?    <<>?  OOD??ABr:   c                     | j                   j                  d      rF| j                   j                  d      s+t        dj                  | j	                               d      gS g S )Nr   z\$zYour URL pattern {} uses include with a route ending with a '$'. Remove the dollar from the route to avoid problems including URLs.z	urls.W001rz   )ra   r~   r	   rt   rw   r1   s    r4   r   z+RegexPattern._check_include_trailing_dollar   sV    ;;$T[[-A-A%-H"F4==?3"	  Ir:   c                 ,    t        | j                        S r7   )rb   ra   r   s    r4   __str__zRegexPattern.__str__       4;;r:   NF)
r   r.   rD   r]   r`   r5   r   r   r   r   rG   r:   r4   rR   rR      s#    !#E  r:   rR   z1<(?:(?P<converter>[^>:]+):)?(?P<parameter>[^>]+)>c           	         dg}t               }i }d}t        j                  |       D ]  }t        j	                  |d         st        d| d      |j                  d      \  }}|j                         st        d| d|d      	 ||   }	|	||<   |j                         \  }}|j                  t        j                  | ||              |}|j                  d| d|	j                   d        |j                  t        j                  | |d              |r|j                  d       dj                  |      |fS # t        $ r}
t        d| d	|d
      |
d}
~
ww xY w)a  
    Convert a path pattern into a regular expression. Return the regular
    expression and a dictionary mapping the capture names to the converters.
    For example, 'foo/<int:pk>' returns '^foo\/(?P<pk>[0-9]+)'
    and {'pk': <django.urls.converters.IntConverter>}.
    ^r   z
URL route u3    cannot contain whitespace in angle brackets <…>.rb   )defaultz uses parameter name z' which isn't a valid Python identifier.z uses invalid converter r   N(?P<>r=   z\Zr<   )r   _PATH_PARAMETER_COMPONENT_REfinditerwhitespace_set
isdisjointr   r   isidentifierKeyErrorspanappendrl   escaper`   r(   )r#   r   partsall_convertersrU   previous_endmatch_raw_converter	parameter	converterro   startr   s                r4   _route_to_regexr      s    EE#%NJL.77> <((3&UI%XY 
 $*===#? y%%'&UI%:9- H3 3 	&}5I
 !*
9[[]
sRYYu\%89:tI;a	'8:;1<4 
LL5/01U775>:%%  	&UI%=m=NaP	s   	E  	E!	EE!c                       e Zd ZddZy)LocaleRegexRouteDescriptorNc                    || S t        |j                  t              r;t        j                  |j
                        |j                  d<   |j                  d   S t               }||j                  vrLt        j                  t        t        |j                        |j                        d         |j                  |<   |j                  |   S )r_   r`   r   )r>   _routerb   rl   rm   ra   rd   r   re   r   r   )r1   rf   rg   rh   s       r4   ri   z"LocaleRegexRouteDescriptor.__get__&  s     K hoos+)+HOO)DHg&$$W--$ 4 4424**HOO 4h6K6KLQO3H  / ##M22r:   r7   )r   r.   rD   ri   rG   r:   r4   r   r   %  s    3r:   r   c                   :    e Zd Z e       ZddZd Zd Zd Zd Z	y)RoutePatternNc                     || _         t        t        |      |      \  | _        | _        i | _        || _        || _        y r7   )r   r   rb   ra   rU   re   r   ru   )r1   r#   ru   r   s       r4   r5   zRoutePattern.__init__=  s9    '6s5z;'O$T_'	r:   c                 "   | j                   j                  |      }|rb|j                         }|j                         D ])  \  }}| j                  |   }	 |j                  |      ||<   + ||j                         d  d|fS y # t        $ r Y  y w xY wNrG   )r`   r   r   r   rU   	to_python
ValueErrorr   )r1   r   r   r!   keyvaluer   s          r4   r   zRoutePattern.matchD  s    

!!$'__&F$lln  
U OOC0	 "+"5"5e"<F3K  		&F22 "   s   B	BBc                     g | j                         | j                         }| j                  }d|v s"|j                  d      s|j	                  d      r9|j                  t        dj                  | j                               d             |S )Nr   r   r   zYour URL pattern {} has a route that contains '(?P<', begins with a '^', or ends with a '$'. This was likely an oversight when migrating to django.urls.path().z2_0.W001rz   )	r   '_check_pattern_unmatched_angle_bracketsr   r}   r~   r   r	   rt   rw   )r1   r   r#   s      r4   r   zRoutePattern.checkR  s    
113
99;
 U?e..s3u~~c7JOO<<BF4==?<S!	 r:   c                 t   g }d}t        j                  dt        | j                              }d}|D ]O  }|dk(  r|dz  }|dk(  s|dz  }|dk  s|j	                  t        || j                         dfz  d             d}Q |dkD  r/|j	                  t        || j                         dfz  d             |S )	Nz2Your URL pattern %s has an unmatched '%s' bracket.z[<>]r   <r   r   z	urls.W010rz   )rl   findallrb   r   r   r	   rw   )r1   r   msgbracketsopen_bracket_counterbrackets         r4   r   z4RoutePattern._check_pattern_unmatched_angle_bracketsc  s    B::gs4;;'78  		-G#~$)$C$)$'!+OOt}}&< <M ,-(		-  !#OOGC4==?C*@$@[QRr:   c                 ,    t        | j                        S r7   )rb   r   r   s    r4   r   zRoutePattern.__str__v  r   r:   r   )
r   r.   rD   r   r`   r5   r   r   r   r   rG   r:   r4   r   r   :  s#    &(E"& r:   r   c                   L    e Zd Zd	dZed        Zed        Zd Zd Zd Z	d Z
y)
LocalePrefixPatternc                      || _         i | _        y r7   )prefix_default_languagerU   )r1   r   s     r4   r5   zLocalePrefixPattern.__init__{  s    '>$r:   c                 f    t        j                  t        j                  | j                              S r7   )rl   rm   r   language_prefixr   s    r4   r`   zLocalePrefixPattern.regex  s"     zz"))D$8$89::r:   c                     t               xs t        j                  }|t        j                  k(  r| j                  syd|z  S )Nr<   z%s/)r   r   LANGUAGE_CODEr   r1   rh   s     r4   r   z#LocalePrefixPattern.language_prefix  s8    $@(*@*@H2224;W;W=((r:   c                 f    | j                   }|j                  |      r|j                  |      di fS y r   )r   r}   removeprefix)r1   r   r   s      r4   r   zLocalePrefixPattern.match  s4    ..???+$$_5r2==r:   c                     g S r7   rG   r   s    r4   r   zLocalePrefixPattern.check  s    	r:   c                 $    dj                  |       S )Nrs   )rt   r   s    r4   rw   zLocalePrefixPattern.describe  s    }}T""r:   c                     | j                   S r7   )r   r   s    r4   r   zLocalePrefixPattern.__str__  s    ###r:   N)T)r   r.   rD   r5   propertyr`   r   r   r   rw   r   rG   r:   r4   r   r   z  sC     ; ; ) )#$r:   r   c                   B    e Zd Zd	dZd Zd Zd Zd Zd Ze	d        Z
y)

URLPatternNc                 D    || _         || _        |xs i | _        || _        y r7   )rY   callbackdefault_argsru   )r1   rY   r   r   ru   s        r4   r5   zURLPattern.__init__  s$     (.B	r:   c                 l    d| j                   j                  d| j                  j                         dS )Nr    r   )r-   r   rY   rw   r   s    r4   rB   zURLPattern.__repr__  s$     NN33T\\5J5J5LMMr:   c                     | j                         }|j                  | j                  j                                |j                  | j	                                |S r7   )_check_pattern_namer   rY   r   _check_callbackr   s     r4   r   zURLPattern.check  sC    ++-**,-,,./r:   c                     | j                   j                  Od| j                   j                  v r7t        dj                  | j                   j	                               d      }|gS g S )zG
        Check that the pattern name does not contain a colon.
        r   zjYour URL pattern {} has a name including a ':'. Remove the colon, to avoid ambiguous namespace references.z	urls.W003rz   )rY   ru   r	   rt   rw   r   s     r4   r   zURLPattern._check_pattern_name  s]     <<(SDLL4E4E-E88>t||?T?T?V8WG
 9Ir:   c           	          ddl m} | j                  }t        j                  |      rPt        ||      rDt        d| j                  j                         d|j                  d|j                  dd      gS g S )	Nr   )ViewzYour URL pattern z has an invalid view, pass z.as_view() instead of r   z	urls.E009rz   )
django.viewsr   r   inspectisclass
issubclassr   rY   rw   r   )r1   r   views      r4   r   zURLPattern._check_callback  sf    %}}??4 Zd%; --/ #	  	r:   c           	         | j                   j                  |      }|rc|\  }}}i || j                  }t        | j                  ||| j                   j
                  t        | j                         || j                        S y )N)r#   r%   r&   )rY   r   r   r   r   ru   rb   )r1   r   r   new_pathr    r%   r!   s          r4   resolvezURLPattern.resolve  s~    ""4(.3+HdO==4+<+<=F !!$,,' /!.. 	 r:   c                 4   | j                   }t        |t        j                        r|j                  }t        |d      r|j                  }n2t        |d      s&|j                  dz   |j                  j                  z   S |j                  dz   |j                  z   S )zw
        A string that identifies the view (e.g. 'path.to.view_function' or
        'path.to.ClassBasedView').
        r   r   r   )r   r>   r?   r@   r   r,   r   r.   r-   r   rD   )r1   r   s     r4   
lookup_strzURLPattern.lookup_str  s     ==h	 1 12}}H8\***H:.&&,x/A/A/J/JJJ""S(8+@+@@@r:   )NN)r   r.   rD   r5   rB   r   r   r   r   r   r   rG   r:   r4   r   r     s7    N&  A Ar:   r   c                       e Zd Z	 ddZd Zd Zd Zed        Zed        Z	ed        Z
edd	       Zed
        Zd Zd Zed        Zed        Zd Zd Zd Zy)rQ   Nc                     || _         || _        d | _        |xs i | _        || _        || _        i | _        i | _        i | _        t               | _
        d| _        t               | _        y r   )rY   urlconf_namer   default_kwargsr+   r)   _reverse_dict_namespace_dict	_app_dictset_callback_strs
_populatedr   _local)r1   rY   r   r   r)   r+   s         r4   r5   zURLResolver.__init__  sj      ),2" ! "egr:   c                 j   t        | j                  t              r3| j                  r'd| j                  d   j                  j                  z  }nt        | j                        }d| j                  j                  d|d| j                  d| j                  d| j                  j                         dS )	Nz	<%s list>r   r   r   z (r   z) r   )
r>   r   listr-   r   rA   r)   r+   rY   rw   )r1   urlconf_reprs     r4   rB   zURLResolver.__repr__  s    d''.43D3D&):):1)=)G)G)P)PPL 1 12LNN##MMNNLL!!#
 	
r:   c                     g }| j                   D ]  }|j                  t        |              |xs | j                  j	                         S r7   )rV   r   r
   rY   r   )r1   messagesrY   s      r4   r   zURLResolver.check  sE    (( 	5GOON734	5/4<<--//r:   c                 H   t        | j                  dd      ry 	 d| j                  _        t               }i }i }t	               }t        | j                        D ]  }|j                  j                  j                  }|j                  d      }t        |t              r| j                  j                  |j                         t        |j                  j                  j                        }|j!                  |j"                  |||j$                  |j                  j&                  f       |j(                  |j!                  |j(                  |||j$                  |j                  j&                  f       |j+                          |j,                  rH|j/                  |j,                  g       j1                  |j2                         ||f||j2                  <   nF|j4                  D ]  }|j4                  j7                  |      D ]j  \  }	}
}}t        ||
z         }|j!                  ||||
z   i ||j8                  i | j                  j&                  |j                  j&                  |f       l  |j:                  j=                         D ]M  \  }\  }}|j                  j&                  }|j                  j&                  j?                  |       ||z   |f||<   O |j@                  j=                         D ]&  \  }}|j/                  |g       jC                  |       ( | j                  j?                  |j                          || jD                  |<   || jF                  |<   || jH                  |<   d| _%        d| j                  _        y # d| j                  _        w xY w)N
populatingFTr   )&getattrr   r  r   r   reversedrV   rY   r`   r   r>   r   r   addr   r   
appendlistr   r   rU   ru   	_populater)   
setdefaultr   r+   reverse_dictgetlistr   namespace_dictr   updateapp_dictr   r   r   r   r   )r1   lookupsr*   appsrh   url_pattern	p_patternbitsru   matchespatdefaultsrU   new_matchesr+   prefixsub_patterncurrent_convertersr)   namespace_lists                       r4   r  zURLResolver._populate  sz   
 4;;e4K	+%)DKK"$&GJD(NM'(9(9: ?K'//55==	%2237	k:6''++K,B,BC$[%8%8%>%>%F%FGD&&#,, %'44'//::	 #''3**',, $ ) + 8 8 + 3 3 > >	  ))+"++(<(<bAHH'11 >G<T
;#8#89$/$<$< "D "-!9!9!A!A$!G" ! ' # ( *.7	C.H ' 2 2$((3(1C(R8(R{7Q7Q(R)*.2ll.E.E)*.9.A.A.L.L)* /9)*		%&!"""0 )77==?V I ("'1<1D1D1O1O.'//::AABTU5>5G4UJy1V 9D8L8L8R8R8T Q4Hn OOHb9@@PQ''..{/I/IJ?K@ 3=D  /,0DNN=)07D}-"DO%*DKK"UDKK"s   DN 6IN N!c                 p    t               }|| j                  vr| j                          | j                  |   S r7   )r   r   r  r   s     r4   r
  zURLResolver.reverse_dictk  s2    $ 2 22NN!!-00r:   c                 p    t               }|| j                  vr| j                          | j                  |   S r7   )r   r   r  r   s     r4   r  zURLResolver.namespace_dictr  s2    $ 4 44NN##M22r:   c                 p    t               }|| j                  vr| j                          | j                  |   S r7   )r   r   r  r   s     r4   r  zURLResolver.app_dicty  s.    $.NN~~m,,r:   c                 d    || j                  g       y | j                  fd|D               y )Nc              3   (   K   | ]	  }g|  y wr7   rG   ).0trY   s     r4   	<genexpr>z,URLResolver._extend_tried.<locals>.<genexpr>  s     :1'A:s   )r   r   )r$   rY   	sub_trieds    ` r4   _extend_triedzURLResolver._extend_tried  s)    LL'#LL:	::r:   c                 6    | s|S |j                  d      }| |z   S )z<Join two routes, without the starting ^ in the second route.r   )r   )route1route2s     r4   _join_routezURLResolver._join_route  s&     M$$S)r:   c                 V    | j                   s| j                          || j                  v S r7   )r   r  r   )r1   ru   s     r4   _is_callbackzURLResolver._is_callback  s$    NNt****r:   c                    t        |      }g }| j                  j                  |      }|rq|\  }}}| j                  D ]M  }	 |j	                  |      }|r#i || j
                  }	|	j                  |j                         |j                  }
|	s||j                  z   }
t        |t              rdnt        |j                        }| j                  |||j                         t        |j                  |
|	|j                  | j                   g|j"                  z   | j$                  g|j&                  z   | j)                  ||j*                        ||j,                  i | j
                  |j.                  
      c S |j1                  |g       P t3        ||d      t3        d|i      # t2        $ r:}| j                  |||j                  d   j5                  d             Y d }~d }~ww xY w)Nr<   )r%   r&   r   r$   )r$   r   r   )rb   rY   r   rV   r   r   r  r!   r    r>   r   r%  r$   r   r   r"   r)   r'   r+   r*   r)  r#   r%   r&   r   r   get)r1   r   r$   r   r   r    r!   rY   	sub_matchsub_match_dictsub_match_argscurrent_routero   s                r4   r   zURLResolver.resolve  s   4y""4(%*"HdF,, &,%, ' 9I !)JF)Jd6I6I)J&--i.>.>? *3--1INN-BN  *':> !$W__!5 &
 **5'9??K,%NN**%..!]]Oi.A.AA!^^,y/C/CC ,,]IOOL!,5,E,E*"&"5"5*"+"8"8*   LL'+M&,N x@AA64.))K # O&&ugqvvay}}W7MNNOs   F**	G-3/G((G-c                 x    t        | j                  t              rt        | j                        S | j                  S r7   )r>   r   rb   r   r   s    r4   urlconf_modulezURLResolver.urlconf_module  s/    d''- !2!233$$$r:   c                     t        | j                  d| j                        }	 t        |       |S # t        $ r-}d}t	        |j                  | j                              |d }~ww xY w)NurlpatternszThe included URLconf '{name}' does not appear to have any patterns in it. If you see the 'urlpatterns' variable with valid patterns in the file then the issue is probably caused by a circular import.)ru   )r  r3  iter	TypeErrorr   rt   r   )r1   patternsro   r   s       r4   rV   zURLResolver.url_patterns  sq     4..t?R?RS		RN   	R/  'szzt7H7Hz'IJPQQ	Rs   0 	A&(A!!A&c                 z    t        | j                  d|z  d       }|sddlm} t        |d|z        }t	        |      S )Nz	handler%sr   )urls)r  r3  django.confr:  r   )r1   	view_typer   r:  s       r4   resolve_error_handlerz!URLResolver.resolve_error_handler  s?    4..i0GN )t[9%<=HH%%r:   c                 0     | j                   |dg|i |S )Nr<   )_reverse_with_prefix)r1   lookup_viewr    r!   s       r4   reversezURLResolver.reverse  s!    (t((bJ4J6JJr:   c                    |r|rt        d      | j                  s| j                          | j                  j	                  |      }|D ]a  \  }}}}	|D ]S  \  }
}|r.t        |      t        |      k7  r!t        t        ||            }ngt        |      j                  |      j                  |      rad}|j                         D ]#  \  }}||v r|j                  ||      |k7  s!d} n |s|}i }d}|j                         D ]0  \  }}||	v r	 |	|   j                  |      ||<   #t        |      ||<   2 |s|j                  dd      |
z   }t!        j"                  dt!        j$                  |      |||z        s0t'        ||z  t(        dz         }t+        |      c c S  d t-        |d	d       }t-        |d
d       }|
||d|}n|}|D cg c]	  \  }}}}| }}}|r0|rd|d}n
|rd|z  }nd}d||t        |      |fz  }t/        |      dd|iz  }t/        |      # t         $ r d}Y  w xY wc c}}w )Nz2Don't mix *args and **kwargs in call to reverse()!TF%z%%r   z/~:@)safer.   r   r   zarguments ''zkeyword arguments '%s'zno argumentsz;Reverse for '%s' with %s not found. %d pattern(s) tried: %szZReverse for '%(view)s' not found. '%(view)s' is not a valid view function or pattern name.r   )r   r   r  r
  r  lenrT   zipr   symmetric_difference
differencer   r-  to_urlrb   replacerl   r   r   r   r   r   r  r   )r1   r@  _prefixr    r!   possibilitiespossibilityrY   r  rU   resultparamscandidate_subsr  r   r   text_candidate_subsr   candidate_paturlmnlookup_view_s_r8  arg_msgr   s                              r4   r?  z URLResolver._reverse_with_prefix  s   FQRRNN))11+>:G 1	76K(J"- 074yCK/ %)#fd*;%<N6{77?JJ8T "G ( 0 "1;$!::a+q0&+G!" # %+N&(#*002 8DAqJ"5?]5I5I!5L/2
 25Q+A.8  !(T :V C99!yy17;!$77
  %(;;.7C
 2#66a071	7h Kt4KT2=Q]'(!,M'M6CD 2GQGDD.242V;(OH	S C S!!9<BM;RS  S!!i  * "$)E!"B Es   H0I0I 	?I 	)NNNr7   )r   r.   rD   r5   rB   r   r  r   r
  r  r  staticmethodr%  r)  r+  r   r   r3  rV   r=  rA  r?  rG   r:   r4   rQ   rQ     s    SW*
0R+h 1 1 3 3 - - ; ;  +
.*` % %  &KW"r:   rQ   r7   )<__doc__r?   r   rl   string	importlibr   pickler   urllib.parser   asgiref.localr   r;  r   django.core.checksr   r	   django.core.checks.urlsr
   django.core.exceptionsr   django.utils.datastructuresr   django.utils.functionalr   django.utils.httpr   r   django.utils.regex_helperr   r   django.utils.translationr   rU   r   
exceptionsr   r   utilsr   r   rM   cacherJ   r[   r]   rq   rR   r   	frozenset
whitespacer   	lru_cacher   r   r   r   r   rQ   rG   r:   r4   <module>ro     s(     	  #       - 2 7 6 3 G A 1 & 3 GM GMT) 5 5 ; ; 8 D/ = / d  08   6,,- (& (&V3 3*= = = @$ $DNA NAbR" R"r:   