o
    Ú­j«V  ã                   @   sp  U d dl Z d dlZd dlmZmZ d dlmZ d dlm	Z	mZm
Z
mZ d dlmZmZ d dlmZmZ d dlmZmZmZmZmZmZ d dlmZ d d	lmZmZmZmZm Z m!Z!m"Z"m#Z#mZm$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ d d
l,m-Z- d dl.m/Z/ d dl0m1Z1 d dl2m3Z3m4Z4m5Z5m6Z6 d dl7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@ d dlAmBZBmCZCmDZD erçd dlEmFZFmGZG d dlHmIZI d dlJmKZK d dlLmMZMmNZNmOZO e+eMeNeOf ZPeeef ZQe+eReSef ZTe+eUeVf ZWdede+eU fdd„ZXdede+eU fdd„ZYdede+eV fdd„ZZdede+eV fdd„Z[h d£Z\h d£Z]dede^fd d!„Z_d"Z`dedeRfd#d$„ZadedeRfd%d&„ZbdedeSfd'd(„ZcdedeSfd)d*„Zddœd0d1„Zed�d2d3„Zfd�d4d5„Zgdžd7d8„ZhdŸd:d;„Zid d<d=„Zjd d>d?„Zkd d@dA„ZldeddBfdCdD„Zmdede eef fdEdF„Zndede$e fdGdH„Zodede(edIf fdJdK„Zpdede'e fdLdM„Zqdede"e fdNdO„Zrdedee fdPdQ„Zsded,d-d.d/defdRdS„Ztded,d-de-fdTdU„ZudedefdVdW„ZvdedefdXdY„ZwdedefdZd[„Zxdedefd\d]„Zydedefd^d_„Zzdedefd`da„Z{dedefdbdc„Z|dedefddde„Z}dedefdfdg„Z~dedefdhdi„Zdede8fdjdk„Z€dedefdldm„Z�dedefdndo„Z‚dpedeegef fdqdr„Zƒd¡dsdt„Z„d¡dudv„Z…d¡dwdx„Z†d¡dydz„Z‡ded.d/defd{d|„Zˆe*d}ƒZ‰dpe)e‰ dee‰ge‰f fd~d„ZŠdpe)e‰ deege)e‰ f fd€d�„Z‹dede)e‰ fd‚dƒ„ZŒdedd„fd…d†„Z�dede&eU fd‡dˆ„ZŽe*d‰e%dŠ�Z�d‹e)e� d.e)d/ dee(edIf ge�f fdŒd�„Z�dŽe)d� d.e)d/ deege eUef f fd�d‘„Z‘G d’d“„ d“ƒZ’eeaetgfeetgfeUeXe’ejd=ƒe’ekd?ƒe’eldAƒe’eid”d•ƒgfeVeZe’ejd=ƒe’ekd?ƒe’eldAƒe’eid”d•ƒgfe^e_gfeReagfeSece’eed–d—d˜�gfee~gfee4gfe	e3gfe
e6gfee5gfeemgfe“engfe”eogfe•epgfe–eqgfe—ergfeesgfe-eugfeevgfee|gfee}gfeexgfeeygfeezgfee{gfgZ˜e$e(e)e e$e f  e™d™< dpe)e d.e)d/ de#e8ddf fdšd›„ZšdS )¢é    N)ÚOrderedDictÚdeque)ÚHashable)ÚdateÚdatetimeÚtimeÚ	timedelta)ÚDecimalÚDecimalException)ÚEnumÚIntEnum)ÚIPv4AddressÚIPv4InterfaceÚIPv4NetworkÚIPv6AddressÚIPv6InterfaceÚIPv6Network)ÚPath)ÚTYPE_CHECKINGÚAnyÚCallableÚDequeÚDictÚ
ForwardRefÚ	FrozenSetÚ	Generatorr   ÚListÚ
NamedTupleÚPatternÚSetÚTupleÚTypeÚTypeVarÚUnion)ÚUUID)Úwarn)Úerrors)Ú
parse_dateÚparse_datetimeÚparse_durationÚ
parse_time)	ÚAnyCallableÚall_literal_valuesÚdisplay_as_typeÚ	get_classÚis_callable_typeÚis_literal_typeÚis_namedtupleÚis_none_typeÚis_typeddict)Úalmost_equal_floatsÚlenient_issubclassÚsequence_like)ÚLiteralÚ	TypedDict)Ú
BaseConfig)Ú
ModelField)ÚConstrainedDecimalÚConstrainedFloatÚConstrainedIntÚvÚreturnc                 C   sT   t | tƒrt | tƒr| jS | S t | tttfƒrt| ƒS t | ttfƒr&|  	¡ S t
 ¡ ‚©N)Ú
isinstanceÚstrr   ÚvalueÚfloatÚintr	   ÚbytesÚ	bytearrayÚdecoder&   ÚStrError©r>   © rK   úS/var/www/html/CropPilot/venv/lib/python3.10/site-packages/pydantic/v1/validators.pyÚstr_validator<   s   

rM   c                 C   s    t | tƒrt | tƒs| S t ¡ ‚r@   )rA   rB   r   r&   rI   rJ   rK   rK   rL   Ústrict_str_validatorK   s   rN   c                 C   sV   t | tƒr| S t | tƒrt| ƒS t | tƒr|  ¡ S t | tttfƒr't| ƒ ¡ S t 	¡ ‚r@   )
rA   rF   rG   rB   ÚencoderD   rE   r	   r&   Ú
BytesErrorrJ   rK   rK   rL   Úbytes_validatorQ   s   


rQ   c                 C   s(   t | tƒr| S t | tƒrt| ƒS t ¡ ‚r@   )rA   rF   rG   r&   rP   rJ   rK   rK   rL   Ústrict_bytes_validator^   s
   

rR   >   Ú0ÚfÚnÚnoÚoffÚfalser   >   Ú1ÚtÚyÚonÚyesÚtrueé   c                 C   sv   | du s| du r
| S t | tƒr|  ¡ } t | tƒr|  ¡ } z| tv r$W dS | tv r+W dS W t 	¡ ‚ ty:   t 	¡ ‚w ©NTF)
rA   rF   rH   rB   ÚlowerÚ	BOOL_TRUEÚ
BOOL_FALSEÚ	TypeErrorr&   Ú	BoolErrorrJ   rK   rK   rL   Úbool_validatork   s    

ÿþÿrf   iÌ  c              
   C   sj   t | tƒr| du s| du s| S t | tttfƒr!t| ƒtkr!t ¡ ‚zt| ƒW S  t	t
tfy4   t ¡ ‚w r`   )rA   rE   rB   rF   rG   ÚlenÚmax_str_intr&   ÚIntegerErrorrd   Ú
ValueErrorÚOverflowErrorrJ   rK   rK   rL   Úint_validator€   s   
ÿrl   c                 C   s&   t | tƒr| du s| du s| S t ¡ ‚r`   )rA   rE   r&   ri   rJ   rK   rK   rL   Ústrict_int_validator“   s   rm   c              	   C   ó4   t | tƒr| S zt| ƒW S  ttfy   t ¡ ‚w r@   )rA   rD   rd   rj   r&   Ú
FloatErrorrJ   rK   rK   rL   Úfloat_validator™   ó   

ÿrp   c                 C   ó   t | tƒr| S t ¡ ‚r@   )rA   rD   r&   ro   rJ   rK   rK   rL   Ústrict_float_validator£   ó   
rs   ÚNumberÚfieldr:   Úconfigr9   c                 C   sD   t |jdd ƒ}|d u r|j}|du r t | ¡st | ¡r t ¡ ‚| S )NÚallow_inf_nanF)ÚgetattrÚtype_rx   ÚmathÚisnanÚisinfr&   ÚNumberNotFiniteError)r>   rv   rw   rx   rK   rK   rL   Úfloat_finite_validator©   s   r   c                 C   sL   |j }|jd ur$t| ƒt|jƒ d }t|dƒs$t|dƒs$tj|jd�‚| S )Nr_   g        g      ð?)Úmultiple_of)rz   r€   rD   r4   r&   ÚNumberNotMultipleError)r>   rv   Ú
field_typeÚmodrK   rK   rL   Únumber_multiple_validator³   s   
r„   c                 C   s’   |j }|jd ur| |jkstj|jd�‚|jd ur%| |jks%tj|jd�‚|jd ur6| |jk s6tj|jd�‚|jd urG| |jksGtj	|jd�‚| S ©N©Úlimit_value)
rz   Úgtr&   ÚNumberNotGtErrorÚgeÚNumberNotGeErrorÚltÚNumberNotLtErrorÚleÚNumberNotLeError)r>   rv   r‚   rK   rK   rL   Únumber_size_validator¼   s   r�   r   c                 C   s    | |j krtj| |j gd�‚| S )zÆValidate ``const`` fields.

    The value provided for a ``const`` field must be equal to the default value
    of the field. This is to support the keyword of the same name in JSON
    Schema.
    ©ÚgivenÚ	permitted)Údefaultr&   ÚWrongConstantError)r>   rv   rK   rK   rL   Úconstant_validatorË   s   
r–   ÚStrBytesc                 C   sH   t | ƒ}|j}||k rtj|d�‚|j}|d ur"||kr"tj|d�‚| S r…   )rg   Úmin_anystr_lengthr&   ÚAnyStrMinLengthErrorÚmax_anystr_lengthÚAnyStrMaxLengthError)r>   rw   Úv_lenÚ
min_lengthÚ
max_lengthrK   rK   rL   Úanystr_length_validatorØ   s   rŸ   c                 C   ó   |   ¡ S r@   )ÚstriprJ   rK   rK   rL   Úanystr_strip_whitespaceæ   ó   r¢   c                 C   r    r@   )ÚupperrJ   rK   rK   rL   Úanystr_upperê   r£   r¥   c                 C   r    r@   )ra   rJ   rK   rK   rL   Úanystr_lowerî   r£   r¦   ÚAnyOrderedDictc              	   C   rn   r@   )rA   r   rd   rj   r&   Ú	DictErrorrJ   rK   rK   rL   Úordered_dict_validatorò   rq   r©   c              	   C   rn   r@   )rA   Údictrd   rj   r&   r¨   rJ   rK   rK   rL   Údict_validatorü   rq   r«   c                 C   ó&   t | tƒr| S t| ƒrt| ƒS t ¡ ‚r@   )rA   Úlistr6   r&   Ú	ListErrorrJ   rK   rK   rL   Úlist_validator  ó
   
r¯   .c                 C   r¬   r@   )rA   Útupler6   r&   Ú
TupleErrorrJ   rK   rK   rL   Útuple_validator  r°   r³   c                 C   r¬   r@   )rA   Úsetr6   r&   ÚSetErrorrJ   rK   rK   rL   Úset_validator  r°   r¶   c                 C   r¬   r@   )rA   Ú	frozensetr6   r&   ÚFrozenSetErrorrJ   rK   rK   rL   Úfrozenset_validator!  r°   r¹   c                 C   r¬   r@   )rA   r   r6   r&   Ú
DequeErrorrJ   rK   rK   rL   Údeque_validator*  r°   r»   c                 C   s@   z|  | ¡}W n ty   tjt|j ƒd�‚w |jr|jS |S )N)Úenum_values)rz   rj   r&   ÚEnumMemberErrorr­   Úuse_enum_valuesrC   )r>   rv   rw   Úenum_vrK   rK   rL   Úenum_member_validator3  s   þrÀ   c                 C   sª   z*t | tƒrt| ƒ} nt | ttfƒr)zt|  ¡ ƒ} W n ty(   t| d�} Y nw W n ty5   t ¡ ‚w t | tƒs?t ¡ ‚t	|j
dd ƒ}|rS| j|krStj|d�‚| S )N)rF   Ú_required_version)Úrequired_version)rA   rB   r$   rF   rG   rH   rj   r&   Ú	UUIDErrorry   rz   ÚversionÚUUIDVersionError)r>   rv   rÂ   rK   rK   rL   Úuuid_validator<  s&   

ý€ÿ
rÆ   c                 C   sh   t | tƒr| S t | ttfƒr|  ¡ } t| ƒ ¡ } zt| ƒ} W n ty)   t 	¡ ‚w |  
¡ s2t ¡ ‚| S r@   )rA   r	   rF   rG   rH   rB   r¡   r
   r&   ÚDecimalErrorÚ	is_finiteÚDecimalIsNotFiniteErrorrJ   rK   rK   rL   Údecimal_validatorT  s   
ÿrÊ   c                 C   rr   r@   )rA   r   r&   ÚHashableErrorrJ   rK   rK   rL   Úhashable_validatorg  s   
rÌ   c                 C   ó0   t | tƒr| S zt| ƒW S  ty   t ¡ ‚w r@   )rA   r   rj   r&   ÚIPv4AddressErrorrJ   rK   rK   rL   Úip_v4_address_validatorn  ó   

ÿrÏ   c                 C   rÍ   r@   )rA   r   rj   r&   ÚIPv6AddressErrorrJ   rK   rK   rL   Úip_v6_address_validatorx  rÐ   rÒ   c                 C   rÍ   )z£
    Assume IPv4Network initialised with a default ``strict`` argument

    See more:
    https://docs.python.org/library/ipaddress.html#ipaddress.IPv4Network
    )rA   r   rj   r&   ÚIPv4NetworkErrorrJ   rK   rK   rL   Úip_v4_network_validator‚  ó   

ÿrÔ   c                 C   rÍ   )z£
    Assume IPv6Network initialised with a default ``strict`` argument

    See more:
    https://docs.python.org/library/ipaddress.html#ipaddress.IPv6Network
    )rA   r   rj   r&   ÚIPv6NetworkErrorrJ   rK   rK   rL   Úip_v6_network_validator’  rÕ   r×   c                 C   rÍ   r@   )rA   r   rj   r&   ÚIPv4InterfaceErrorrJ   rK   rK   rL   Úip_v4_interface_validator¢  rÐ   rÙ   c                 C   rÍ   r@   )rA   r   rj   r&   ÚIPv6InterfaceErrorrJ   rK   rK   rL   Úip_v6_interface_validator¬  rÐ   rÛ   c                 C   rÍ   r@   )rA   r   rd   r&   Ú	PathErrorrJ   rK   rK   rL   Úpath_validator¶  rÐ   rÝ   c                 C   s   |   ¡ s
tj| d�‚| S )N)Úpath)Úexistsr&   ÚPathNotExistsErrorrJ   rK   rK   rL   Úpath_exists_validatorÀ  s   rá   c                 C   s   t | ƒr| S tj| d�‚)z�
    Perform a simple check if the value is callable.

    Note: complete matching of argument type hints and return types is not performed
    ©rC   )Úcallabler&   ÚCallableErrorrJ   rK   rK   rL   Úcallable_validatorÇ  s   rå   c                 C   ó   t | tƒr| S tj| d�‚©Nrâ   )rA   r   r&   Ú	EnumErrorrJ   rK   rK   rL   Úenum_validatorÓ  ó   
ré   c                 C   ræ   rç   )rA   r   r&   ÚIntEnumErrorrJ   rK   rK   rL   Úint_enum_validatorÚ  rê   rì   rz   c                    s2   t | ƒ‰dd„ ˆD ƒ‰ dtdtf‡ ‡fdd„}|S )Nc                 S   s   i | ]}||“qS rK   rK   )Ú.0r>   rK   rK   rL   Ú
<dictcomp>ç  s    z*make_literal_validator.<locals>.<dictcomp>r>   r?   c              	      s,   zˆ |  W S  t tfy   tj| ˆd�‚w )Nr‘   )ÚKeyErrorrd   r&   r•   rJ   ©Úallowed_choicesÚpermitted_choicesrK   rL   Úliteral_validatoré  s
   
ÿz1make_literal_validator.<locals>.literal_validator)r,   r   )rz   ró   rK   rð   rL   Úmake_literal_validatorá  s   rô   c                 C   sp   t | ƒ}|jjd ur|jjn|j}||k rtj|d�‚|jjd ur%|jjn|j}|d ur6||kr6tj|d�‚| S r…   )	rg   rz   r�   r˜   r&   r™   rž   rš   r›   )r>   rv   rw   rœ   r�   rž   rK   rK   rL   Úconstr_length_validatorò  s   rõ   c                 C   ó   |j jp|j}|r|  ¡ } | S r@   )rz   Ústrip_whitespacer¢   r¡   )r>   rv   rw   r÷   rK   rK   rL   Úconstr_strip_whitespace   ó   rø   c                 C   rö   r@   )rz   Úto_upperr¥   r¤   )r>   rv   rw   r¤   rK   rK   rL   Úconstr_upper  rù   rû   c                 C   rö   r@   )rz   Úto_lowerr¦   ra   )r>   rv   rw   ra   rK   rK   rL   Úconstr_lower  s   rý   c                 C   sD   | d u r| S z|  | ¡W S  ty   t ¡ ‚ ty!   t ¡ ‚w r@   )Ú
json_loadsrj   r&   Ú	JsonErrorrd   ÚJsonTypeError)r>   rw   rK   rK   rL   Úvalidate_json  s   ÿr  ÚTc                    s   dt dtf‡ fdd„}|S )Nr>   r?   c                    ó   t | ˆ ƒr| S tjˆ d�‚)N)Úexpected_arbitrary_type)rA   r&   ÚArbitraryTypeErrorrJ   ©rz   rK   rL   Úarbitrary_type_validator'  ó   
z?make_arbitrary_type_validator.<locals>.arbitrary_type_validator)r   r  )rz   r  rK   r  rL   Úmake_arbitrary_type_validator&  s   r	  c                    s   dt dtt f‡ fdd„}|S )Nr>   r?   c                    r  )N)Úexpected_class)r5   r&   ÚSubclassErrorrJ   r  rK   rL   Úclass_validator0  r  z-make_class_validator.<locals>.class_validator)r   r!   r  )rz   r  rK   r  rL   Úmake_class_validator/  s   r  c                 C   rr   r@   )rA   Útyper&   Ú
ClassErrorrJ   rK   rK   rL   Úany_class_validator8  rt   r  zLiteral[None]c                 C   s   | d u r| S t  ¡ ‚r@   )r&   ÚNotNoneErrorrJ   rK   rK   rL   Únone_validator>  s   r  c                 C   s<   t | tƒr| S t| ƒ}zt |¡W S  tjy   t ¡ ‚w r@   )rA   r   rM   ÚreÚcompileÚerrorr&   ÚPatternError)r>   Ú	str_valuerK   rK   rL   Úpattern_validatorD  s   
ÿr  ÚNamedTupleT)ÚboundÚnamedtuple_clsc                    sF   ddl m} |ˆ|ˆjd�‰ ˆ ˆ_dttdf dtf‡ ‡fdd„}|S )	Nr   )Úcreate_model_from_namedtuple©Ú
__config__Ú
__module__Úvalues.r?   c                    sT   ˆ j }t| ƒt|ƒkrtjt|ƒd�‚tt|| ƒƒ}tˆ di |¤Žƒ}ˆdi |¤ŽS )Nr†   rK   )Ú__annotations__rg   r&   ÚListMaxLengthErrorrª   Úzip)r   ÚannotationsÚdict_valuesÚvalidated_dict_values©ÚNamedTupleModelr  rK   rL   Únamedtuple_validator_  s   z7make_namedtuple_validator.<locals>.namedtuple_validator)Úpydantic.v1.annotated_typesr  r  Ú__pydantic_model__r    r   r  )r  rw   r  r)  rK   r'  rL   Úmake_namedtuple_validatorS  s   ý 
r,  Útypeddict_clsr8   c                    sD   ddl m} || || jd�‰ ˆ | _dddtttf f‡ fdd„}|S )	Nr   )Úcreate_model_from_typeddictr  r   r8   r?   c                    s   ˆ   | ¡jdd�S )NT)Úexclude_unset)Ú	parse_objrª   )r   ©ÚTypedDictModelrK   rL   Útypeddict_validatorx  s   z5make_typeddict_validator.<locals>.typeddict_validator)r*  r.  r  r+  r   rB   r   )r-  rw   r.  r3  rK   r1  rL   Úmake_typeddict_validatorl  s   ýr4  c                	   @   sB   e Zd Zddœdedededdfdd	„Zd
ed defdd„Z	dS )ÚIfConfigF©Úignored_valueÚ	validatorÚconfig_attr_namesr7  r?   Nc                G   s   || _ || _|| _d S r@   )r8  r9  r7  )Úselfr8  r7  r9  rK   rK   rL   Ú__init__  s   
zIfConfig.__init__rw   r9   c                    s   t ‡ ‡fdd„ˆjD ƒƒS )Nc                 3   s$   � | ]}t ˆ |ƒd ˆjhvV  qd S r@   )ry   r7  )rí   Úname©rw   r:  rK   rL   Ú	<genexpr>…  s   €" z!IfConfig.check.<locals>.<genexpr>)Úanyr9  )r:  rw   rK   r=  rL   Úcheck„  s   zIfConfig.check)
Ú__name__r  Ú__qualname__r+   rB   r   r;  r!   Úboolr@  rK   rK   rK   rL   r5  ~  s     r5  r˜   rš   rx   Tr6  Ú_VALIDATORSc           	   
   c   s  � ddl m}m} | tu s| tu rd S | j}|tks|tkr d S t| ƒr)t	V  d S | t
u s2| tj
u r7tV  d S | tu s?| tu rDtV  d S t| ƒrMtV  d S t| ƒrXt| ƒV  d S || ƒrf|| |ƒE d H  d S | tu rotV  d S | tu rxtV  d S t| ƒr‡tV  t| |ƒV  d S t| ƒr“t| |ƒV  d S t| ƒ}|d ur°|tur«t|tƒr«t |ƒV  d S t!V  d S t"D ]:\}}z"t#| |ƒr×|D ]}t|t$ƒrÏ| %|¡rÎ|j&V  q¾|V  q¾W  d S W q² t'yì   t(d| ›dt)| ƒ› d�ƒ‚w |j*r÷t+| ƒV  d S t,| dƒ�rt-d| j.› d�t/ƒ t(d	| › d
�ƒ‚)Nr   )Úis_builtin_dataclassÚmake_dataclass_validatorzerror checking inheritance of z (type: ú)Ú__pydantic_core_schema__z+Mixing V1 and V2 models is not supported. `z` is a V2 model.zno validator found for z), see `arbitrary_types_allowed` in Config)0Úpydantic.v1.dataclassesrE  rF  r   ÚobjectÚ	__class__r   r"   r2   r  r   r  r  r   ÚCollectionsHashablerÌ   r/   rå   r0   rô   r   ré   r   rì   r1   r³   r,  r3   r4  r.   rA   r  r  r  rD  Ú
issubclassr5  r@  r8  rd   ÚRuntimeErrorr-   Úarbitrary_types_allowedr	  Úhasattrr%   rA  ÚUserWarning)	rz   rw   rE  rF  Ú	type_typeÚclass_Úval_typeÚ
validatorsr>   rK   rK   rL   Úfind_validators»  s€   €

ÿ


€ùÿrV  )r>   ru   rv   r:   rw   r9   r?   ru   )r>   ru   rv   r:   r?   ru   )r>   r   rv   r:   r?   r   )r>   r—   rw   r9   r?   r—   )r>   r—   r?   r—   )r>   r—   rv   r:   rw   r9   r?   r—   )›r{   r  Úcollectionsr   r   Úcollections.abcr   rL  r   r   r   r   Údecimalr	   r
   Úenumr   r   Ú	ipaddressr   r   r   r   r   r   Úpathlibr   Útypingr   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   Úuuidr$   Úwarningsr%   Úpydantic.v1r&   Úpydantic.v1.datetime_parser'   r(   r)   r*   Úpydantic.v1.typingr+   r,   r-   r.   r/   r0   r1   r2   r3   Úpydantic.v1.utilsr4   r5   r6   Útyping_extensionsr7   r8   Úpydantic.v1.configr9   Úpydantic.v1.fieldsr:   Úpydantic.v1.typesr;   r<   r=   ÚConstrainedNumberr§   rE   rD   ru   rB   rF   r—   rM   rN   rQ   rR   rc   rb   rC  rf   rh   rl   rm   rp   rs   r   r„   r�   r–   rŸ   r¢   r¥   r¦   r©   r«   r¯   r³   r¶   r¹   r»   rÀ   rÆ   rÊ   rÌ   rÏ   rÒ   rÔ   r×   rÙ   rÛ   rÝ   rá   rå   ré   rì   rô   rõ   rø   rû   rý   r  r  r	  r  r  r  r  r  r,  r4  r5  rª   r­   r±   r´   r·   rD  r!  rV  rK   rK   rK   rL   Ú<module>   s   
  L,	




	






						








 $		ÿÿ
þÿÿ
þ

ûþ
ûþ
 Ó1ÿÿþ