�
�MMgrH �
�N � d Z ddlmZ ddlZddlZddlZddlZddlmZ dZ dZ
dZ ej d � Z
d
j edd� D � cg c] } | d
vs� e| � �� c} � Zd
j edd� D � cg c] } | dvs� e| � �� c} � Zd
j edd� D � cg c] } | dvr e| � �� c} � Zd
j edd� D � cg c] } | dvr e| � �� c} � Zd
j edd� D � cg c] } | dvr e| � �� c} � Zd
j edd� D � cg c] } | dvr e| � �� c} � Z ej dj/ ddddd�� � Z ej dj/ ddd�� � Z ej d� ej d� ej d� ej d� ej d� ej d� ej d� ej d� d�Z ej d� Z ej d � Z G d!� d"ej: � Zd+d,d#�Zd-d$�Z d.d%�Z!d/d&�Z"d0d'�Z#d1d(�Z$d2d)�Z%d2d*�Z&yc c} w c c} w c c} w c c} w c c} w c c} w )3a�
An implementation of `urlparse` that provides URL validation and normalization
as described by RFC3986.
We rely on this implementation rather than the one in Python's stdlib, because:
* It provides more complete URL validation.
* It properly differentiates between an empty querystring and an absent querystring,
to distinguish URLs with a trailing '?'.
* It handles scheme, hostname, port, and path normalization.
* It supports IDNA hostnames, normalizing them to their encoded form.
* The API supports passing individual components, as well as the complete URL string.
Previously we relied on the excellent `rfc3986` package to handle URL parsing and
validation, but this module provides a simpler alternative, with less indirection
required.
� )�annotationsN� )�
InvalidURLi zBABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~z!$&'()*+,;=z%[A-Fa-f0-9]{2}� � � )r �"