tag.
+
+
+Version 1.1.5
+-------------
+
+
+Version 1.1.4
+-------------
+
+
+Version 1.1.3 (July 10, 2012)
+-----------------------------
+
+* Fix parsing bare URLs when parse_email=True.
+
+
+Version 1.1.2 (June 1, 2012)
+----------------------------
+
+* Fix hang in style attribute sanitizer. (#61)
+
+* Allow ``/`` in style attribute values.
+
+
+Version 1.1.1 (February 17, 2012)
+---------------------------------
+
+* Fix tokenizer for html5lib 0.9.5.
+
+
+Version 1.1.0 (October 24, 2011)
+--------------------------------
+
+* ``linkify()`` now understands port numbers. (#38)
+
+* Documented character encoding behavior. (#41)
+
+* Add an optional target argument to ``linkify()``.
+
+* Add ``delinkify()`` method. (#45)
+
+* Support subdomain whitelist for ``delinkify()``. (#47, #48)
+
+
+Version 1.0.4 (September 2, 2011)
+---------------------------------
+
+* Switch to SemVer git tags.
+
+* Make ``linkify()`` smarter about trailing punctuation. (#30)
+
+* Pass ``exc_info`` to logger during rendering issues.
+
+* Add wildcard key for attributes. (#19)
+
+* Make ``linkify()`` use the ``HTMLSanitizer`` tokenizer. (#36)
+
+* Fix URLs wrapped in parentheses. (#23)
+
+* Make ``linkify()`` UTF-8 safe. (#33)
+
+
+Version 1.0.3 (June 14, 2011)
+-----------------------------
+
+* ``linkify()`` works with 3rd level domains. (#24)
+
+* ``clean()`` supports vendor prefixes in style values. (#31, #32)
+
+* Fix ``linkify()`` email escaping.
+
+
+Version 1.0.2 (June 6, 2011)
+----------------------------
+
+* ``linkify()`` supports email addresses.
+
+* ``clean()`` supports callables in attributes filter.
+
+
+Version 1.0.1 (April 12, 2011)
+------------------------------
+
+* ``linkify()`` doesn't drop trailing slashes. (#21)
+* ``linkify()`` won't linkify 'libgl.so.1'. (#22)
diff --git a/Backend/venv/lib/python3.12/site-packages/bleach-6.1.0.dist-info/RECORD b/Backend/venv/lib/python3.12/site-packages/bleach-6.1.0.dist-info/RECORD
new file mode 100644
index 00000000..df992587
--- /dev/null
+++ b/Backend/venv/lib/python3.12/site-packages/bleach-6.1.0.dist-info/RECORD
@@ -0,0 +1,103 @@
+bleach-6.1.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
+bleach-6.1.0.dist-info/LICENSE,sha256=vsIjjBSaYyuPsmgT9oes6rq4AyfzJwdpwsFhV4g9MTA,569
+bleach-6.1.0.dist-info/METADATA,sha256=1SuJgikPmVEIDjs_NHu_oLycasw9HiTE19bLhRC8FSw,30425
+bleach-6.1.0.dist-info/RECORD,,
+bleach-6.1.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
+bleach-6.1.0.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
+bleach-6.1.0.dist-info/top_level.txt,sha256=dcv0wKIySB0zMjAEXLwY4V0-3IN9UZQGAT1wDmfQICY,7
+bleach/__init__.py,sha256=bCOdn7NC262aA1v98sl-lklPqeaw_5LiXqYSf-XAwUM,3649
+bleach/__pycache__/__init__.cpython-312.pyc,,
+bleach/__pycache__/callbacks.cpython-312.pyc,,
+bleach/__pycache__/css_sanitizer.cpython-312.pyc,,
+bleach/__pycache__/html5lib_shim.cpython-312.pyc,,
+bleach/__pycache__/linkifier.cpython-312.pyc,,
+bleach/__pycache__/parse_shim.cpython-312.pyc,,
+bleach/__pycache__/sanitizer.cpython-312.pyc,,
+bleach/_vendor/README.rst,sha256=eXeKT2JdZB4WX1kuhTa8W9Jp9VXtwIKFxo5RUL5exmM,2160
+bleach/_vendor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
+bleach/_vendor/__pycache__/__init__.cpython-312.pyc,,
+bleach/_vendor/__pycache__/parse.cpython-312.pyc,,
+bleach/_vendor/html5lib-1.1.dist-info/AUTHORS.rst,sha256=DrNAMifoDpuQyJn-KW-H6K8Tt2a5rKnV2UF4-DRrGUI,983
+bleach/_vendor/html5lib-1.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
+bleach/_vendor/html5lib-1.1.dist-info/LICENSE,sha256=FqOZkWGekvGGgJMtoqkZn999ld8-yu3FLqBiGKq6_W8,1084
+bleach/_vendor/html5lib-1.1.dist-info/METADATA,sha256=Y3w-nd_22HQnQRy3yypVsV_ke2FF94uUD4-vGpc2DnI,16076
+bleach/_vendor/html5lib-1.1.dist-info/RECORD,sha256=u-y_W5lhdsHC1OSMnA4bCi3-11IgQ_FAIW6viMu8_LA,3486
+bleach/_vendor/html5lib-1.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
+bleach/_vendor/html5lib-1.1.dist-info/WHEEL,sha256=kGT74LWyRUZrL4VgLh6_g12IeVl_9u9ZVhadrgXZUEY,110
+bleach/_vendor/html5lib-1.1.dist-info/top_level.txt,sha256=XEX6CHpskSmvjJB4tP6m4Q5NYXhIf_0ceMc0PNbzJPQ,9
+bleach/_vendor/html5lib/__init__.py,sha256=pWnYcfZ69wNLrdQL7bpr49FUi8O8w0KhKCOHsyRgYGQ,1143
+bleach/_vendor/html5lib/__pycache__/__init__.cpython-312.pyc,,
+bleach/_vendor/html5lib/__pycache__/_ihatexml.cpython-312.pyc,,
+bleach/_vendor/html5lib/__pycache__/_inputstream.cpython-312.pyc,,
+bleach/_vendor/html5lib/__pycache__/_tokenizer.cpython-312.pyc,,
+bleach/_vendor/html5lib/__pycache__/_utils.cpython-312.pyc,,
+bleach/_vendor/html5lib/__pycache__/constants.cpython-312.pyc,,
+bleach/_vendor/html5lib/__pycache__/html5parser.cpython-312.pyc,,
+bleach/_vendor/html5lib/__pycache__/serializer.cpython-312.pyc,,
+bleach/_vendor/html5lib/_ihatexml.py,sha256=ifOwF7pXqmyThIXc3boWc96s4MDezqRrRVp7FwDYUFs,16728
+bleach/_vendor/html5lib/_inputstream.py,sha256=IKuMiY8rzb7pqIGCpbvTqsxysLEpgEHWYvYEFu4LUAI,32300
+bleach/_vendor/html5lib/_tokenizer.py,sha256=WvJQa2Mli4NtTmhLXkX8Jy5FcWttqCaiDTiKyaw8D-k,77028
+bleach/_vendor/html5lib/_trie/__init__.py,sha256=nqfgO910329BEVJ5T4psVwQtjd2iJyEXQ2-X8c1YxwU,109
+bleach/_vendor/html5lib/_trie/__pycache__/__init__.cpython-312.pyc,,
+bleach/_vendor/html5lib/_trie/__pycache__/_base.cpython-312.pyc,,
+bleach/_vendor/html5lib/_trie/__pycache__/py.cpython-312.pyc,,
+bleach/_vendor/html5lib/_trie/_base.py,sha256=CaybYyMro8uERQYjby2tTeSUatnWDfWroUN9N7ety5w,1013
+bleach/_vendor/html5lib/_trie/py.py,sha256=zg7RZSHxJ8mLmuI_7VEIV8AomISrgkvqCP477AgXaG0,1763
+bleach/_vendor/html5lib/_utils.py,sha256=AxAJSG15eyarCgKMnlUwzs1X6jFHXqEvhlYEOxAFmis,4919
+bleach/_vendor/html5lib/constants.py,sha256=Ll-yzLU_jcjyAI_h57zkqZ7aQWE5t5xA4y_jQgoUUhw,83464
+bleach/_vendor/html5lib/filters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
+bleach/_vendor/html5lib/filters/__pycache__/__init__.cpython-312.pyc,,
+bleach/_vendor/html5lib/filters/__pycache__/alphabeticalattributes.cpython-312.pyc,,
+bleach/_vendor/html5lib/filters/__pycache__/base.cpython-312.pyc,,
+bleach/_vendor/html5lib/filters/__pycache__/inject_meta_charset.cpython-312.pyc,,
+bleach/_vendor/html5lib/filters/__pycache__/lint.cpython-312.pyc,,
+bleach/_vendor/html5lib/filters/__pycache__/optionaltags.cpython-312.pyc,,
+bleach/_vendor/html5lib/filters/__pycache__/sanitizer.cpython-312.pyc,,
+bleach/_vendor/html5lib/filters/__pycache__/whitespace.cpython-312.pyc,,
+bleach/_vendor/html5lib/filters/alphabeticalattributes.py,sha256=lViZc2JMCclXi_5gduvmdzrRxtO5Xo9ONnbHBVCsykU,919
+bleach/_vendor/html5lib/filters/base.py,sha256=z-IU9ZAYjpsVsqmVt7kuWC63jR11hDMr6CVrvuao8W0,286
+bleach/_vendor/html5lib/filters/inject_meta_charset.py,sha256=egDXUEHXmAG9504xz0K6ALDgYkvUrC2q15YUVeNlVQg,2945
+bleach/_vendor/html5lib/filters/lint.py,sha256=upXATs6By7cot7o0bnNqR15sPq2Fn6Vnjvoy3gyO_rY,3631
+bleach/_vendor/html5lib/filters/optionaltags.py,sha256=8lWT75J0aBOHmPgfmqTHSfPpPMp01T84NKu0CRedxcE,10588
+bleach/_vendor/html5lib/filters/sanitizer.py,sha256=XGNSdzIqDTaHot1V-rRj1V_XOolApJ7n95tHP9JcgNU,26885
+bleach/_vendor/html5lib/filters/whitespace.py,sha256=8eWqZxd4UC4zlFGW6iyY6f-2uuT8pOCSALc3IZt7_t4,1214
+bleach/_vendor/html5lib/html5parser.py,sha256=w5hZJh0cvD3g4CS196DiTmuGpSKCMYe1GS46-yf_WZQ,117174
+bleach/_vendor/html5lib/serializer.py,sha256=K2kfoLyMPMFPfdusfR30SrxNkf0mJB92-P5_RntyaaI,15747
+bleach/_vendor/html5lib/treeadapters/__init__.py,sha256=18hyI-at2aBsdKzpwRwa5lGF1ipgctaTYXoU9En2ZQg,650
+bleach/_vendor/html5lib/treeadapters/__pycache__/__init__.cpython-312.pyc,,
+bleach/_vendor/html5lib/treeadapters/__pycache__/genshi.cpython-312.pyc,,
+bleach/_vendor/html5lib/treeadapters/__pycache__/sax.cpython-312.pyc,,
+bleach/_vendor/html5lib/treeadapters/genshi.py,sha256=CH27pAsDKmu4ZGkAUrwty7u0KauGLCZRLPMzaO3M5vo,1715
+bleach/_vendor/html5lib/treeadapters/sax.py,sha256=BKS8woQTnKiqeffHsxChUqL4q2ZR_wb5fc9MJ3zQC8s,1776
+bleach/_vendor/html5lib/treebuilders/__init__.py,sha256=AysSJyvPfikCMMsTVvaxwkgDieELD5dfR8FJIAuq7hY,3592
+bleach/_vendor/html5lib/treebuilders/__pycache__/__init__.cpython-312.pyc,,
+bleach/_vendor/html5lib/treebuilders/__pycache__/base.cpython-312.pyc,,
+bleach/_vendor/html5lib/treebuilders/__pycache__/dom.cpython-312.pyc,,
+bleach/_vendor/html5lib/treebuilders/__pycache__/etree.cpython-312.pyc,,
+bleach/_vendor/html5lib/treebuilders/__pycache__/etree_lxml.cpython-312.pyc,,
+bleach/_vendor/html5lib/treebuilders/base.py,sha256=oeZNGEB-kt90YJGVH05gb5a8E7ids2AbYwGRsVCieWk,14553
+bleach/_vendor/html5lib/treebuilders/dom.py,sha256=22whb0C71zXIsai5mamg6qzBEiigcBIvaDy4Asw3at0,8925
+bleach/_vendor/html5lib/treebuilders/etree.py,sha256=EbmHx-wQ-11MVucTPtF7Ul92-mQGN3Udu_KfDn-Ifhk,12824
+bleach/_vendor/html5lib/treebuilders/etree_lxml.py,sha256=OazDHZGO_q4FnVs4Dhs4hzzn2JwGAOs-rfV8LAlUGW4,14754
+bleach/_vendor/html5lib/treewalkers/__init__.py,sha256=OBPtc1TU5mGyy18QDMxKEyYEz0wxFUUNj5v0-XgmYhY,5719
+bleach/_vendor/html5lib/treewalkers/__pycache__/__init__.cpython-312.pyc,,
+bleach/_vendor/html5lib/treewalkers/__pycache__/base.cpython-312.pyc,,
+bleach/_vendor/html5lib/treewalkers/__pycache__/dom.cpython-312.pyc,,
+bleach/_vendor/html5lib/treewalkers/__pycache__/etree.cpython-312.pyc,,
+bleach/_vendor/html5lib/treewalkers/__pycache__/etree_lxml.cpython-312.pyc,,
+bleach/_vendor/html5lib/treewalkers/__pycache__/genshi.cpython-312.pyc,,
+bleach/_vendor/html5lib/treewalkers/base.py,sha256=ouiOsuSzvI0KgzdWP8PlxIaSNs9falhbiinAEc_UIJY,7476
+bleach/_vendor/html5lib/treewalkers/dom.py,sha256=EHyFR8D8lYNnyDU9lx_IKigVJRyecUGua0mOi7HBukc,1413
+bleach/_vendor/html5lib/treewalkers/etree.py,sha256=gkD4tfEfRWPsEGvgHHJxZmKZXUvBzVVGz3v5C_MIiOE,4539
+bleach/_vendor/html5lib/treewalkers/etree_lxml.py,sha256=eLedbn6nPjlpebibsWVijey7WEpzDwxU3ubwUoudBuA,6345
+bleach/_vendor/html5lib/treewalkers/genshi.py,sha256=4D2PECZ5n3ZN3qu3jMl9yY7B81jnQApBQSVlfaIuYbA,2309
+bleach/_vendor/parse.py,sha256=Rq-WbjO2JHrh1X2UWRFaPrRs2p-AnJ8U4FKrwv6NrLI,39023
+bleach/_vendor/parse.py.SHA256SUM,sha256=-AaiqN-9otw_X0vFjKkbKWFvkp68iLME92_wI-8-vm0,75
+bleach/_vendor/vendor.txt,sha256=6FFZyenumgWqnhLgbCa4yzL4HVNaSUDC2DHNyR5Fy6w,184
+bleach/_vendor/vendor_install.sh,sha256=x_Pn4dkfzPMJCZKwHHFxp0EAL5RsIfz-HSdTWHuI4yA,453
+bleach/callbacks.py,sha256=JNTGiM5_3bKsGltpR9ZYEz_C_b7-vfDlTTdQCirbdyc,752
+bleach/css_sanitizer.py,sha256=QFMxRKBUMSuNvYkVpB2WRBQO609eFbU-p9P_LhU6jtM,2526
+bleach/html5lib_shim.py,sha256=cWdAh70QZWz4MwtihdiA1gZJ0hTkvRjUYurE4uoCHCg,23294
+bleach/linkifier.py,sha256=vWOXKuRXirpCwejUEEyfe8EWJ7rBlieMDEerg95OhPU,22375
+bleach/parse_shim.py,sha256=VDPOdBOKbuDEceKVvfoggcr6A332bkcq4Z8jMtOJlAQ,50
+bleach/sanitizer.py,sha256=JqDuTINOybpc_eHBzG_H7cnkHdFskZGbfsaBc-hDPH8,21934
diff --git a/Backend/venv/lib/python3.12/site-packages/bleach-6.1.0.dist-info/REQUESTED b/Backend/venv/lib/python3.12/site-packages/bleach-6.1.0.dist-info/REQUESTED
new file mode 100644
index 00000000..e69de29b
diff --git a/Backend/venv/lib/python3.12/site-packages/bleach-6.1.0.dist-info/WHEEL b/Backend/venv/lib/python3.12/site-packages/bleach-6.1.0.dist-info/WHEEL
new file mode 100644
index 00000000..7e688737
--- /dev/null
+++ b/Backend/venv/lib/python3.12/site-packages/bleach-6.1.0.dist-info/WHEEL
@@ -0,0 +1,5 @@
+Wheel-Version: 1.0
+Generator: bdist_wheel (0.41.2)
+Root-Is-Purelib: true
+Tag: py3-none-any
+
diff --git a/Backend/venv/lib/python3.12/site-packages/bleach-6.1.0.dist-info/top_level.txt b/Backend/venv/lib/python3.12/site-packages/bleach-6.1.0.dist-info/top_level.txt
new file mode 100644
index 00000000..a02d6008
--- /dev/null
+++ b/Backend/venv/lib/python3.12/site-packages/bleach-6.1.0.dist-info/top_level.txt
@@ -0,0 +1 @@
+bleach
diff --git a/Backend/venv/lib/python3.12/site-packages/bleach/__init__.py b/Backend/venv/lib/python3.12/site-packages/bleach/__init__.py
new file mode 100644
index 00000000..12e93b4d
--- /dev/null
+++ b/Backend/venv/lib/python3.12/site-packages/bleach/__init__.py
@@ -0,0 +1,125 @@
+from bleach.linkifier import (
+ DEFAULT_CALLBACKS,
+ Linker,
+)
+from bleach.sanitizer import (
+ ALLOWED_ATTRIBUTES,
+ ALLOWED_PROTOCOLS,
+ ALLOWED_TAGS,
+ Cleaner,
+)
+
+
+# yyyymmdd
+__releasedate__ = "20231006"
+# x.y.z or x.y.z.dev0 -- semver
+__version__ = "6.1.0"
+
+
+__all__ = ["clean", "linkify"]
+
+
+def clean(
+ text,
+ tags=ALLOWED_TAGS,
+ attributes=ALLOWED_ATTRIBUTES,
+ protocols=ALLOWED_PROTOCOLS,
+ strip=False,
+ strip_comments=True,
+ css_sanitizer=None,
+):
+ """Clean an HTML fragment of malicious content and return it
+
+ This function is a security-focused function whose sole purpose is to
+ remove malicious content from a string such that it can be displayed as
+ content in a web page.
+
+ This function is not designed to use to transform content to be used in
+ non-web-page contexts.
+
+ Example::
+
+ import bleach
+
+ better_text = bleach.clean(yucky_text)
+
+
+ .. Note::
+
+ If you're cleaning a lot of text and passing the same argument values or
+ you want more configurability, consider using a
+ :py:class:`bleach.sanitizer.Cleaner` instance.
+
+ :arg str text: the text to clean
+
+ :arg set tags: set of allowed tags; defaults to
+ ``bleach.sanitizer.ALLOWED_TAGS``
+
+ :arg dict attributes: allowed attributes; can be a callable, list or dict;
+ defaults to ``bleach.sanitizer.ALLOWED_ATTRIBUTES``
+
+ :arg list protocols: allowed list of protocols for links; defaults
+ to ``bleach.sanitizer.ALLOWED_PROTOCOLS``
+
+ :arg bool strip: whether or not to strip disallowed elements
+
+ :arg bool strip_comments: whether or not to strip HTML comments
+
+ :arg CSSSanitizer css_sanitizer: instance with a "sanitize_css" method for
+ sanitizing style attribute values and style text; defaults to None
+
+ :returns: cleaned text as unicode
+
+ """
+ cleaner = Cleaner(
+ tags=tags,
+ attributes=attributes,
+ protocols=protocols,
+ strip=strip,
+ strip_comments=strip_comments,
+ css_sanitizer=css_sanitizer,
+ )
+ return cleaner.clean(text)
+
+
+def linkify(text, callbacks=DEFAULT_CALLBACKS, skip_tags=None, parse_email=False):
+ """Convert URL-like strings in an HTML fragment to links
+
+ This function converts strings that look like URLs, domain names and email
+ addresses in text that may be an HTML fragment to links, while preserving:
+
+ 1. links already in the string
+ 2. urls found in attributes
+ 3. email addresses
+
+ linkify does a best-effort approach and tries to recover from bad
+ situations due to crazy text.
+
+ .. Note::
+
+ If you're linking a lot of text and passing the same argument values or
+ you want more configurability, consider using a
+ :py:class:`bleach.linkifier.Linker` instance.
+
+ .. Note::
+
+ If you have text that you want to clean and then linkify, consider using
+ the :py:class:`bleach.linkifier.LinkifyFilter` as a filter in the clean
+ pass. That way you're not parsing the HTML twice.
+
+ :arg str text: the text to linkify
+
+ :arg list callbacks: list of callbacks to run when adjusting tag attributes;
+ defaults to ``bleach.linkifier.DEFAULT_CALLBACKS``
+
+ :arg list skip_tags: list of tags that you don't want to linkify the
+ contents of; for example, you could set this to ``['pre']`` to skip
+ linkifying contents of ``pre`` tags
+
+ :arg bool parse_email: whether or not to linkify email addresses
+
+ :returns: linkified text as unicode
+
+ """
+ linker = Linker(callbacks=callbacks, skip_tags=skip_tags, parse_email=parse_email)
+ return linker.linkify(text)
diff --git a/Backend/venv/lib/python3.12/site-packages/bleach/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/bleach/__pycache__/__init__.cpython-312.pyc
new file mode 100644
index 00000000..25b2c08e
Binary files /dev/null and b/Backend/venv/lib/python3.12/site-packages/bleach/__pycache__/__init__.cpython-312.pyc differ
diff --git a/Backend/venv/lib/python3.12/site-packages/bleach/__pycache__/callbacks.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/bleach/__pycache__/callbacks.cpython-312.pyc
new file mode 100644
index 00000000..f05236ac
Binary files /dev/null and b/Backend/venv/lib/python3.12/site-packages/bleach/__pycache__/callbacks.cpython-312.pyc differ
diff --git a/Backend/venv/lib/python3.12/site-packages/bleach/__pycache__/css_sanitizer.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/bleach/__pycache__/css_sanitizer.cpython-312.pyc
new file mode 100644
index 00000000..0e57c517
Binary files /dev/null and b/Backend/venv/lib/python3.12/site-packages/bleach/__pycache__/css_sanitizer.cpython-312.pyc differ
diff --git a/Backend/venv/lib/python3.12/site-packages/bleach/__pycache__/html5lib_shim.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/bleach/__pycache__/html5lib_shim.cpython-312.pyc
new file mode 100644
index 00000000..7c9264f3
Binary files /dev/null and b/Backend/venv/lib/python3.12/site-packages/bleach/__pycache__/html5lib_shim.cpython-312.pyc differ
diff --git a/Backend/venv/lib/python3.12/site-packages/bleach/__pycache__/linkifier.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/bleach/__pycache__/linkifier.cpython-312.pyc
new file mode 100644
index 00000000..3ab87ba6
Binary files /dev/null and b/Backend/venv/lib/python3.12/site-packages/bleach/__pycache__/linkifier.cpython-312.pyc differ
diff --git a/Backend/venv/lib/python3.12/site-packages/bleach/__pycache__/parse_shim.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/bleach/__pycache__/parse_shim.cpython-312.pyc
new file mode 100644
index 00000000..2faa0926
Binary files /dev/null and b/Backend/venv/lib/python3.12/site-packages/bleach/__pycache__/parse_shim.cpython-312.pyc differ
diff --git a/Backend/venv/lib/python3.12/site-packages/bleach/__pycache__/sanitizer.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/bleach/__pycache__/sanitizer.cpython-312.pyc
new file mode 100644
index 00000000..6f695eab
Binary files /dev/null and b/Backend/venv/lib/python3.12/site-packages/bleach/__pycache__/sanitizer.cpython-312.pyc differ
diff --git a/Backend/venv/lib/python3.12/site-packages/bleach/_vendor/README.rst b/Backend/venv/lib/python3.12/site-packages/bleach/_vendor/README.rst
new file mode 100644
index 00000000..e53aede0
--- /dev/null
+++ b/Backend/venv/lib/python3.12/site-packages/bleach/_vendor/README.rst
@@ -0,0 +1,61 @@
+=======================
+Vendored library policy
+=======================
+
+To simplify Bleach development, we're now vendoring certain libraries that
+we use.
+
+Vendored libraries must follow these rules:
+
+1. Vendored libraries must be pure Python--no compiling.
+2. Source code for the libary is included in this directory.
+3. License must be included in this repo and in the Bleach distribution.
+4. Requirements of the library become requirements of Bleach.
+5. No modifications to the library may be made.
+
+
+Adding/Updating a vendored library
+==================================
+
+Way to vendor a library or update a version:
+
+1. Update ``vendor.txt`` with the library, version, and hash. You can use
+ `hashin `_.
+2. Remove all old files and directories of the old version.
+3. Run ``pip_install_vendor.sh`` and check everything it produced in including
+ the ``.dist-info`` directory and contents.
+4. Update the bleach minor version in the next release.
+
+
+Reviewing a change involving a vendored library
+===============================================
+
+Way to verify a vendored library addition/update:
+
+1. Pull down the branch.
+2. Delete all the old files and directories of the old version.
+3. Run ``pip_install_vendor.sh``.
+4. Run ``git diff`` and verify there are no changes.
+
+
+NB: the current ``vendor.txt`` was generated with pip 20.2.3, which might be necessary to reproduce the dist-info
+
+
+Removing/Unvendoring a vendored library
+=======================================
+
+A vendored library might be removed for any of the following reasons:
+
+* it violates the vendoring policy (e.g. an incompatible license
+ change)
+* a suitable replacement is found
+* bleach has the resources to test and QA new bleach releases against
+ multiple versions of the previously vendored library
+
+To unvendor a library:
+
+1. Remove the library and its hashes from ``vendor.txt``.
+2. Remove library files and directories from this directory.
+3. Run ``install_vendor.sh`` and check the previously vendored library including
+ the ``.dist-info`` directory and contents is not installed.
+4. Update the bleach minor version in the next release.
diff --git a/Backend/venv/lib/python3.12/site-packages/bleach/_vendor/__init__.py b/Backend/venv/lib/python3.12/site-packages/bleach/_vendor/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/Backend/venv/lib/python3.12/site-packages/bleach/_vendor/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/bleach/_vendor/__pycache__/__init__.cpython-312.pyc
new file mode 100644
index 00000000..2a651707
Binary files /dev/null and b/Backend/venv/lib/python3.12/site-packages/bleach/_vendor/__pycache__/__init__.cpython-312.pyc differ
diff --git a/Backend/venv/lib/python3.12/site-packages/bleach/_vendor/__pycache__/parse.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/bleach/_vendor/__pycache__/parse.cpython-312.pyc
new file mode 100644
index 00000000..f217c156
Binary files /dev/null and b/Backend/venv/lib/python3.12/site-packages/bleach/_vendor/__pycache__/parse.cpython-312.pyc differ
diff --git a/Backend/venv/lib/python3.12/site-packages/bleach/_vendor/html5lib-1.1.dist-info/AUTHORS.rst b/Backend/venv/lib/python3.12/site-packages/bleach/_vendor/html5lib-1.1.dist-info/AUTHORS.rst
new file mode 100644
index 00000000..90401390
--- /dev/null
+++ b/Backend/venv/lib/python3.12/site-packages/bleach/_vendor/html5lib-1.1.dist-info/AUTHORS.rst
@@ -0,0 +1,66 @@
+Credits
+=======
+
+``html5lib`` is written and maintained by:
+
+- James Graham
+- Sam Sneddon
+- Łukasz Langa
+- Will Kahn-Greene
+
+
+Patches and suggestions
+-----------------------
+(In chronological order, by first commit:)
+
+- Anne van Kesteren
+- Lachlan Hunt
+- lantis63
+- Sam Ruby
+- Thomas Broyer
+- Tim Fletcher
+- Mark Pilgrim
+- Ryan King
+- Philip Taylor
+- Edward Z. Yang
+- fantasai
+- Philip Jägenstedt
+- Ms2ger
+- Mohammad Taha Jahangir
+- Andy Wingo
+- Andreas Madsack
+- Karim Valiev
+- Juan Carlos Garcia Segovia
+- Mike West
+- Marc DM
+- Simon Sapin
+- Michael[tm] Smith
+- Ritwik Gupta
+- Marc Abramowitz
+- Tony Lopes
+- lilbludevil
+- Kevin
+- Drew Hubl
+- Austin Kumbera
+- Jim Baker
+- Jon Dufresne
+- Donald Stufft
+- Alex Gaynor
+- Nik Nyby
+- Jakub Wilk
+- Sigmund Cherem
+- Gabi Davar
+- Florian Mounier
+- neumond
+- Vitalik Verhovodov
+- Kovid Goyal
+- Adam Chainz
+- John Vandenberg
+- Eric Amorde
+- Benedikt Morbach
+- Jonathan Vanasco
+- Tom Most
+- Ville Skyttä
+- Hugo van Kemenade
+- Mark Vasilkov
+
diff --git a/Backend/venv/lib/python3.12/site-packages/bleach/_vendor/html5lib-1.1.dist-info/INSTALLER b/Backend/venv/lib/python3.12/site-packages/bleach/_vendor/html5lib-1.1.dist-info/INSTALLER
new file mode 100644
index 00000000..a1b589e3
--- /dev/null
+++ b/Backend/venv/lib/python3.12/site-packages/bleach/_vendor/html5lib-1.1.dist-info/INSTALLER
@@ -0,0 +1 @@
+pip
diff --git a/Backend/venv/lib/python3.12/site-packages/bleach/_vendor/html5lib-1.1.dist-info/LICENSE b/Backend/venv/lib/python3.12/site-packages/bleach/_vendor/html5lib-1.1.dist-info/LICENSE
new file mode 100644
index 00000000..c87fa7a0
--- /dev/null
+++ b/Backend/venv/lib/python3.12/site-packages/bleach/_vendor/html5lib-1.1.dist-info/LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2006-2013 James Graham and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/Backend/venv/lib/python3.12/site-packages/bleach/_vendor/html5lib-1.1.dist-info/METADATA b/Backend/venv/lib/python3.12/site-packages/bleach/_vendor/html5lib-1.1.dist-info/METADATA
new file mode 100644
index 00000000..ee83c1f8
--- /dev/null
+++ b/Backend/venv/lib/python3.12/site-packages/bleach/_vendor/html5lib-1.1.dist-info/METADATA
@@ -0,0 +1,552 @@
+Metadata-Version: 2.1
+Name: html5lib
+Version: 1.1
+Summary: HTML parser based on the WHATWG HTML specification
+Home-page: https://github.com/html5lib/html5lib-python
+Maintainer: James Graham
+Maintainer-email: james@hoppipolla.co.uk
+License: MIT License
+Platform: UNKNOWN
+Classifier: Development Status :: 5 - Production/Stable
+Classifier: Intended Audience :: Developers
+Classifier: License :: OSI Approved :: MIT License
+Classifier: Operating System :: OS Independent
+Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: 2
+Classifier: Programming Language :: Python :: 2.7
+Classifier: Programming Language :: Python :: 3
+Classifier: Programming Language :: Python :: 3.5
+Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: Implementation :: CPython
+Classifier: Programming Language :: Python :: Implementation :: PyPy
+Classifier: Topic :: Software Development :: Libraries :: Python Modules
+Classifier: Topic :: Text Processing :: Markup :: HTML
+Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*
+Requires-Dist: six (>=1.9)
+Requires-Dist: webencodings
+Provides-Extra: all
+Requires-Dist: genshi ; extra == 'all'
+Requires-Dist: chardet (>=2.2) ; extra == 'all'
+Requires-Dist: lxml ; (platform_python_implementation == 'CPython') and extra == 'all'
+Provides-Extra: chardet
+Requires-Dist: chardet (>=2.2) ; extra == 'chardet'
+Provides-Extra: genshi
+Requires-Dist: genshi ; extra == 'genshi'
+Provides-Extra: lxml
+Requires-Dist: lxml ; (platform_python_implementation == 'CPython') and extra == 'lxml'
+
+html5lib
+========
+
+.. image:: https://travis-ci.org/html5lib/html5lib-python.svg?branch=master
+ :target: https://travis-ci.org/html5lib/html5lib-python
+
+
+html5lib is a pure-python library for parsing HTML. It is designed to
+conform to the WHATWG HTML specification, as is implemented by all major
+web browsers.
+
+
+Usage
+-----
+
+Simple usage follows this pattern:
+
+.. code-block:: python
+
+ import html5lib
+ with open("mydocument.html", "rb") as f:
+ document = html5lib.parse(f)
+
+or:
+
+.. code-block:: python
+
+ import html5lib
+ document = html5lib.parse("Hello World!")
+
+By default, the ``document`` will be an ``xml.etree`` element instance.
+Whenever possible, html5lib chooses the accelerated ``ElementTree``
+implementation (i.e. ``xml.etree.cElementTree`` on Python 2.x).
+
+Two other tree types are supported: ``xml.dom.minidom`` and
+``lxml.etree``. To use an alternative format, specify the name of
+a treebuilder:
+
+.. code-block:: python
+
+ import html5lib
+ with open("mydocument.html", "rb") as f:
+ lxml_etree_document = html5lib.parse(f, treebuilder="lxml")
+
+When using with ``urllib2`` (Python 2), the charset from HTTP should be
+pass into html5lib as follows:
+
+.. code-block:: python
+
+ from contextlib import closing
+ from urllib2 import urlopen
+ import html5lib
+
+ with closing(urlopen("http://example.com/")) as f:
+ document = html5lib.parse(f, transport_encoding=f.info().getparam("charset"))
+
+When using with ``urllib.request`` (Python 3), the charset from HTTP
+should be pass into html5lib as follows:
+
+.. code-block:: python
+
+ from urllib.request import urlopen
+ import html5lib
+
+ with urlopen("http://example.com/") as f:
+ document = html5lib.parse(f, transport_encoding=f.info().get_content_charset())
+
+To have more control over the parser, create a parser object explicitly.
+For instance, to make the parser raise exceptions on parse errors, use:
+
+.. code-block:: python
+
+ import html5lib
+ with open("mydocument.html", "rb") as f:
+ parser = html5lib.HTMLParser(strict=True)
+ document = parser.parse(f)
+
+When you're instantiating parser objects explicitly, pass a treebuilder
+class as the ``tree`` keyword argument to use an alternative document
+format:
+
+.. code-block:: python
+
+ import html5lib
+ parser = html5lib.HTMLParser(tree=html5lib.getTreeBuilder("dom"))
+ minidom_document = parser.parse("
Hello World!")
+
+More documentation is available at https://html5lib.readthedocs.io/.
+
+
+Installation
+------------
+
+html5lib works on CPython 2.7+, CPython 3.5+ and PyPy. To install:
+
+.. code-block:: bash
+
+ $ pip install html5lib
+
+The goal is to support a (non-strict) superset of the versions that `pip
+supports
+`_.
+
+Optional Dependencies
+---------------------
+
+The following third-party libraries may be used for additional
+functionality:
+
+- ``lxml`` is supported as a tree format (for both building and
+ walking) under CPython (but *not* PyPy where it is known to cause
+ segfaults);
+
+- ``genshi`` has a treewalker (but not builder); and
+
+- ``chardet`` can be used as a fallback when character encoding cannot
+ be determined.
+
+
+Bugs
+----
+
+Please report any bugs on the `issue tracker
+`_.
+
+
+Tests
+-----
+
+Unit tests require the ``pytest`` and ``mock`` libraries and can be
+run using the ``py.test`` command in the root directory.
+
+Test data are contained in a separate `html5lib-tests
+`_ repository and included
+as a submodule, thus for git checkouts they must be initialized::
+
+ $ git submodule init
+ $ git submodule update
+
+If you have all compatible Python implementations available on your
+system, you can run tests on all of them using the ``tox`` utility,
+which can be found on PyPI.
+
+
+Questions?
+----------
+
+There's a mailing list available for support on Google Groups,
+`html5lib-discuss `_,
+though you may get a quicker response asking on IRC in `#whatwg on
+irc.freenode.net `_.
+
+Change Log
+----------
+
+1.1
+~~~
+
+UNRELEASED
+
+Breaking changes:
+
+* Drop support for Python 3.3. (#358)
+* Drop support for Python 3.4. (#421)
+
+Deprecations:
+
+* Deprecate the ``html5lib`` sanitizer (``html5lib.serialize(sanitize=True)`` and
+ ``html5lib.filters.sanitizer``). We recommend users migrate to `Bleach
+ `. Please let us know if Bleach doesn't suffice for your
+ use. (#443)
+
+Other changes:
+
+* Try to import from ``collections.abc`` to remove DeprecationWarning and ensure
+ ``html5lib`` keeps working in future Python versions. (#403)
+* Drop optional ``datrie`` dependency. (#442)
+
+
+1.0.1
+~~~~~
+
+Released on December 7, 2017
+
+Breaking changes:
+
+* Drop support for Python 2.6. (#330) (Thank you, Hugo, Will Kahn-Greene!)
+* Remove ``utils/spider.py`` (#353) (Thank you, Jon Dufresne!)
+
+Features:
+
+* Improve documentation. (#300, #307) (Thank you, Jon Dufresne, Tom Most,
+ Will Kahn-Greene!)
+* Add iframe seamless boolean attribute. (Thank you, Ritwik Gupta!)
+* Add itemscope as a boolean attribute. (#194) (Thank you, Jonathan Vanasco!)
+* Support Python 3.6. (#333) (Thank you, Jon Dufresne!)
+* Add CI support for Windows using AppVeyor. (Thank you, John Vandenberg!)
+* Improve testing and CI and add code coverage (#323, #334), (Thank you, Jon
+ Dufresne, John Vandenberg, Sam Sneddon, Will Kahn-Greene!)
+* Semver-compliant version number.
+
+Bug fixes:
+
+* Add support for setuptools < 18.5 to support environment markers. (Thank you,
+ John Vandenberg!)
+* Add explicit dependency for six >= 1.9. (Thank you, Eric Amorde!)
+* Fix regexes to work with Python 3.7 regex adjustments. (#318, #379) (Thank
+ you, Benedikt Morbach, Ville Skyttä, Mark Vasilkov!)
+* Fix alphabeticalattributes filter namespace bug. (#324) (Thank you, Will
+ Kahn-Greene!)
+* Include license file in generated wheel package. (#350) (Thank you, Jon
+ Dufresne!)
+* Fix annotation-xml typo. (#339) (Thank you, Will Kahn-Greene!)
+* Allow uppercase hex chararcters in CSS colour check. (#377) (Thank you,
+ Komal Dembla, Hugo!)
+
+
+1.0
+~~~
+
+Released and unreleased on December 7, 2017. Badly packaged release.
+
+
+0.999999999/1.0b10
+~~~~~~~~~~~~~~~~~~
+
+Released on July 15, 2016
+
+* Fix attribute order going to the tree builder to be document order
+ instead of reverse document order(!).
+
+
+0.99999999/1.0b9
+~~~~~~~~~~~~~~~~
+
+Released on July 14, 2016
+
+* **Added ordereddict as a mandatory dependency on Python 2.6.**
+
+* Added ``lxml``, ``genshi``, ``datrie``, ``charade``, and ``all``
+ extras that will do the right thing based on the specific
+ interpreter implementation.
+
+* Now requires the ``mock`` package for the testsuite.
+
+* Cease supporting DATrie under PyPy.
+
+* **Remove PullDOM support, as this hasn't ever been properly
+ tested, doesn't entirely work, and as far as I can tell is
+ completely unused by anyone.**
+
+* Move testsuite to ``py.test``.
+
+* **Fix #124: move to webencodings for decoding the input byte stream;
+ this makes html5lib compliant with the Encoding Standard, and
+ introduces a required dependency on webencodings.**
+
+* **Cease supporting Python 3.2 (in both CPython and PyPy forms).**
+
+* **Fix comments containing double-dash with lxml 3.5 and above.**
+
+* **Use scripting disabled by default (as we don't implement
+ scripting).**
+
+* **Fix #11, avoiding the XSS bug potentially caused by serializer
+ allowing attribute values to be escaped out of in old browser versions,
+ changing the quote_attr_values option on serializer to take one of
+ three values, "always" (the old True value), "legacy" (the new option,
+ and the new default), and "spec" (the old False value, and the old
+ default).**
+
+* **Fix #72 by rewriting the sanitizer to apply only to treewalkers
+ (instead of the tokenizer); as such, this will require amending all
+ callers of it to use it via the treewalker API.**
+
+* **Drop support of charade, now that chardet is supported once more.**
+
+* **Replace the charset keyword argument on parse and related methods
+ with a set of keyword arguments: override_encoding, transport_encoding,
+ same_origin_parent_encoding, likely_encoding, and default_encoding.**
+
+* **Move filters._base, treebuilder._base, and treewalkers._base to .base
+ to clarify their status as public.**
+
+* **Get rid of the sanitizer package. Merge sanitizer.sanitize into the
+ sanitizer.htmlsanitizer module and move that to sanitizer. This means
+ anyone who used sanitizer.sanitize or sanitizer.HTMLSanitizer needs no
+ code changes.**
+
+* **Rename treewalkers.lxmletree to .etree_lxml and
+ treewalkers.genshistream to .genshi to have a consistent API.**
+
+* Move a whole load of stuff (inputstream, ihatexml, trie, tokenizer,
+ utils) to be underscore prefixed to clarify their status as private.
+
+
+0.9999999/1.0b8
+~~~~~~~~~~~~~~~
+
+Released on September 10, 2015
+
+* Fix #195: fix the sanitizer to drop broken URLs (it threw an
+ exception between 0.9999 and 0.999999).
+
+
+0.999999/1.0b7
+~~~~~~~~~~~~~~
+
+Released on July 7, 2015
+
+* Fix #189: fix the sanitizer to allow relative URLs again (as it did
+ prior to 0.9999/1.0b5).
+
+
+0.99999/1.0b6
+~~~~~~~~~~~~~
+
+Released on April 30, 2015
+
+* Fix #188: fix the sanitizer to not throw an exception when sanitizing
+ bogus data URLs.
+
+
+0.9999/1.0b5
+~~~~~~~~~~~~
+
+Released on April 29, 2015
+
+* Fix #153: Sanitizer fails to treat some attributes as URLs. Despite how
+ this sounds, this has no known security implications. No known version
+ of IE (5.5 to current), Firefox (3 to current), Safari (6 to current),
+ Chrome (1 to current), or Opera (12 to current) will run any script
+ provided in these attributes.
+
+* Pass error message to the ParseError exception in strict parsing mode.
+
+* Allow data URIs in the sanitizer, with a whitelist of content-types.
+
+* Add support for Python implementations that don't support lone
+ surrogates (read: Jython). Fixes #2.
+
+* Remove localization of error messages. This functionality was totally
+ unused (and untested that everything was localizable), so we may as
+ well follow numerous browsers in not supporting translating technical
+ strings.
+
+* Expose treewalkers.pprint as a public API.
+
+* Add a documentEncoding property to HTML5Parser, fix #121.
+
+
+0.999
+~~~~~
+
+Released on December 23, 2013
+
+* Fix #127: add work-around for CPython issue #20007: .read(0) on
+ http.client.HTTPResponse drops the rest of the content.
+
+* Fix #115: lxml treewalker can now deal with fragments containing, at
+ their root level, text nodes with non-ASCII characters on Python 2.
+
+
+0.99
+~~~~
+
+Released on September 10, 2013
+
+* No library changes from 1.0b3; released as 0.99 as pip has changed
+ behaviour from 1.4 to avoid installing pre-release versions per
+ PEP 440.
+
+
+1.0b3
+~~~~~
+
+Released on July 24, 2013
+
+* Removed ``RecursiveTreeWalker`` from ``treewalkers._base``. Any
+ implementation using it should be moved to
+ ``NonRecursiveTreeWalker``, as everything bundled with html5lib has
+ for years.
+
+* Fix #67 so that ``BufferedStream`` to correctly returns a bytes
+ object, thereby fixing any case where html5lib is passed a
+ non-seekable RawIOBase-like object.
+
+
+1.0b2
+~~~~~
+
+Released on June 27, 2013
+
+* Removed reordering of attributes within the serializer. There is now
+ an ``alphabetical_attributes`` option which preserves the previous
+ behaviour through a new filter. This allows attribute order to be
+ preserved through html5lib if the tree builder preserves order.
+
+* Removed ``dom2sax`` from DOM treebuilders. It has been replaced by
+ ``treeadapters.sax.to_sax`` which is generic and supports any
+ treewalker; it also resolves all known bugs with ``dom2sax``.
+
+* Fix treewalker assertions on hitting bytes strings on
+ Python 2. Previous to 1.0b1, treewalkers coped with mixed
+ bytes/unicode data on Python 2; this reintroduces this prior
+ behaviour on Python 2. Behaviour is unchanged on Python 3.
+
+
+1.0b1
+~~~~~
+
+Released on May 17, 2013
+
+* Implementation updated to implement the `HTML specification
+ `_ as of 5th May
+ 2013 (`SVN `_ revision r7867).
+
+* Python 3.2+ supported in a single codebase using the ``six`` library.
+
+* Removed support for Python 2.5 and older.
+
+* Removed the deprecated Beautiful Soup 3 treebuilder.
+ ``beautifulsoup4`` can use ``html5lib`` as a parser instead. Note that
+ since it doesn't support namespaces, foreign content like SVG and
+ MathML is parsed incorrectly.
+
+* Removed ``simpletree`` from the package. The default tree builder is
+ now ``etree`` (using the ``xml.etree.cElementTree`` implementation if
+ available, and ``xml.etree.ElementTree`` otherwise).
+
+* Removed the ``XHTMLSerializer`` as it never actually guaranteed its
+ output was well-formed XML, and hence provided little of use.
+
+* Removed default DOM treebuilder, so ``html5lib.treebuilders.dom`` is no
+ longer supported. ``html5lib.treebuilders.getTreeBuilder("dom")`` will
+ return the default DOM treebuilder, which uses ``xml.dom.minidom``.
+
+* Optional heuristic character encoding detection now based on
+ ``charade`` for Python 2.6 - 3.3 compatibility.
+
+* Optional ``Genshi`` treewalker support fixed.
+
+* Many bugfixes, including:
+
+ * #33: null in attribute value breaks XML AttValue;
+
+ * #4: nested, indirect descendant,