
    j                     ^    d Z ddlmZ ddlZddlmZ defdZdefdZedefd	            Z	dS )
zBTC Address.    )sha256N)	validatoraddrc           	      j    dt          fdt          | ddd                   D                       S )zDecode base58.:123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyzc              3   T   K   | ]"\  }}d |z                       |          z  V  #dS ):   N)index).0enmidxalphabets      j/var/www/html/Carbon-Document/venv/lib/python3.11/site-packages/validators/crypto_addresses/btc_address.py	<genexpr>z!_decode_base58.<locals>.<genexpr>   s<      UU83C8>>#...UUUUUU    N)sum	enumerate)r   r   s    @r   _decode_base58r      s>    KHUUUUyddPRd?T?TUUUUUUr   c                 J   t          |           t          dd          vrdS t          |                               dd          }|dd         |dd         }}|t	          t	          |                                                                                    dd         k    S )z%Validate P2PKH and P2SH type address.   #   FbigN   )lenranger   to_bytesr   digest)r   decoded_bytesheaderchecksums       r   _validate_old_btc_addressr#      s    
4yyb"%%u"4((11"e<<M$SbS)=+=HFvfVnn335566==??CCCr   valuec                    | sdS | dd         dv r't          j        d                              |           nt          |           S )a  Return whether or not given value is a valid bitcoin address.

    Full validation is implemented for P2PKH and P2SH addresses.
    For segwit addresses a regexp is used to provide a reasonable
    estimate on whether the address is valid.

    Examples:
        >>> btc_address('3Cwgr2g7vsi1bXDUkpEnVoRLA9w4FZfC69')
        True
        >>> btc_address('1BvBMsEYstWetqTFn5Au4m4GFg7xJaNVN2')
        ValidationError(func=btc_address, args={'value': '1BvBMsEYstWetqTFn5Au4m4GFg7xJaNVN2'})

    Args:
        value:
            Bitcoin address string to validate.

    Returns:
        (Literal[True]): If `value` is a valid bitcoin address.
        (ValidationError): If `value` is an invalid bitcoin address.
    FN   )bctbz%^(bc|tc)[0-3][02-9ac-hj-np-z]{14,74}$)recompilematchr#   )r$   s    r   btc_addressr,      sW    ,  u
 !9$$ 	
;<<BB5III&u--	r   )
__doc__hashlibr   r)   validators.utilsr   strr   r#   r,    r   r   <module>r2      s            				 ' & & & & &V V V V VDC D D D D s      r   