Version in base suite: 2.4.48-3.1+deb11u1 Base version: apache2_2.4.48-3.1+deb11u1 Target version: apache2_2.4.51-1~deb11u1 Base file: /srv/ftp-master.debian.org/ftp/pool/main/a/apache2/apache2_2.4.48-3.1+deb11u1.dsc Target file: /srv/ftp-master.debian.org/policy/pool/main/a/apache2/apache2_2.4.51-1~deb11u1.dsc /srv/release.debian.org/tmp/0jaotgCQ4h/apache2-2.4.51/test/modules/http2/htdocs/test1/002.jpg |binary /srv/release.debian.org/tmp/0jaotgCQ4h/apache2-2.4.51/test/modules/http2/htdocs/test1/003/003_img.jpg |binary /srv/release.debian.org/tmp/0jaotgCQ4h/apache2-2.4.51/test/modules/http2/htdocs/test1/004/gophertiles.jpg |binary /srv/release.debian.org/tmp/0jaotgCQ4h/apache2-2.4.51/test/modules/http2/htdocs/test1/apache.org-files/ant.jpg |binary /srv/release.debian.org/tmp/0jaotgCQ4h/apache2-2.4.51/test/modules/http2/htdocs/test1/apache.org-files/asf_logo.png |binary /srv/release.debian.org/tmp/0jaotgCQ4h/apache2-2.4.51/test/modules/http2/htdocs/test1/apache.org-files/async-ads.js.br |binary /srv/release.debian.org/tmp/0jaotgCQ4h/apache2-2.4.51/test/modules/http2/htdocs/test1/apache.org-files/min.css.br |binary /srv/release.debian.org/tmp/0jaotgCQ4h/apache2-2.4.51/test/modules/http2/htdocs/test1/apache.org-files/mrunit.jpg |binary /srv/release.debian.org/tmp/0jaotgCQ4h/apache2-2.4.51/test/modules/http2/htdocs/test1/apache.org-files/search_box_icon.png |binary /srv/release.debian.org/tmp/0jaotgCQ4h/apache2-2.4.51/test/modules/http2/htdocs/test1/apache.org-files/small-logo.png |binary /srv/release.debian.org/tmp/0jaotgCQ4h/apache2-2.4.51/test/modules/http2/htdocs/test1/apache.org-files/synapse.jpg |binary apache2-2.4.51/.travis.yml | 6 apache2-2.4.51/CHANGES | 261 + apache2-2.4.51/Makefile.in | 6 apache2-2.4.51/ROADMAP | 2 apache2-2.4.51/VERSIONING | 2 apache2-2.4.51/build/ltmain.sh | 250 - apache2-2.4.51/configure | 22 apache2-2.4.51/configure.in | 4 apache2-2.4.51/debian/changelog | 44 apache2-2.4.51/debian/patches/CVE-2021-33193.patch | 870 --- apache2-2.4.51/debian/patches/buffer-http-request-bodies-for-tlsv13.diff | 132 apache2-2.4.51/debian/patches/fhs_compliance.patch | 4 apache2-2.4.51/debian/patches/series | 5 apache2-2.4.51/debian/patches/spelling-errors.diff | 27 apache2-2.4.51/debian/patches/tlsv13-add-logno.diff | 21 apache2-2.4.51/debian/upstream/signing-key.asc | 60 apache2-2.4.51/docs/manual/bind.html.de | 2 apache2-2.4.51/docs/manual/bind.html.en | 2 apache2-2.4.51/docs/manual/bind.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/bind.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/bind.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/bind.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/caching.html.en | 2 apache2-2.4.51/docs/manual/caching.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/caching.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/configuring.html.de | 2 apache2-2.4.51/docs/manual/configuring.html.en | 2 apache2-2.4.51/docs/manual/configuring.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/configuring.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/configuring.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/configuring.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/content-negotiation.html.en | 2 apache2-2.4.51/docs/manual/content-negotiation.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/content-negotiation.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/content-negotiation.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/content-negotiation.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/custom-error.html.en | 2 apache2-2.4.51/docs/manual/custom-error.html.es | 2 apache2-2.4.51/docs/manual/custom-error.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/custom-error.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/custom-error.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/custom-error.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/developer/API.html.en | 2 apache2-2.4.51/docs/manual/developer/debugging.html.en | 2 apache2-2.4.51/docs/manual/developer/documenting.html.en | 2 apache2-2.4.51/docs/manual/developer/documenting.html.zh-cn.utf8 | 2 apache2-2.4.51/docs/manual/developer/filters.html.en | 2 apache2-2.4.51/docs/manual/developer/hooks.html.en | 2 apache2-2.4.51/docs/manual/developer/modguide.html.en | 3 apache2-2.4.51/docs/manual/developer/modules.html.en | 2 apache2-2.4.51/docs/manual/developer/modules.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/developer/new_api_2_4.html.en | 2 apache2-2.4.51/docs/manual/developer/output-filters.html.en | 2 apache2-2.4.51/docs/manual/developer/request.html.en | 2 apache2-2.4.51/docs/manual/developer/thread_safety.html.en | 2 apache2-2.4.51/docs/manual/dns-caveats.html.en | 2 apache2-2.4.51/docs/manual/dns-caveats.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/dns-caveats.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/dns-caveats.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/dns-caveats.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/dso.html.en | 2 apache2-2.4.51/docs/manual/dso.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/dso.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/dso.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/dso.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/env.html.en | 2 apache2-2.4.51/docs/manual/env.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/env.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/env.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/env.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/expr.html.en | 2 apache2-2.4.51/docs/manual/expr.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/filter.html.en | 2 apache2-2.4.51/docs/manual/filter.html.es | 2 apache2-2.4.51/docs/manual/filter.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/filter.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/filter.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/filter.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/getting-started.html.en | 2 apache2-2.4.51/docs/manual/getting-started.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/getting-started.html.ru.utf8 | 2 apache2-2.4.51/docs/manual/glossary.html.de | 2 apache2-2.4.51/docs/manual/glossary.html.en | 2 apache2-2.4.51/docs/manual/glossary.html.es | 2 apache2-2.4.51/docs/manual/glossary.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/glossary.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/glossary.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/glossary.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/handler.html.en | 2 apache2-2.4.51/docs/manual/handler.html.es | 2 apache2-2.4.51/docs/manual/handler.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/handler.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/handler.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/handler.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/handler.html.zh-cn.utf8 | 2 apache2-2.4.51/docs/manual/howto/access.html.en | 2 apache2-2.4.51/docs/manual/howto/access.html.es | 2 apache2-2.4.51/docs/manual/howto/access.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/howto/auth.html.en | 2 apache2-2.4.51/docs/manual/howto/auth.html.es | 2 apache2-2.4.51/docs/manual/howto/auth.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/howto/auth.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/howto/auth.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/howto/auth.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/howto/cgi.html.en | 2 apache2-2.4.51/docs/manual/howto/cgi.html.es | 2 apache2-2.4.51/docs/manual/howto/cgi.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/howto/cgi.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/howto/cgi.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/howto/htaccess.html.en | 2 apache2-2.4.51/docs/manual/howto/htaccess.html.es | 2 apache2-2.4.51/docs/manual/howto/htaccess.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/howto/htaccess.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/howto/htaccess.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/howto/htaccess.html.pt-br | 2 apache2-2.4.51/docs/manual/howto/http2.html.en | 2 apache2-2.4.51/docs/manual/howto/http2.html.es | 2 apache2-2.4.51/docs/manual/howto/http2.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/howto/public_html.html.en | 2 apache2-2.4.51/docs/manual/howto/public_html.html.es | 2 apache2-2.4.51/docs/manual/howto/public_html.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/howto/public_html.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/howto/public_html.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/howto/public_html.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/howto/reverse_proxy.html.en | 2 apache2-2.4.51/docs/manual/howto/reverse_proxy.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/howto/ssi.html.en | 2 apache2-2.4.51/docs/manual/howto/ssi.html.es | 2 apache2-2.4.51/docs/manual/howto/ssi.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/howto/ssi.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/howto/ssi.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/install.html.de | 2 apache2-2.4.51/docs/manual/install.html.en | 2 apache2-2.4.51/docs/manual/install.html.es | 2 apache2-2.4.51/docs/manual/install.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/install.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/install.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/install.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/invoking.html.de | 2 apache2-2.4.51/docs/manual/invoking.html.en | 2 apache2-2.4.51/docs/manual/invoking.html.es | 2 apache2-2.4.51/docs/manual/invoking.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/invoking.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/invoking.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/invoking.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/license.html.en | 2 apache2-2.4.51/docs/manual/logs.html.en | 2 apache2-2.4.51/docs/manual/logs.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/logs.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/logs.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/logs.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/misc/password_encryptions.html.en | 2 apache2-2.4.51/docs/manual/misc/password_encryptions.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/misc/perf-tuning.html.en | 2 apache2-2.4.51/docs/manual/misc/perf-tuning.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/misc/perf-tuning.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/misc/perf-tuning.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/misc/relevant_standards.html.en | 2 apache2-2.4.51/docs/manual/misc/relevant_standards.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/misc/relevant_standards.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/misc/security_tips.html.en | 2 apache2-2.4.51/docs/manual/misc/security_tips.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/misc/security_tips.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/misc/security_tips.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/mod/core.html.de | 18 apache2-2.4.51/docs/manual/mod/core.html.en | 59 apache2-2.4.51/docs/manual/mod/core.html.es | 18 apache2-2.4.51/docs/manual/mod/core.html.fr.utf8 | 95 apache2-2.4.51/docs/manual/mod/core.html.ja.utf8 | 18 apache2-2.4.51/docs/manual/mod/core.html.tr.utf8 | 85 apache2-2.4.51/docs/manual/mod/directive-dict.html.en | 2 apache2-2.4.51/docs/manual/mod/directive-dict.html.es | 2 apache2-2.4.51/docs/manual/mod/directive-dict.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/directive-dict.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/directive-dict.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/directive-dict.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/mod/directives.html.de | 5 apache2-2.4.51/docs/manual/mod/directives.html.en | 5 apache2-2.4.51/docs/manual/mod/directives.html.es | 5 apache2-2.4.51/docs/manual/mod/directives.html.fr.utf8 | 5 apache2-2.4.51/docs/manual/mod/directives.html.ja.utf8 | 5 apache2-2.4.51/docs/manual/mod/directives.html.ko.euc-kr | 5 apache2-2.4.51/docs/manual/mod/directives.html.tr.utf8 | 5 apache2-2.4.51/docs/manual/mod/directives.html.zh-cn.utf8 | 5 apache2-2.4.51/docs/manual/mod/event.html.en | 2 apache2-2.4.51/docs/manual/mod/event.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_access_compat.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_access_compat.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_access_compat.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_actions.html.de | 2 apache2-2.4.51/docs/manual/mod/mod_actions.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_actions.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_actions.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_actions.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_alias.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_alias.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_alias.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_alias.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_alias.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_allowmethods.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_allowmethods.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_asis.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_asis.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_asis.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_asis.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_auth_basic.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_auth_basic.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_auth_basic.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_auth_basic.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_auth_digest.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_auth_digest.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_auth_digest.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_auth_form.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_auth_form.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_authn_anon.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_authn_anon.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_authn_anon.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_authn_anon.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_authn_core.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_authn_core.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_authn_dbd.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_authn_dbd.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_authn_dbm.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_authn_dbm.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_authn_dbm.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_authn_dbm.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_authn_file.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_authn_file.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_authn_file.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_authn_file.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_authn_socache.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_authn_socache.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_authnz_fcgi.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_authnz_fcgi.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_authnz_ldap.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_authnz_ldap.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_authz_core.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_authz_core.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_authz_dbd.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_authz_dbd.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_authz_dbm.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_authz_dbm.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_authz_dbm.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_authz_groupfile.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_authz_groupfile.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_authz_groupfile.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_authz_groupfile.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_authz_host.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_authz_host.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_authz_owner.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_authz_owner.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_authz_owner.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_authz_owner.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_authz_user.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_authz_user.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_authz_user.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_authz_user.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_autoindex.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_autoindex.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_autoindex.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_autoindex.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_autoindex.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_brotli.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_brotli.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_buffer.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_buffer.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_cache.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_cache.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_cache.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_cache.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_cache_disk.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_cache_disk.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_cache_disk.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_cache_disk.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_cache_socache.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_cache_socache.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_cern_meta.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_cern_meta.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_cern_meta.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_cgi.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_cgi.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_cgi.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_cgi.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_cgid.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_cgid.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_cgid.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_cgid.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_charset_lite.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_charset_lite.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_charset_lite.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_data.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_data.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_dav.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_dav.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_dav.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_dav.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_dav_fs.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_dav_fs.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_dav_fs.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_dav_fs.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_dav_lock.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_dav_lock.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_dav_lock.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_dbd.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_dbd.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_deflate.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_deflate.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_deflate.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_deflate.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_dialup.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_dialup.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_dir.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_dir.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_dir.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_dir.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_dir.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_dumpio.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_dumpio.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_dumpio.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_echo.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_echo.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_echo.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_echo.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_env.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_env.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_env.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_env.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_env.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_example_hooks.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_example_hooks.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_example_hooks.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_expires.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_expires.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_expires.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_expires.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_ext_filter.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_ext_filter.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_ext_filter.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_ext_filter.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_file_cache.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_file_cache.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_file_cache.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_filter.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_filter.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_headers.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_headers.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_headers.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_headers.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_heartbeat.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_heartbeat.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_heartmonitor.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_heartmonitor.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_http2.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_http2.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_ident.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_ident.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_ident.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_ident.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_imagemap.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_imagemap.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_imagemap.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_include.html.en | 6 apache2-2.4.51/docs/manual/mod/mod_include.html.fr.utf8 | 6 apache2-2.4.51/docs/manual/mod/mod_include.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_info.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_info.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_info.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_info.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_isapi.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_isapi.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_isapi.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_lbmethod_bybusyness.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_lbmethod_bybusyness.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_lbmethod_byrequests.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_lbmethod_byrequests.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_lbmethod_bytraffic.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_lbmethod_bytraffic.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_lbmethod_heartbeat.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_lbmethod_heartbeat.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_ldap.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_ldap.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_log_config.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_log_config.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_log_config.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_log_config.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_log_config.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_log_debug.html.en | 27 apache2-2.4.51/docs/manual/mod/mod_log_debug.html.fr.utf8 | 27 apache2-2.4.51/docs/manual/mod/mod_log_forensic.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_log_forensic.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_log_forensic.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_log_forensic.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_logio.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_logio.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_logio.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_logio.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_logio.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_lua.html.en | 47 apache2-2.4.51/docs/manual/mod/mod_lua.html.fr.utf8 | 61 apache2-2.4.51/docs/manual/mod/mod_macro.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_macro.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_md.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_md.html.fr.utf8 | 67 apache2-2.4.51/docs/manual/mod/mod_mime.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_mime.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_mime.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_mime_magic.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_mime_magic.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_negotiation.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_negotiation.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_negotiation.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_nw_ssl.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_nw_ssl.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_privileges.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_privileges.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_proxy.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_proxy.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_proxy.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_proxy_ajp.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_proxy_ajp.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_proxy_ajp.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_proxy_balancer.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_proxy_balancer.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_proxy_balancer.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_proxy_connect.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_proxy_connect.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_proxy_connect.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_proxy_express.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_proxy_express.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_proxy_fcgi.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_proxy_fcgi.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_proxy_fdpass.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_proxy_fdpass.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_proxy_ftp.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_proxy_ftp.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_proxy_hcheck.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_proxy_hcheck.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_proxy_html.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_proxy_html.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_proxy_http.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_proxy_http.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_proxy_http2.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_proxy_http2.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_proxy_scgi.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_proxy_scgi.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_proxy_uwsgi.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_proxy_uwsgi.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_proxy_wstunnel.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_proxy_wstunnel.html.fr.utf8 | 23 apache2-2.4.51/docs/manual/mod/mod_ratelimit.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_ratelimit.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_reflector.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_reflector.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_remoteip.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_remoteip.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_reqtimeout.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_reqtimeout.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_request.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_request.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_request.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_rewrite.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_rewrite.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_sed.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_sed.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_session.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_session.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_session_cookie.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_session_cookie.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_session_crypto.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_session_crypto.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_session_dbd.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_session_dbd.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_setenvif.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_setenvif.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_setenvif.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_setenvif.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_setenvif.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_slotmem_plain.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_slotmem_plain.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_slotmem_shm.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_slotmem_shm.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_so.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_so.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_so.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_so.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_so.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_socache_dbm.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_socache_dbm.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_socache_dc.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_socache_dc.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_socache_memcache.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_socache_memcache.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_socache_redis.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_socache_redis.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_socache_shmcb.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_socache_shmcb.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_speling.html.en | 42 apache2-2.4.51/docs/manual/mod/mod_speling.html.fr.utf8 | 53 apache2-2.4.51/docs/manual/mod/mod_speling.html.ja.utf8 | 17 apache2-2.4.51/docs/manual/mod/mod_speling.html.ko.euc-kr | 17 apache2-2.4.51/docs/manual/mod/mod_ssl.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_ssl.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_status.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_status.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_status.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_status.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_status.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_substitute.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_substitute.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_suexec.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_suexec.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_suexec.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_suexec.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_suexec.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_systemd.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_systemd.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_unique_id.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_unique_id.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_unique_id.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_unique_id.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_unixd.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_unixd.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_unixd.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_userdir.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_userdir.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_userdir.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_userdir.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_userdir.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_usertrack.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_usertrack.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_version.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_version.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_version.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_version.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/mod_vhost_alias.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_vhost_alias.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_vhost_alias.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_watchdog.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_watchdog.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mod_xml2enc.html.en | 2 apache2-2.4.51/docs/manual/mod/mod_xml2enc.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/module-dict.html.en | 2 apache2-2.4.51/docs/manual/mod/module-dict.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/module-dict.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/module-dict.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mod/module-dict.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mpm_common.html.de | 2 apache2-2.4.51/docs/manual/mod/mpm_common.html.en | 2 apache2-2.4.51/docs/manual/mod/mpm_common.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mpm_common.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mpm_common.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mpm_netware.html.en | 2 apache2-2.4.51/docs/manual/mod/mpm_netware.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mpm_winnt.html.de | 2 apache2-2.4.51/docs/manual/mod/mpm_winnt.html.en | 2 apache2-2.4.51/docs/manual/mod/mpm_winnt.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/mpm_winnt.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/mpmt_os2.html.en | 2 apache2-2.4.51/docs/manual/mod/mpmt_os2.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/overrides.html.en | 115 apache2-2.4.51/docs/manual/mod/overrides.html.fr.utf8 | 116 apache2-2.4.51/docs/manual/mod/prefork.html.de | 2 apache2-2.4.51/docs/manual/mod/prefork.html.en | 2 apache2-2.4.51/docs/manual/mod/prefork.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/prefork.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/prefork.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/mod/quickreference.html.de | 532 +- apache2-2.4.51/docs/manual/mod/quickreference.html.en | 534 +- apache2-2.4.51/docs/manual/mod/quickreference.html.es | 534 +- apache2-2.4.51/docs/manual/mod/quickreference.html.fr.utf8 | 549 +- apache2-2.4.51/docs/manual/mod/quickreference.html.ja.utf8 | 530 +- apache2-2.4.51/docs/manual/mod/quickreference.html.ko.euc-kr | 532 +- apache2-2.4.51/docs/manual/mod/quickreference.html.tr.utf8 | 537 +- apache2-2.4.51/docs/manual/mod/quickreference.html.zh-cn.utf8 | 534 +- apache2-2.4.51/docs/manual/mod/worker.html.de | 2 apache2-2.4.51/docs/manual/mod/worker.html.en | 2 apache2-2.4.51/docs/manual/mod/worker.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mod/worker.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mod/worker.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/mpm.html.de | 2 apache2-2.4.51/docs/manual/mpm.html.en | 2 apache2-2.4.51/docs/manual/mpm.html.es | 2 apache2-2.4.51/docs/manual/mpm.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/mpm.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/mpm.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/mpm.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/mpm.html.zh-cn.utf8 | 2 apache2-2.4.51/docs/manual/new_features_2_0.html.de | 2 apache2-2.4.51/docs/manual/new_features_2_0.html.en | 2 apache2-2.4.51/docs/manual/new_features_2_0.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/new_features_2_0.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/new_features_2_0.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/new_features_2_0.html.pt-br | 2 apache2-2.4.51/docs/manual/new_features_2_0.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/new_features_2_2.html.en | 2 apache2-2.4.51/docs/manual/new_features_2_2.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/new_features_2_2.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/new_features_2_2.html.pt-br | 2 apache2-2.4.51/docs/manual/new_features_2_2.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/new_features_2_4.html.en | 2 apache2-2.4.51/docs/manual/new_features_2_4.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/new_features_2_4.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/platform/ebcdic.html.en | 2 apache2-2.4.51/docs/manual/platform/ebcdic.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/platform/netware.html.en | 2 apache2-2.4.51/docs/manual/platform/netware.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/platform/netware.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/platform/perf-hp.html.en | 2 apache2-2.4.51/docs/manual/platform/perf-hp.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/platform/perf-hp.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/platform/rpm.html.en | 2 apache2-2.4.51/docs/manual/platform/rpm.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/platform/win_compiling.html.en | 2 apache2-2.4.51/docs/manual/platform/win_compiling.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/platform/win_compiling.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/platform/windows.html.en | 2 apache2-2.4.51/docs/manual/platform/windows.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/platform/windows.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/programs/ab.html.en | 2 apache2-2.4.51/docs/manual/programs/ab.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/programs/ab.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/programs/ab.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/programs/apachectl.html.en | 2 apache2-2.4.51/docs/manual/programs/apachectl.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/programs/apachectl.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/programs/apachectl.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/programs/apxs.html.en | 2 apache2-2.4.51/docs/manual/programs/apxs.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/programs/apxs.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/programs/apxs.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/programs/configure.html.en | 2 apache2-2.4.51/docs/manual/programs/configure.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/programs/configure.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/programs/configure.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/programs/dbmmanage.html.en | 2 apache2-2.4.51/docs/manual/programs/dbmmanage.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/programs/dbmmanage.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/programs/dbmmanage.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/programs/fcgistarter.html.en | 2 apache2-2.4.51/docs/manual/programs/fcgistarter.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/programs/fcgistarter.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/programs/htcacheclean.html.en | 2 apache2-2.4.51/docs/manual/programs/htcacheclean.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/programs/htcacheclean.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/programs/htcacheclean.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/programs/htdbm.html.en | 2 apache2-2.4.51/docs/manual/programs/htdbm.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/programs/htdbm.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/programs/htdigest.html.en | 2 apache2-2.4.51/docs/manual/programs/htdigest.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/programs/htdigest.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/programs/htdigest.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/programs/htpasswd.html.en | 2 apache2-2.4.51/docs/manual/programs/htpasswd.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/programs/htpasswd.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/programs/htpasswd.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/programs/httpd.html.en | 2 apache2-2.4.51/docs/manual/programs/httpd.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/programs/httpd.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/programs/httpd.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/programs/httxt2dbm.html.en | 2 apache2-2.4.51/docs/manual/programs/httxt2dbm.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/programs/httxt2dbm.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/programs/log_server_status.html.en | 2 apache2-2.4.51/docs/manual/programs/log_server_status.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/programs/logresolve.html.en | 2 apache2-2.4.51/docs/manual/programs/logresolve.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/programs/logresolve.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/programs/logresolve.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/programs/other.html.en | 2 apache2-2.4.51/docs/manual/programs/other.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/programs/other.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/programs/other.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/programs/rotatelogs.html.en | 2 apache2-2.4.51/docs/manual/programs/rotatelogs.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/programs/rotatelogs.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/programs/rotatelogs.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/programs/split-logfile.html.en | 2 apache2-2.4.51/docs/manual/programs/split-logfile.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/programs/suexec.html.en | 2 apache2-2.4.51/docs/manual/programs/suexec.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/programs/suexec.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/programs/suexec.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/rewrite/access.html.en | 2 apache2-2.4.51/docs/manual/rewrite/access.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/rewrite/advanced.html.en | 2 apache2-2.4.51/docs/manual/rewrite/advanced.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/rewrite/avoid.html.en | 2 apache2-2.4.51/docs/manual/rewrite/avoid.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/rewrite/flags.html.en | 2 apache2-2.4.51/docs/manual/rewrite/flags.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/rewrite/htaccess.html.en | 2 apache2-2.4.51/docs/manual/rewrite/htaccess.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/rewrite/intro.html.en | 2 apache2-2.4.51/docs/manual/rewrite/intro.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/rewrite/proxy.html.en | 2 apache2-2.4.51/docs/manual/rewrite/proxy.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/rewrite/remapping.html.en | 2 apache2-2.4.51/docs/manual/rewrite/remapping.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/rewrite/rewritemap.html.en | 2 apache2-2.4.51/docs/manual/rewrite/rewritemap.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/rewrite/tech.html.en | 2 apache2-2.4.51/docs/manual/rewrite/tech.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/rewrite/vhosts.html.en | 2 apache2-2.4.51/docs/manual/rewrite/vhosts.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/sections.html.en | 2 apache2-2.4.51/docs/manual/sections.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/sections.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/sections.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/sections.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/server-wide.html.en | 2 apache2-2.4.51/docs/manual/server-wide.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/server-wide.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/server-wide.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/server-wide.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/sitemap.html.de | 2 apache2-2.4.51/docs/manual/sitemap.html.en | 2 apache2-2.4.51/docs/manual/sitemap.html.es | 2 apache2-2.4.51/docs/manual/sitemap.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/sitemap.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/sitemap.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/sitemap.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/sitemap.html.zh-cn.utf8 | 2 apache2-2.4.51/docs/manual/socache.html.en | 2 apache2-2.4.51/docs/manual/socache.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/ssl/ssl_compat.html.en | 2 apache2-2.4.51/docs/manual/ssl/ssl_compat.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/ssl/ssl_faq.html.en | 2 apache2-2.4.51/docs/manual/ssl/ssl_faq.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/ssl/ssl_howto.html.en | 2 apache2-2.4.51/docs/manual/ssl/ssl_howto.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/ssl/ssl_intro.html.en | 2 apache2-2.4.51/docs/manual/ssl/ssl_intro.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/ssl/ssl_intro.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/stopping.html.de | 2 apache2-2.4.51/docs/manual/stopping.html.en | 2 apache2-2.4.51/docs/manual/stopping.html.es | 2 apache2-2.4.51/docs/manual/stopping.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/stopping.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/stopping.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/stopping.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/style/version.ent | 2 apache2-2.4.51/docs/manual/suexec.html.en | 2 apache2-2.4.51/docs/manual/suexec.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/suexec.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/suexec.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/suexec.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/upgrading.html.en | 2 apache2-2.4.51/docs/manual/upgrading.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/urlmapping.html.en | 2 apache2-2.4.51/docs/manual/urlmapping.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/urlmapping.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/urlmapping.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/urlmapping.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/vhosts/details.html.en | 2 apache2-2.4.51/docs/manual/vhosts/details.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/vhosts/details.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/vhosts/details.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/vhosts/examples.html.en | 2 apache2-2.4.51/docs/manual/vhosts/examples.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/vhosts/examples.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/vhosts/examples.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/vhosts/examples.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/vhosts/fd-limits.html.en | 2 apache2-2.4.51/docs/manual/vhosts/fd-limits.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/vhosts/fd-limits.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/vhosts/fd-limits.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/vhosts/fd-limits.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/vhosts/ip-based.html.en | 2 apache2-2.4.51/docs/manual/vhosts/ip-based.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/vhosts/ip-based.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/vhosts/ip-based.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/vhosts/ip-based.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/vhosts/mass.html.en | 2 apache2-2.4.51/docs/manual/vhosts/mass.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/vhosts/mass.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/vhosts/mass.html.tr.utf8 | 2 apache2-2.4.51/docs/manual/vhosts/name-based.html.de | 2 apache2-2.4.51/docs/manual/vhosts/name-based.html.en | 2 apache2-2.4.51/docs/manual/vhosts/name-based.html.fr.utf8 | 2 apache2-2.4.51/docs/manual/vhosts/name-based.html.ja.utf8 | 2 apache2-2.4.51/docs/manual/vhosts/name-based.html.ko.euc-kr | 2 apache2-2.4.51/docs/manual/vhosts/name-based.html.tr.utf8 | 2 apache2-2.4.51/httpd.spec | 2 apache2-2.4.51/include/ap_mmn.h | 25 apache2-2.4.51/include/ap_release.h | 2 apache2-2.4.51/include/http_connection.h | 15 apache2-2.4.51/include/http_core.h | 6 apache2-2.4.51/include/http_protocol.h | 21 apache2-2.4.51/include/http_request.h | 12 apache2-2.4.51/include/http_ssl.h | 37 apache2-2.4.51/include/http_vhost.h | 13 apache2-2.4.51/include/httpd.h | 29 apache2-2.4.51/include/mpm_common.h | 9 apache2-2.4.51/modules/aaa/mod_auth_basic.c | 2 apache2-2.4.51/modules/dav/main/mod_dav.c | 470 +- apache2-2.4.51/modules/dav/main/mod_dav.h | 80 apache2-2.4.51/modules/dav/main/util.c | 8 apache2-2.4.51/modules/examples/mod_example_hooks.c | 17 apache2-2.4.51/modules/filters/mod_deflate.c | 37 apache2-2.4.51/modules/filters/mod_request.c | 16 apache2-2.4.51/modules/generators/mod_autoindex.c | 5 apache2-2.4.51/modules/generators/mod_info.c | 1 apache2-2.4.51/modules/http/http_protocol.c | 2 apache2-2.4.51/modules/http2/h2_alt_svc.c | 4 apache2-2.4.51/modules/http2/h2_bucket_beam.c | 20 apache2-2.4.51/modules/http2/h2_bucket_eos.c | 16 apache2-2.4.51/modules/http2/h2_config.c | 9 apache2-2.4.51/modules/http2/h2_conn.c | 19 apache2-2.4.51/modules/http2/h2_conn.h | 7 apache2-2.4.51/modules/http2/h2_conn_io.c | 27 apache2-2.4.51/modules/http2/h2_from_h1.c | 96 apache2-2.4.51/modules/http2/h2_headers.c | 14 apache2-2.4.51/modules/http2/h2_headers.h | 7 apache2-2.4.51/modules/http2/h2_mplx.c | 59 apache2-2.4.51/modules/http2/h2_push.c | 40 apache2-2.4.51/modules/http2/h2_push.h | 2 apache2-2.4.51/modules/http2/h2_request.c | 27 apache2-2.4.51/modules/http2/h2_session.c | 51 apache2-2.4.51/modules/http2/h2_session.h | 5 apache2-2.4.51/modules/http2/h2_task.c | 5 apache2-2.4.51/modules/http2/h2_task.h | 4 apache2-2.4.51/modules/http2/h2_util.c | 4 apache2-2.4.51/modules/http2/h2_version.h | 4 apache2-2.4.51/modules/http2/h2_workers.c | 234 - apache2-2.4.51/modules/http2/h2_workers.h | 12 apache2-2.4.51/modules/http2/mod_http2.c | 5 apache2-2.4.51/modules/http2/mod_proxy_http2.c | 11 apache2-2.4.51/modules/ldap/util_ldap.c | 100 apache2-2.4.51/modules/loggers/mod_log_debug.c | 8 apache2-2.4.51/modules/loggers/mod_log_forensic.c | 2 apache2-2.4.51/modules/lua/mod_lua.c | 31 apache2-2.4.51/modules/mappers/mod_rewrite.c | 17 apache2-2.4.51/modules/mappers/mod_speling.c | 36 apache2-2.4.51/modules/md/md_acme.c | 3 apache2-2.4.51/modules/md/md_acme_authz.c | 47 apache2-2.4.51/modules/md/md_acme_drive.c | 30 apache2-2.4.51/modules/md/md_acme_order.c | 5 apache2-2.4.51/modules/md/md_crypt.c | 79 apache2-2.4.51/modules/md/md_crypt.h | 7 apache2-2.4.51/modules/md/md_curl.c | 13 apache2-2.4.51/modules/md/md_json.c | 11 apache2-2.4.51/modules/md/md_jws.c | 8 apache2-2.4.51/modules/md/md_ocsp.c | 139 apache2-2.4.51/modules/md/md_reg.c | 6 apache2-2.4.51/modules/md/md_store_fs.c | 59 apache2-2.4.51/modules/md/md_util.c | 57 apache2-2.4.51/modules/md/md_util.h | 37 apache2-2.4.51/modules/md/md_version.h | 4 apache2-2.4.51/modules/md/mod_md.c | 18 apache2-2.4.51/modules/md/mod_md.h | 27 apache2-2.4.51/modules/md/mod_md_config.c | 4 apache2-2.4.51/modules/md/mod_md_drive.c | 1 apache2-2.4.51/modules/md/mod_md_ocsp.c | 68 apache2-2.4.51/modules/md/mod_md_ocsp.h | 6 apache2-2.4.51/modules/metadata/mod_unique_id.c | 77 apache2-2.4.51/modules/proxy/mod_proxy.c | 460 +- apache2-2.4.51/modules/proxy/mod_proxy.h | 72 apache2-2.4.51/modules/proxy/mod_proxy_ajp.c | 1 apache2-2.4.51/modules/proxy/mod_proxy_balancer.c | 296 - apache2-2.4.51/modules/proxy/mod_proxy_hcheck.c | 68 apache2-2.4.51/modules/proxy/mod_proxy_http.c | 4 apache2-2.4.51/modules/proxy/mod_proxy_uwsgi.c | 22 apache2-2.4.51/modules/proxy/proxy_util.c | 294 - apache2-2.4.51/modules/ssl/mod_ssl.c | 73 apache2-2.4.51/modules/ssl/ssl_engine_config.c | 4 apache2-2.4.51/modules/ssl/ssl_engine_init.c | 28 apache2-2.4.51/modules/ssl/ssl_engine_io.c | 64 apache2-2.4.51/modules/ssl/ssl_engine_kernel.c | 27 apache2-2.4.51/modules/ssl/ssl_engine_vars.c | 8 apache2-2.4.51/modules/ssl/ssl_private.h | 18 apache2-2.4.51/modules/ssl/ssl_util_stapling.c | 3 apache2-2.4.51/server/connection.c | 15 apache2-2.4.51/server/core.c | 46 apache2-2.4.51/server/core_filters.c | 5 apache2-2.4.51/server/gen_test_char.c | 12 apache2-2.4.51/server/mpm/event/event.c | 576 +- apache2-2.4.51/server/mpm/prefork/prefork.c | 39 apache2-2.4.51/server/mpm/worker/worker.c | 6 apache2-2.4.51/server/mpm_common.c | 6 apache2-2.4.51/server/mpm_fdqueue.c | 4 apache2-2.4.51/server/mpm_fdqueue.h | 2 apache2-2.4.51/server/protocol.c | 332 - apache2-2.4.51/server/request.c | 136 apache2-2.4.51/server/scoreboard.c | 2 apache2-2.4.51/server/ssl.c | 92 apache2-2.4.51/server/util.c | 232 - apache2-2.4.51/server/vhost.c | 38 apache2-2.4.51/support/htcacheclean.c | 63 apache2-2.4.51/test/modules/http2/.gitignore | 3 apache2-2.4.51/test/modules/http2/Makefile.in | 20 apache2-2.4.51/test/modules/http2/conf/httpd.conf.template | 53 apache2-2.4.51/test/modules/http2/conf/mime.types | 1588 ++++++ apache2-2.4.51/test/modules/http2/conf/test.conf | 1 apache2-2.4.51/test/modules/http2/config.ini.in | 29 apache2-2.4.51/test/modules/http2/conftest.py | 58 apache2-2.4.51/test/modules/http2/data/nghttp-output-100k-1.txt | 1153 +++++ apache2-2.4.51/test/modules/http2/data/nghttp-output-10k-1.txt | 166 apache2-2.4.51/test/modules/http2/data/nghttp-output-1k-1.txt | 68 apache2-2.4.51/test/modules/http2/h2_certs.py | 444 + apache2-2.4.51/test/modules/http2/h2_conf.py | 163 apache2-2.4.51/test/modules/http2/h2_curl.py | 133 apache2-2.4.51/test/modules/http2/h2_env.py | 632 ++ apache2-2.4.51/test/modules/http2/h2_nghttp.py | 288 + apache2-2.4.51/test/modules/http2/h2_result.py | 71 apache2-2.4.51/test/modules/http2/htdocs/alive.json | 4 apache2-2.4.51/test/modules/http2/htdocs/cgi/echo.py | 14 apache2-2.4.51/test/modules/http2/htdocs/cgi/echohd.py | 23 apache2-2.4.51/test/modules/http2/htdocs/cgi/env.py | 39 apache2-2.4.51/test/modules/http2/htdocs/cgi/hecho.py | 46 apache2-2.4.51/test/modules/http2/htdocs/cgi/hello.py | 15 apache2-2.4.51/test/modules/http2/htdocs/cgi/mnot164.py | 21 apache2-2.4.51/test/modules/http2/htdocs/cgi/necho.py | 54 apache2-2.4.51/test/modules/http2/htdocs/cgi/upload.py | 62 apache2-2.4.51/test/modules/http2/htdocs/forbidden.html | 11 apache2-2.4.51/test/modules/http2/htdocs/index.html | 9 apache2-2.4.51/test/modules/http2/htdocs/noh2/alive.json | 5 apache2-2.4.51/test/modules/http2/htdocs/noh2/index.html | 9 apache2-2.4.51/test/modules/http2/htdocs/test1/001.html | 10 apache2-2.4.51/test/modules/http2/htdocs/test1/003.html | 11 apache2-2.4.51/test/modules/http2/htdocs/test1/004.html | 23 apache2-2.4.51/test/modules/http2/htdocs/test1/006.html | 23 apache2-2.4.51/test/modules/http2/htdocs/test1/006/006.css | 21 apache2-2.4.51/test/modules/http2/htdocs/test1/006/006.js | 31 apache2-2.4.51/test/modules/http2/htdocs/test1/006/header.html | 1 apache2-2.4.51/test/modules/http2/htdocs/test1/007.html | 21 apache2-2.4.51/test/modules/http2/htdocs/test1/007/007.py | 29 apache2-2.4.51/test/modules/http2/htdocs/test1/009.py | 21 apache2-2.4.51/test/modules/http2/htdocs/test1/alive.json | 5 apache2-2.4.51/test/modules/http2/htdocs/test1/apache.org-files/async-ads.js | 278 + apache2-2.4.51/test/modules/http2/htdocs/test1/apache.org-files/default.css | 676 ++ apache2-2.4.51/test/modules/http2/htdocs/test1/apache.org-files/defaulten.css | 2284 ++++++++++ apache2-2.4.51/test/modules/http2/htdocs/test1/apache.org-files/defaulten.js | 674 ++ apache2-2.4.51/test/modules/http2/htdocs/test1/apache.org-files/jquery-2.js | 4 apache2-2.4.51/test/modules/http2/htdocs/test1/apache.org-files/min.css | 1 apache2-2.4.51/test/modules/http2/htdocs/test1/apache.org-files/styles.css | 131 apache2-2.4.51/test/modules/http2/htdocs/test1/apache.org.html | 899 +++ apache2-2.4.51/test/modules/http2/htdocs/test1/index.html | 46 apache2-2.4.51/test/modules/http2/htdocs/test2/006/006.css | 21 apache2-2.4.51/test/modules/http2/htdocs/test2/alive.json | 4 apache2-2.4.51/test/modules/http2/mod_h2test/mod_h2test.c | 253 + apache2-2.4.51/test/modules/http2/mod_h2test/mod_h2test.h | 21 apache2-2.4.51/test/modules/http2/test_000_infra.py | 17 apache2-2.4.51/test/modules/http2/test_001_httpd_alive.py | 28 apache2-2.4.51/test/modules/http2/test_002_curl_basics.py | 68 apache2-2.4.51/test/modules/http2/test_003_get.py | 213 apache2-2.4.51/test/modules/http2/test_004_post.py | 218 apache2-2.4.51/test/modules/http2/test_005_status.py | 70 apache2-2.4.51/test/modules/http2/test_006_assets.py | 74 apache2-2.4.51/test/modules/http2/test_100_conn_reuse.py | 56 apache2-2.4.51/test/modules/http2/test_101_ssl_reneg.py | 126 apache2-2.4.51/test/modules/http2/test_102_require.py | 38 apache2-2.4.51/test/modules/http2/test_103_upgrade.py | 119 apache2-2.4.51/test/modules/http2/test_104_padding.py | 100 apache2-2.4.51/test/modules/http2/test_105_timeout.py | 150 apache2-2.4.51/test/modules/http2/test_106_shutdown.py | 45 apache2-2.4.51/test/modules/http2/test_200_header_invalid.py | 177 apache2-2.4.51/test/modules/http2/test_201_header_conditional.py | 69 apache2-2.4.51/test/modules/http2/test_202_trailer.py | 65 apache2-2.4.51/test/modules/http2/test_203_encoding.py | 105 apache2-2.4.51/test/modules/http2/test_300_interim.py | 39 apache2-2.4.51/test/modules/http2/test_400_push.py | 199 apache2-2.4.51/test/modules/http2/test_401_early_hints.py | 46 apache2-2.4.51/test/modules/http2/test_500_proxy.py | 119 apache2-2.4.51/test/modules/http2/test_600_h2proxy.py | 27 apache2-2.4.51/test/modules/http2/test_700_load_get.py | 54 apache2-2.4.51/test/modules/http2/test_710_load_post_static.py | 62 apache2-2.4.51/test/modules/http2/test_711_load_post_cgi.py | 70 apache2-2.4.51/test/modules/http2/test_712_buffering.py | 60 apache2-2.4.51/test/test_travis_conditions.sh | 39 apache2-2.4.51/test/travis_run_linux.sh | 2 982 files changed, 20822 insertions(+), 6160 deletions(-) diff -Nru apache2-2.4.48/.travis.yml apache2-2.4.51/.travis.yml --- apache2-2.4.48/.travis.yml 2021-01-17 22:46:45.000000000 +0000 +++ apache2-2.4.51/.travis.yml 2021-09-03 08:33:22.000000000 +0000 @@ -37,8 +37,8 @@ # definitions to either: # condition_24x_only => run the job only for 2.4.x # condition_not_24x => run the job everywhere EXCEPT 2.4.x -_cond1: &condition_24x_only (branch is present AND branch = 2.4.x) OR (tag is present AND tag ~= /^2.4/) -_cond2: &condition_not_24x (branch is not present OR branch != 2.4.x) AND (tag is not present OR tag !~ /^2.4/) +_cond1: &condition_24x_only (branch is present AND (branch = 2.4.x OR branch ~= /^candidate-2.4/)) OR (tag is present AND tag ~= /^2.4/) +_cond2: &condition_not_24x (branch is not present OR (branch != 2.4.x AND branch !~ /^candidate-2.4/)) AND (tag is not present OR tag !~ /^2.4/) jobs: include: @@ -364,7 +364,7 @@ irc: if: fork = false channels: - - "chat.freenode.net#httpd-dev" + - "irc.libera.chat#httpd-dev" email: if: fork = false recipients: diff -Nru apache2-2.4.48/CHANGES apache2-2.4.51/CHANGES --- apache2-2.4.48/CHANGES 2021-05-14 19:18:52.000000000 +0000 +++ apache2-2.4.51/CHANGES 2021-10-07 12:27:43.000000000 +0000 @@ -1,6 +1,231 @@ -*- coding: utf-8 -*- +Changes with Apache 2.4.51 + + *) core: Add ap_unescape_url_ex() for better decoding control, and deprecate + unused AP_NORMALIZE_DROP_PARAMETERS flag. + [Yann Ylavic, Ruediger Pluem, Stefan Eissing, Joe Orton] + +Changes with Apache 2.4.50 + + *) SECURITY: CVE-2021-41773: Path traversal and file disclosure + vulnerability in Apache HTTP Server 2.4.49 (cve.mitre.org) + A flaw was found in a change made to path normalization in + Apache HTTP Server 2.4.49. An attacker could use a path + traversal attack to map URLs to files outside the expected + document root. + If files outside of the document root are not protected by + "require all denied" these requests can succeed. Additionally + this flaw could leak the source of interpreted files like CGI + scripts. + This issue is known to be exploited in the wild. + This issue only affects Apache 2.4.49 and not earlier versions. + Credits: This issue was reported by Ash Daulton along with the + cPanel Security Team + + *) SECURITY: CVE-2021-41524: null pointer dereference in h2 fuzzing + (cve.mitre.org) + While fuzzing the 2.4.49 httpd, a new null pointer dereference + was detected during HTTP/2 request processing, + allowing an external source to DoS the server. This requires a + specially crafted request. + The vulnerability was recently introduced in version 2.4.49. No + exploit is known to the project. + Credits: Apache httpd team would like to thank LI ZHI XIN from + NSFocus Security Team for reporting this issue. + + *) core: AP_NORMALIZE_DECODE_UNRESERVED should normalize the second dot in + the uri-path when it's preceded by a dot. [Yann Ylavic] + + *) mod_md: when MDMessageCmd for a 'challenge-setup::' + fails (!= 0 exit), the renewal process is aborted and an error is + reported for the MDomain. This provides scripts that distribute + information in a cluster to abort early with bothering an ACME + server to validate a dns name that will not work. The common + retry logic will make another attempt in the future, as with + other failures. + Fixed a bug when adding private key specs to an already working + MDomain, see . + [Stefan Eissing] + + *) mod_proxy: Handle UDS URIs with empty hostname ("unix:///...") as if they + had no hostname ("unix:/..."). [Yann Ylavic] + + *) mod_md: fixed a bug in handling multiple parallel OCSP requests. These could + run into an assertion which terminated (and restarted) the child process where + the task was running. Eventually, all OCSP responses were collected, but not + in the way that things are supposed to work. + See also . + The bug was possibly triggered when more than one OCSP status needed updating + at the same time. For example for several renewed certificates after a server + reload. + + *) mod_rewrite: Fix UDS ("unix:") scheme for [P] rules. PR 57691 + 65590. + [Janne Peltonen ] + + *) event mpm: Correctly count active child processes in parent process if + child process dies due to MaxConnectionsPerChild. + PR 65592 [Ruediger Pluem] + + *) mod_http2: when a server is restarted gracefully, any idle h2 worker + threads are shut down immediately. + Also, change OpenSSL API use for deprecations in OpenSSL 3.0. + Adds all other, never proposed code changes to make a clean + sync of http2 sources. [Stefan Eissing] + + *) mod_dav: Correctly handle errors returned by dav providers on REPORT + requests. [Ruediger Pluem] + + *) core: do not install core input/output filters on secondary + connections. [Stefan Eissing] + + *) core: Add ap_pre_connection() as a wrapper to ap_run_pre_connection() + and use it to prevent that failures in running the pre_connection + hook cause crashes afterwards. [Ruediger Pluem] + + *) mod_speling: Add CheckBasenameMatch PR 44221. [Christophe Jaillet] + +Changes with Apache 2.4.49 + + *) SECURITY: CVE-2021-40438 (cve.mitre.org) + mod_proxy: Server Side Request Forgery (SSRF) vulnerabilty [Yann Ylavic] + + *) SECURITY: CVE-2021-39275 (cve.mitre.org) + core: ap_escape_quotes buffer overflow + + *) SECURITY: CVE-2021-36160 (cve.mitre.org) + mod_proxy_uwsgi: Out of bound read vulnerability [Yann Ylavic] + + *) SECURITY: CVE-2021-34798 (cve.mitre.org) + core: null pointer dereference on malformed request + + *) SECURITY: CVE-2021-33193 (cve.mitre.org) + mod_http2: Request splitting vulnerability with mod_proxy [Stefan Eissing] + + *) core/mod_proxy/mod_ssl: + Adding `outgoing` flag to conn_rec, indicating a connection is + initiated by the server to somewhere, in contrast to incoming + connections from clients. + Adding 'ap_ssl_bind_outgoing()` function that marks a connection + as outgoing and is used by mod_proxy instead of the previous + optional function `ssl_engine_set`. This enables other SSL + module to secure proxy connections. + The optional functions `ssl_engine_set`, `ssl_engine_disable` and + `ssl_proxy_enable` are now provided by the core to have backward + compatibility with non-httpd modules that might use them. mod_ssl + itself no longer registers these functions, but keeps them in its + header for backward compatibility. + The core provided optional function wrap any registered function + like it was done for `ssl_is_ssl`. + [Stefan Eissing] + + *) mod_ssl: Support logging private key material for use with + wireshark via log file given by SSLKEYLOGFILE environment + variable. Requires OpenSSL 1.1.1. PR 63391. [Joe Orton] + + *) mod_proxy: Do not canonicalize the proxied URL when both "nocanon" and + "ProxyPassInterpolateEnv On" are configured. PR 65549. + [Joel Self ] + + *) mpm_event: Fix children processes possibly not stopped on graceful + restart. PR 63169. [Joel Self ] + + *) mod_proxy: Fix a potential infinite loop when tunneling Upgrade(d) + protocols from mod_proxy_http, and a timeout triggering falsely when + using mod_proxy_wstunnel, mod_proxy_connect or mod_proxy_http with + upgrade= setting. PRs 65521 and 65519. [Yann Ylavic] + + *) mod_unique_id: Reduce the time window where duplicates may be generated + PR 65159 + [Christophe Jaillet] + + *) mpm_prefork: Block signals for child_init hooks to prevent potential + threads created from there to catch MPM's signals. + [Ruediger Pluem, Yann Ylavic] + + *) Revert "mod_unique_id: Fix potential duplicated ID generation under heavy load. + PR 65159" added in 2.4.47. + This causes issue on Windows. + [Christophe Jaillet] + + *) mod_proxy_uwsgi: Fix PATH_INFO setting for generic worker. [Yann Ylavic] + + *) mod_md: Certificate/keys pairs are verified as matching before a renewal is accepted + as successful or a staged renewal is replacing the existing certificates. + This avoid potential mess ups in the md store file system to render the active + certificates non-working. [@mkauf] + + *) mod_proxy: Faster unix socket path parsing in the "proxy:" URL. + [Yann Ylavic] + + *) mod_ssl: tighten the handling of ALPN for outgoing (proxy) + connections. If ALPN protocols are provided and sent to the + remote server, the received protocol selected is inspected + and checked for a match. Without match, the peer handshake + fails. + An exception is the proposal of "http/1.1" where it is + accepted if the remote server did not answer ALPN with + a selected protocol. This accomodates for hosts that do + not observe/support ALPN and speak http/1.x be default. + + *) mod_proxy: Fix possible reuse/merging of Proxy(Pass)Match worker instances + with others when their URLs contain a '$' substitution. PR 65419 + 65429. + [Yann Ylavic] + + *) mod_dav: Add method_precondition hook. WebDAV extensions define + conditions that must exist before a WebDAV method can be executed. + This hook allows a WebDAV extension to verify these preconditions. + [Graham Leggett] + + *) Add hooks deliver_report and gather_reports to mod_dav.h. Allows other + modules apart from versioning implementations to handle the REPORT method. + [Graham Leggett] + + *) Add dav_get_provider(), dav_open_lockdb(), dav_close_lockdb() and + dav_get_resource() to mod_dav.h. [Graham Leggett] + + *) core: fix ap_escape_quotes substitution logic. [Eric Covener] + + *) core/mpm: add hook 'child_stopping` that gets called when the MPM is + stopping a child process. The additional `graceful` parameter allows + registered hooks to free resources early during a graceful shutdown. + [Yann Ylavic, Stefan Eissing] + + *) mod_proxy: Fix icomplete initialization of BalancerMember(s) from the + balancer-manager, which can lead to a crash. [Yann Ylavic] + + *) mpm_event: Fix graceful stop/restart of children processes if connections + are in lingering close for too long. [Yann Ylavic] + + *) mod_md: fixed a potential null pointer dereference if ACME/OCSP + server returned 2xx responses without content type. Reported by chuangwen. + [chuangwen, Stefan Eissing] + + *) mod_md: + - Domain names in `` can now appear in quoted form. + - Fixed a failure in ACME challenge selection that aborted further searches + when the tls-alpn-01 method did not seem to be suitable. + - Changed the tls-alpn-01 setup to only become unsuitable when none of the + dns names showed support for a configured 'Protocols ... acme-tls/1'. This + allows use of tls-alpn-01 for dns names that are not mapped to a VirtualHost. + [Stefan Eissing] + + *) Add CPING to health check logic. [Jean-Frederic Clere] + + *) core: Split ap_create_request() from ap_read_request(). [Graham Leggett] + + *) core, h2: common ap_parse_request_line() and ap_check_request_header() + code. [Yann Ylavic] + + *) core: Add StrictHostCheck to allow unconfigured hostnames to be + rejected. [Eric Covener] + + *) htcacheclean: Improve help messages. [Christophe Jaillet] + Changes with Apache 2.4.48 + *) SECURITY: CVE-2021-31618 (cve.mitre.org) + mod_http2: Fix a potential NULL pointer dereference [Ivan Zhakov] + *) mod_proxy_wstunnel: Add ProxyWebsocketFallbackToProxyHttp to opt-out the fallback to mod_proxy_http for WebSocket upgrade and tunneling. [Yann Ylavic] @@ -126,6 +351,33 @@ Changes with Apache 2.4.47 + *) SECURITY: CVE-2021-30641 (cve.mitre.org) + Unexpected section matching with 'MergeSlashes OFF' + + *) SECURITY: CVE-2020-35452 (cve.mitre.org) + mod_auth_digest: possible stack overflow by one nul byte while validating + the Digest nonce. [Yann Ylavic] + + *) SECURITY: CVE-2021-26691 (cve.mitre.org) + mod_session: Fix possible crash due to NULL pointer dereference, which + could be used to cause a Denial of Service with a malicious backend + server and SessionHeader. [Yann Ylavic] + + *) SECURITY: CVE-2021-26690 (cve.mitre.org) + mod_session: Fix possible crash due to NULL pointer dereference, which + could be used to cause a Denial of Service. [Yann Ylavic] + + *) SECURITY: CVE-2020-13950 (cve.mitre.org) + mod_proxy_http: Fix possible crash due to NULL pointer dereference, which + could be used to cause a Denial of Service. [Yann Ylavic] + + *) SECURITY: CVE-2020-13938 (cve.mitre.org) + Windows: Prevent local users from stopping the httpd process [Ivan Zhakov] + + *) SECURITY: CVE-2019-17567 (cve.mitre.org) + mod_proxy_wstunnel, mod_proxy_http: Handle Upgradable protocols end-to-end + negotiation. [Yann Ylavic] + *) mod_dav_fs: Improve logging output when failing to open files for writing. PR 64413. [Bingyu Shen ] @@ -185,22 +437,13 @@ *) mod_authnz_ldap: Prevent authentications with empty passwords for the initial bind to fail with status 500. [Ruediger Pluem] - *) mod_auth_digest: Fast validation of the nonce's base64 to fail early if - the format can't match anyway. [Yann Ylavic] - *) mod_proxy_fcgi: Honor "SetEnv proxy-sendcl" to forward a chunked Transfer-Encoding from the client, spooling the request body when needed to provide a Content-Length to the backend. PR 57087. [Yann Ylavic] - *) mod_proxy: Put mod_proxy_{connect,wstunnel} tunneling code in common in - proxy_util. [Yann Ylavic] - *) mod_proxy: Improve tunneling loop to support half closed connections and pending data draining (for protocols like rsync). PR 61616. [Yann Ylavic] - *) mod_proxy_http: handle Upgrade request, 101 (Switching Protocol) response - and switched protocol forwarding. [Yann Ylavic] - *) mod_proxy_wstunnel: Leave Upgrade requests handling to mod_proxy_http, allowing for (non-)Upgrade negotiation with the origin server. [Yann Ylavic] diff -Nru apache2-2.4.48/Makefile.in apache2-2.4.51/Makefile.in --- apache2-2.4.48/Makefile.in 2021-02-11 10:51:19.000000000 +0000 +++ apache2-2.4.51/Makefile.in 2021-06-02 07:11:47.000000000 +0000 @@ -158,9 +158,9 @@ update-changes: @for i in `find changes-entries -type f`; do \ cp CHANGES CHANGES.tmp ; \ - awk -v fname=$$i 'BEGIN{done = 0} \ - done == 0 && /^Changes with Apache /{ active = 1; print; next}; \ - /^ *\*/ && active == 1 && done == 0{rec=$$0; while(getline CHANGES ; \ rm CHANGES.tmp ; \ if [ -n "$(SVN)" ] ; then \ diff -Nru apache2-2.4.48/ROADMAP apache2-2.4.51/ROADMAP --- apache2-2.4.48/ROADMAP 2020-02-21 00:33:40.000000000 +0000 +++ apache2-2.4.51/ROADMAP 2020-02-21 00:33:40.000000000 +0000 @@ -1,6 +1,6 @@ APACHE 2.x ROADMAP ================== -Last modified at [$Date: 2020-02-21 00:33:40 +0000 (ven. 21 févr. 2020) $] +Last modified at [$Date: 2020-02-21 01:33:40 +0100 (Fri, 21 Feb 2020) $] WORKS IN PROGRESS diff -Nru apache2-2.4.48/VERSIONING apache2-2.4.51/VERSIONING --- apache2-2.4.48/VERSIONING 2020-02-21 00:33:40.000000000 +0000 +++ apache2-2.4.51/VERSIONING 2020-02-21 00:33:40.000000000 +0000 @@ -1,6 +1,6 @@ APACHE 2.x VERSIONING ===================== -[$LastChangedDate: 2020-02-21 00:33:40 +0000 (ven. 21 févr. 2020) $] +[$LastChangedDate: 2020-02-21 01:33:40 +0100 (Fri, 21 Feb 2020) $] INTRODUCTION diff -Nru apache2-2.4.48/build/ltmain.sh apache2-2.4.51/build/ltmain.sh --- apache2-2.4.48/build/ltmain.sh 2021-05-17 21:21:45.000000000 +0000 +++ apache2-2.4.51/build/ltmain.sh 2021-10-07 13:12:20.000000000 +0000 @@ -31,7 +31,7 @@ PROGRAM=libtool PACKAGE=libtool -VERSION="2.4.6 Debian-2.4.6-15" +VERSION=2.4.6 package_revision=2.4.6 @@ -387,7 +387,7 @@ # putting '$debug_cmd' at the start of all your functions, you can get # bash to show function call trace with: # -# debug_cmd='echo "${FUNCNAME[0]} $*" >&2' bash your-script-name +# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name debug_cmd=${debug_cmd-":"} exit_cmd=: @@ -1370,7 +1370,7 @@ #! /bin/sh # Set a version string for this script. -scriptversion=2015-10-07.11; # UTC +scriptversion=2014-01-07.03; # UTC # A portable, pluggable option parser for Bourne shell. # Written by Gary V. Vaughan, 2010 @@ -1530,8 +1530,6 @@ { $debug_cmd - _G_rc_run_hooks=false - case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not support hook funcions.n" ;; @@ -1540,16 +1538,16 @@ eval _G_hook_fns=\$$1_hooks; shift for _G_hook in $_G_hook_fns; do - if eval $_G_hook '"$@"'; then - # store returned options list back into positional - # parameters for next 'cmd' execution. - eval _G_hook_result=\$${_G_hook}_result - eval set dummy "$_G_hook_result"; shift - _G_rc_run_hooks=: - fi + eval $_G_hook '"$@"' + + # store returned options list back into positional + # parameters for next 'cmd' execution. + eval _G_hook_result=\$${_G_hook}_result + eval set dummy "$_G_hook_result"; shift done - $_G_rc_run_hooks && func_run_hooks_result=$_G_hook_result + func_quote_for_eval ${1+"$@"} + func_run_hooks_result=$func_quote_for_eval_result } @@ -1559,16 +1557,10 @@ ## --------------- ## # In order to add your own option parsing hooks, you must accept the -# full positional parameter list in your hook function, you may remove/edit -# any options that you action, and then pass back the remaining unprocessed +# full positional parameter list in your hook function, remove any +# options that you action, and then pass back the remaining unprocessed # options in '_result', escaped suitably for -# 'eval'. In this case you also must return $EXIT_SUCCESS to let the -# hook's caller know that it should pay attention to -# '_result'. Returning $EXIT_FAILURE signalizes that -# arguments are left untouched by the hook and therefore caller will ignore the -# result variable. -# -# Like this: +# 'eval'. Like this: # # my_options_prep () # { @@ -1578,11 +1570,9 @@ # usage_message=$usage_message' # -s, --silent don'\''t print informational messages # ' -# # No change in '$@' (ignored completely by this hook). There is -# # no need to do the equivalent (but slower) action: -# # func_quote_for_eval ${1+"$@"} -# # my_options_prep_result=$func_quote_for_eval_result -# false +# +# func_quote_for_eval ${1+"$@"} +# my_options_prep_result=$func_quote_for_eval_result # } # func_add_hook func_options_prep my_options_prep # @@ -1591,37 +1581,25 @@ # { # $debug_cmd # -# args_changed=false -# # # Note that for efficiency, we parse as many options as we can # # recognise in a loop before passing the remainder back to the # # caller on the first unrecognised argument we encounter. # while test $# -gt 0; do # opt=$1; shift # case $opt in -# --silent|-s) opt_silent=: -# args_changed=: -# ;; +# --silent|-s) opt_silent=: ;; # # Separate non-argument short options: # -s*) func_split_short_opt "$_G_opt" # set dummy "$func_split_short_opt_name" \ # "-$func_split_short_opt_arg" ${1+"$@"} # shift -# args_changed=: # ;; -# *) # Make sure the first unrecognised option "$_G_opt" -# # is added back to "$@", we could need that later -# # if $args_changed is true. -# set dummy "$_G_opt" ${1+"$@"}; shift; break ;; +# *) set dummy "$_G_opt" "$*"; shift; break ;; # esac # done # -# if $args_changed; then -# func_quote_for_eval ${1+"$@"} -# my_silent_option_result=$func_quote_for_eval_result -# fi -# -# $args_changed +# func_quote_for_eval ${1+"$@"} +# my_silent_option_result=$func_quote_for_eval_result # } # func_add_hook func_parse_options my_silent_option # @@ -1633,32 +1611,16 @@ # $opt_silent && $opt_verbose && func_fatal_help "\ # '--silent' and '--verbose' options are mutually exclusive." # -# false +# func_quote_for_eval ${1+"$@"} +# my_option_validation_result=$func_quote_for_eval_result # } # func_add_hook func_validate_options my_option_validation # -# You'll also need to manually amend $usage_message to reflect the extra +# You'll alse need to manually amend $usage_message to reflect the extra # options you parse. It's preferable to append if you can, so that # multiple option parsing hooks can be added safely. -# func_options_finish [ARG]... -# ---------------------------- -# Finishing the option parse loop (call 'func_options' hooks ATM). -func_options_finish () -{ - $debug_cmd - - _G_func_options_finish_exit=false - if func_run_hooks func_options ${1+"$@"}; then - func_options_finish_result=$func_run_hooks_result - _G_func_options_finish_exit=: - fi - - $_G_func_options_finish_exit -} - - # func_options [ARG]... # --------------------- # All the functions called inside func_options are hookable. See the @@ -1668,28 +1630,17 @@ { $debug_cmd - _G_rc_options=false - - for my_func in options_prep parse_options validate_options options_finish - do - if eval func_$my_func '${1+"$@"}'; then - eval _G_res_var='$'"func_${my_func}_result" - eval set dummy "$_G_res_var" ; shift - _G_rc_options=: - fi - done + func_options_prep ${1+"$@"} + eval func_parse_options \ + ${func_options_prep_result+"$func_options_prep_result"} + eval func_validate_options \ + ${func_parse_options_result+"$func_parse_options_result"} - # Save modified positional parameters for caller. As a top-level - # options-parser function we always need to set the 'func_options_result' - # variable (regardless the $_G_rc_options value). - if $_G_rc_options; then - func_options_result=$_G_res_var - else - func_quote_for_eval ${1+"$@"} - func_options_result=$func_quote_for_eval_result - fi + eval func_run_hooks func_options \ + ${func_validate_options_result+"$func_validate_options_result"} - $_G_rc_options + # save modified positional parameters for caller + func_options_result=$func_run_hooks_result } @@ -1698,9 +1649,9 @@ # All initialisations required before starting the option parse loop. # Note that when calling hook functions, we pass through the list of # positional parameters. If a hook function modifies that list, and -# needs to propagate that back to rest of this script, then the complete +# needs to propogate that back to rest of this script, then the complete # modified list must be put in 'func_run_hooks_result' before -# returning $EXIT_SUCCESS (otherwise $EXIT_FAILURE is returned). +# returning. func_hookable func_options_prep func_options_prep () { @@ -1710,14 +1661,10 @@ opt_verbose=false opt_warning_types= - _G_rc_options_prep=false - if func_run_hooks func_options_prep ${1+"$@"}; then - _G_rc_options_prep=: - # save modified positional parameters for caller - func_options_prep_result=$func_run_hooks_result - fi + func_run_hooks func_options_prep ${1+"$@"} - $_G_rc_options_prep + # save modified positional parameters for caller + func_options_prep_result=$func_run_hooks_result } @@ -1731,20 +1678,18 @@ func_parse_options_result= - _G_rc_parse_options=false # this just eases exit handling while test $# -gt 0; do # Defer to hook functions for initial option parsing, so they # get priority in the event of reusing an option name. - if func_run_hooks func_parse_options ${1+"$@"}; then - eval set dummy "$func_run_hooks_result"; shift - _G_rc_parse_options=: - fi + func_run_hooks func_parse_options ${1+"$@"} + + # Adjust func_parse_options positional parameters to match + eval set dummy "$func_run_hooks_result"; shift # Break out of the loop if we already parsed every option. test $# -gt 0 || break - _G_match_parse_options=: _G_opt=$1 shift case $_G_opt in @@ -1759,10 +1704,7 @@ ;; --warnings|--warning|-W) - if test $# = 0 && func_missing_arg $_G_opt; then - _G_rc_parse_options=: - break - fi + test $# = 0 && func_missing_arg $_G_opt && break case " $warning_categories $1" in *" $1 "*) # trailing space prevents matching last $1 above @@ -1815,25 +1757,15 @@ shift ;; - --) _G_rc_parse_options=: ; break ;; + --) break ;; -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; - *) set dummy "$_G_opt" ${1+"$@"}; shift - _G_match_parse_options=false - break - ;; + *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; esac - - $_G_match_parse_options && _G_rc_parse_options=: done - - if $_G_rc_parse_options; then - # save modified positional parameters for caller - func_quote_for_eval ${1+"$@"} - func_parse_options_result=$func_quote_for_eval_result - fi - - $_G_rc_parse_options + # save modified positional parameters for caller + func_quote_for_eval ${1+"$@"} + func_parse_options_result=$func_quote_for_eval_result } @@ -1846,21 +1778,16 @@ { $debug_cmd - _G_rc_validate_options=false - # Display all warnings if -W was not given. test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" - if func_run_hooks func_validate_options ${1+"$@"}; then - # save modified positional parameters for caller - func_validate_options_result=$func_run_hooks_result - _G_rc_validate_options=: - fi + func_run_hooks func_validate_options ${1+"$@"} # Bail if the options were screwed! $exit_cmd $EXIT_FAILURE - $_G_rc_validate_options + # save modified positional parameters for caller + func_validate_options_result=$func_run_hooks_result } @@ -2141,12 +2068,12 @@ compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) - version: $progname $scriptversion Debian-2.4.6-15 + version: $progname (GNU libtool) 2.4.6 automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` Report bugs to . -GNU libtool home page: . +GNU libtool home page: . General help using GNU software: ." exit 0 } @@ -2343,8 +2270,6 @@ nonopt= preserve_args= - _G_rc_lt_options_prep=: - # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) @@ -2368,18 +2293,11 @@ uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; - *) - _G_rc_lt_options_prep=false - ;; esac - if $_G_rc_lt_options_prep; then - # Pass back the list of options. - func_quote_for_eval ${1+"$@"} - libtool_options_prep_result=$func_quote_for_eval_result - fi - - $_G_rc_lt_options_prep + # Pass back the list of options. + func_quote_for_eval ${1+"$@"} + libtool_options_prep_result=$func_quote_for_eval_result } func_add_hook func_options_prep libtool_options_prep @@ -2391,12 +2309,9 @@ { $debug_cmd - _G_rc_lt_parse_options=false - # Perform our own loop to consume as many options as possible in # each iteration. while test $# -gt 0; do - _G_match_lt_parse_options=: _G_opt=$1 shift case $_G_opt in @@ -2471,22 +2386,15 @@ func_append preserve_args " $_G_opt" ;; - # An option not handled by this hook function: - *) set dummy "$_G_opt" ${1+"$@"} ; shift - _G_match_lt_parse_options=false - break - ;; + # An option not handled by this hook function: + *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; esac - $_G_match_lt_parse_options && _G_rc_lt_parse_options=: done - if $_G_rc_lt_parse_options; then - # save modified positional parameters for caller - func_quote_for_eval ${1+"$@"} - libtool_parse_options_result=$func_quote_for_eval_result - fi - $_G_rc_lt_parse_options + # save modified positional parameters for caller + func_quote_for_eval ${1+"$@"} + libtool_parse_options_result=$func_quote_for_eval_result } func_add_hook func_parse_options libtool_parse_options @@ -7364,16 +7272,10 @@ # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization - # -specs=* GCC specs files # -stdlib=* select c++ std lib with clang - # -fsanitize=* Clang/GCC memory and address sanitizer - # -fuse-ld=* Linker select flags for GCC - # -static-* direct GCC to link specific libraries statically - # -fcilkplus Cilk Plus language extension features for C/C++ -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ - -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ - -specs=*|-fsanitize=*|-fuse-ld=*|-static-*|-fcilkplus) + -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result func_append compile_command " $arg" @@ -7666,10 +7568,7 @@ case $pass in dlopen) libs=$dlfiles ;; dlpreopen) libs=$dlprefiles ;; - link) - libs="$deplibs %DEPLIBS%" - test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" - ;; + link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test lib,dlpreopen = "$linkmode,$pass"; then @@ -7988,19 +7887,19 @@ # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" - tmp_libs= - for deplib in $dependency_libs; do - deplibs="$deplib $deplibs" - if $opt_preserve_dup_deps; then - case "$tmp_libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append tmp_libs " $deplib" - done elif test prog != "$linkmode" && test lib != "$linkmode"; then func_fatal_error "'$lib' is not a convenience library" fi + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done continue fi # $pass = conv @@ -8924,9 +8823,6 @@ revision=$number_minor lt_irix_increment=no ;; - *) - func_fatal_configuration "$modename: unknown library version type '$version_type'" - ;; esac ;; no) diff -Nru apache2-2.4.48/configure apache2-2.4.51/configure --- apache2-2.4.48/configure 2021-05-17 21:21:48.000000000 +0000 +++ apache2-2.4.51/configure 2021-10-07 13:12:21.000000000 +0000 @@ -948,7 +948,6 @@ docdir oldincludedir includedir -runstatedir localstatedir sharedstatedir sysconfdir @@ -1209,7 +1208,6 @@ sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' -runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' @@ -1462,15 +1460,6 @@ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; - -runstatedir | --runstatedir | --runstatedi | --runstated \ - | --runstate | --runstat | --runsta | --runst | --runs \ - | --run | --ru | --r) - ac_prev=runstatedir ;; - -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ - | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ - | --run=* | --ru=* | --r=*) - runstatedir=$ac_optarg ;; - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1608,7 +1597,7 @@ for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir runstatedir + libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1761,7 +1750,6 @@ --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -39950,6 +39938,13 @@ APACHE_FAST_OUTPUT_FILES="$APACHE_FAST_OUTPUT_FILES test/Makefile" fi +if test -d ./test/modules/http2; then + + APACHE_FAST_OUTPUT_FILES="$APACHE_FAST_OUTPUT_FILES test/modules/http2/Makefile" + + ac_config_files="$ac_config_files test/modules/http2/config.ini" + +fi { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} @@ -41186,6 +41181,7 @@ do case $ac_config_target in "include/ap_config_auto.h") CONFIG_HEADERS="$CONFIG_HEADERS include/ap_config_auto.h" ;; + "test/modules/http2/config.ini") CONFIG_FILES="$CONFIG_FILES test/modules/http2/config.ini" ;; "docs/conf/httpd.conf") CONFIG_FILES="$CONFIG_FILES docs/conf/httpd.conf" ;; "docs/conf/extra/httpd-autoindex.conf") CONFIG_FILES="$CONFIG_FILES docs/conf/extra/httpd-autoindex.conf" ;; "docs/conf/extra/httpd-dav.conf") CONFIG_FILES="$CONFIG_FILES docs/conf/extra/httpd-dav.conf" ;; diff -Nru apache2-2.4.48/configure.in apache2-2.4.51/configure.in --- apache2-2.4.48/configure.in 2020-09-15 07:19:13.000000000 +0000 +++ apache2-2.4.51/configure.in 2021-09-23 08:56:33.000000000 +0000 @@ -843,6 +843,10 @@ if test -d ./test; then APACHE_FAST_OUTPUT(test/Makefile) fi +if test -d ./test/modules/http2; then + APACHE_FAST_OUTPUT(test/modules/http2/Makefile) + AC_CONFIG_FILES([test/modules/http2/config.ini]) +fi dnl ## Finalize the variables AC_MSG_NOTICE([]) diff -Nru apache2-2.4.48/debian/changelog apache2-2.4.51/debian/changelog --- apache2-2.4.48/debian/changelog 2021-08-12 11:51:47.000000000 +0000 +++ apache2-2.4.51/debian/changelog 2021-10-07 17:49:44.000000000 +0000 @@ -1,3 +1,47 @@ +apache2 (2.4.51-1~deb11u1) bullseye-security; urgency=medium + + * New upstream version 2.4.51 (Closes: CVE-2021-41773, CVE-2021-42013) + * Refresh patches + + -- Yadd Thu, 07 Oct 2021 19:49:44 +0200 + +apache2 (2.4.50-1~deb11u1) bullseye-security; urgency=medium + + [ OndÅ™ej Surý ] + * New upstream version 2.4.50 (Closes: CVE-2021-41524, CVE-2021-41773) + + [ Yadd ] + * Refresh patches and drop CVE-2021-40438-improvement, + correctly-count-active-child-processes and spelling-errors patches + + -- Yadd Tue, 05 Oct 2021 18:10:37 +0200 + +apache2 (2.4.49-1~deb11u3) bullseye-security; urgency=medium + + [ OndÅ™ej Surý ] + * Add upstream patch to fix crash in 2.4.49 + + -- Yadd Fri, 01 Oct 2021 11:26:56 +0200 + +apache2 (2.4.49-1~deb11u2) bullseye-security; urgency=medium + + [ Yadd ] + * Re-export upstream signing key without extra signatures. + + [ Moritz Muehlenhoff ] + * Fix CVE-2021-40438 regression + + -- Yadd Thu, 30 Sep 2021 06:06:35 +0200 + +apache2 (2.4.49-1~deb11u1) bullseye-security; urgency=high + + * Update upstream GPG keys + * New upstream version 2.4.49 (Closes: CVE-2021-34798, CVE-2021-36160, + CVE-2021-39275, CVE-2021-40438) + * Refresh patches + + -- Yadd Thu, 16 Sep 2021 05:54:22 +0200 + apache2 (2.4.48-3.1+deb11u1) bullseye-security; urgency=medium * Fix mod_proxy HTTP2 request line injection (Closes: CVE-2021-33193) diff -Nru apache2-2.4.48/debian/patches/CVE-2021-33193.patch apache2-2.4.51/debian/patches/CVE-2021-33193.patch --- apache2-2.4.48/debian/patches/CVE-2021-33193.patch 2021-08-12 11:51:47.000000000 +0000 +++ apache2-2.4.51/debian/patches/CVE-2021-33193.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,870 +0,0 @@ -Description: fix mod_proxy HTTP2 request line injection - *) core: Split ap_create_request() from ap_read_request(). [Graham Leggett] - *) core, h2: common ap_parse_request_line() and ap_check_request_header() - code. [Yann Ylavic] - *) core: Add StrictHostCheck to allow unconfigured hostnames to be - rejected. [Eric Covener] -Author: Stefan Eissing -Origin: upstream, https://github.com/apache/httpd/commit/ecebcc03 -Bug: https://portswigger.net/research/http2 -Forwarded: not-needed -Reviewed-By: Yadd -Last-Update: 2021-08-12 - ---- a/include/ap_mmn.h -+++ b/include/ap_mmn.h -@@ -559,6 +559,9 @@ - * and ap_ssl_answer_challenge and hooks. - * 20120211.104 (2.4.47-dev) Move ap_ssl_* into new http_ssl.h header file - * 20120211.105 (2.4.47-dev) Add ap_ssl_ocsp* hooks and functions to http_ssl.h. -+ * 20120211.106 (2.4.47-dev) Add ap_create_request(). -+ * 20120211.107 (2.4.47-dev) Add ap_parse_request_line() and -+ * ap_check_request_header() - */ - - #define MODULE_MAGIC_COOKIE 0x41503234UL /* "AP24" */ -@@ -566,7 +569,7 @@ - #ifndef MODULE_MAGIC_NUMBER_MAJOR - #define MODULE_MAGIC_NUMBER_MAJOR 20120211 - #endif --#define MODULE_MAGIC_NUMBER_MINOR 105 /* 0...n */ -+#define MODULE_MAGIC_NUMBER_MINOR 107 /* 0...n */ - - /** - * Determine if the server's current MODULE_MAGIC_NUMBER is at least a ---- a/include/http_core.h -+++ b/include/http_core.h -@@ -754,6 +754,7 @@ - - apr_size_t flush_max_threshold; - apr_int32_t flush_max_pipelined; -+ unsigned int strict_host_check; - } core_server_config; - - /* for AddOutputFiltersByType in core.c */ -@@ -782,6 +783,11 @@ - typedef struct core_output_filter_ctx core_output_filter_ctx_t; - typedef struct core_filter_ctx core_ctx_t; - -+struct core_filter_ctx { -+ apr_bucket_brigade *b; -+ apr_bucket_brigade *tmpbb; -+}; -+ - typedef struct core_net_rec { - /** Connection to the client */ - apr_socket_t *client_socket; ---- a/include/http_protocol.h -+++ b/include/http_protocol.h -@@ -54,6 +54,13 @@ - */ - - /** -+ * Read an empty request and set reasonable defaults. -+ * @param c The current connection -+ * @return The new request_rec -+ */ -+AP_DECLARE(request_rec *) ap_create_request(conn_rec *c); -+ -+/** - * Read a request and fill in the fields. - * @param c The current connection - * @return The new request_rec -@@ -61,6 +68,20 @@ - request_rec *ap_read_request(conn_rec *c); - - /** -+ * Parse and validate the request line. -+ * @param r The current request -+ * @return 1 on success, 0 on failure -+ */ -+AP_DECLARE(int) ap_parse_request_line(request_rec *r); -+ -+/** -+ * Validate the request header and select vhost. -+ * @param r The current request -+ * @return 1 on success, 0 on failure -+ */ -+AP_DECLARE(int) ap_check_request_header(request_rec *r); -+ -+/** - * Read the mime-encoded headers. - * @param r The current request - */ ---- a/include/http_vhost.h -+++ b/include/http_vhost.h -@@ -100,6 +100,19 @@ - AP_DECLARE(void) ap_update_vhost_from_headers(request_rec *r); - - /** -+ * Updates r->server with the best name-based virtual host match, within -+ * the chain of matching virtual hosts selected by ap_update_vhost_given_ip. -+ * @param r The current request -+ * @param require_match 1 to return an HTTP error if the requested hostname is -+ * not explicitly matched to a VirtualHost. -+ * @return return HTTP_OK unless require_match was specified and the requested -+ * hostname did not match any ServerName, ServerAlias, or VirtualHost -+ * address-spec. -+ */ -+AP_DECLARE(int) ap_update_vhost_from_headers_ex(request_rec *r, int require_match); -+ -+ -+/** - * Match the host in the header with the hostname of the server for this - * request. - * @param r The current request ---- a/modules/http2/h2_request.c -+++ b/modules/http2/h2_request.c -@@ -210,75 +210,12 @@ - return dst; - } - --#if !AP_MODULE_MAGIC_AT_LEAST(20150222, 13) --static request_rec *my_ap_create_request(conn_rec *c) --{ -- apr_pool_t *p; -- request_rec *r; -- -- apr_pool_create(&p, c->pool); -- apr_pool_tag(p, "request"); -- r = apr_pcalloc(p, sizeof(request_rec)); -- AP_READ_REQUEST_ENTRY((intptr_t)r, (uintptr_t)c); -- r->pool = p; -- r->connection = c; -- r->server = c->base_server; -- -- r->user = NULL; -- r->ap_auth_type = NULL; -- -- r->allowed_methods = ap_make_method_list(p, 2); -- -- r->headers_in = apr_table_make(r->pool, 5); -- r->trailers_in = apr_table_make(r->pool, 5); -- r->subprocess_env = apr_table_make(r->pool, 25); -- r->headers_out = apr_table_make(r->pool, 12); -- r->err_headers_out = apr_table_make(r->pool, 5); -- r->trailers_out = apr_table_make(r->pool, 5); -- r->notes = apr_table_make(r->pool, 5); -- -- r->request_config = ap_create_request_config(r->pool); -- /* Must be set before we run create request hook */ -- -- r->proto_output_filters = c->output_filters; -- r->output_filters = r->proto_output_filters; -- r->proto_input_filters = c->input_filters; -- r->input_filters = r->proto_input_filters; -- ap_run_create_request(r); -- r->per_dir_config = r->server->lookup_defaults; -- -- r->sent_bodyct = 0; /* bytect isn't for body */ -- -- r->read_length = 0; -- r->read_body = REQUEST_NO_BODY; -- -- r->status = HTTP_OK; /* Until further notice */ -- r->header_only = 0; -- r->the_request = NULL; -- -- /* Begin by presuming any module can make its own path_info assumptions, -- * until some module interjects and changes the value. -- */ -- r->used_path_info = AP_REQ_DEFAULT_PATH_INFO; -- -- r->useragent_addr = c->client_addr; -- r->useragent_ip = c->client_ip; -- -- return r; --} --#endif -- - request_rec *h2_request_create_rec(const h2_request *req, conn_rec *c) - { -- int access_status; -+ int access_status = HTTP_OK; - --#if AP_MODULE_MAGIC_AT_LEAST(20150222, 13) - request_rec *r = ap_create_request(c); --#else -- request_rec *r = my_ap_create_request(c); --#endif - --#if AP_MODULE_MAGIC_AT_LEAST(20200331, 3) - ap_run_pre_read_request(r, c); - - /* Time to populate r with the data we have. */ -@@ -307,49 +244,6 @@ - r->status = HTTP_OK; - goto die; - } --#else -- { -- const char *s; -- -- r->headers_in = apr_table_clone(r->pool, req->headers); -- ap_run_pre_read_request(r, c); -- -- /* Time to populate r with the data we have. */ -- r->request_time = req->request_time; -- r->method = apr_pstrdup(r->pool, req->method); -- /* Provide quick information about the request method as soon as known */ -- r->method_number = ap_method_number_of(r->method); -- if (r->method_number == M_GET && r->method[0] == 'H') { -- r->header_only = 1; -- } -- ap_parse_uri(r, req->path ? req->path : ""); -- r->protocol = (char*)"HTTP/2.0"; -- r->proto_num = HTTP_VERSION(2, 0); -- r->the_request = apr_psprintf(r->pool, "%s %s HTTP/2.0", -- r->method, req->path ? req->path : ""); -- -- /* Start with r->hostname = NULL, ap_check_request_header() will get it -- * form Host: header, otherwise we get complains about port numbers. -- */ -- r->hostname = NULL; -- ap_update_vhost_from_headers(r); -- -- /* we may have switched to another server */ -- r->per_dir_config = r->server->lookup_defaults; -- -- s = apr_table_get(r->headers_in, "Expect"); -- if (s && s[0]) { -- if (ap_cstr_casecmp(s, "100-continue") == 0) { -- r->expecting_100 = 1; -- } -- else { -- r->status = HTTP_EXPECTATION_FAILED; -- access_status = r->status; -- goto die; -- } -- } -- } --#endif - - /* we may have switched to another server */ - r->per_dir_config = r->server->lookup_defaults; ---- a/server/core.c -+++ b/server/core.c -@@ -511,6 +511,8 @@ - conf->protocols_honor_order = -1; - conf->merge_slashes = AP_CORE_CONFIG_UNSET; - -+ conf->strict_host_check= AP_CORE_CONFIG_UNSET; -+ - return (void *)conf; - } - -@@ -585,6 +587,12 @@ - ? virt->flush_max_pipelined - : base->flush_max_pipelined; - -+ conf->strict_host_check = (virt->strict_host_check != AP_CORE_CONFIG_UNSET) -+ ? virt->strict_host_check -+ : base->strict_host_check; -+ -+ AP_CORE_MERGE_FLAG(strict_host_check, conf, base, virt); -+ - return conf; - } - -@@ -4623,7 +4631,10 @@ - AP_INIT_FLAG("QualifyRedirectURL", set_qualify_redirect_url, NULL, OR_FILEINFO, - "Controls whether the REDIRECT_URL environment variable is fully " - "qualified"), -- -+AP_INIT_FLAG("StrictHostCheck", set_core_server_flag, -+ (void *)APR_OFFSETOF(core_server_config, strict_host_check), -+ RSRC_CONF, -+ "Controls whether a hostname match is required"), - AP_INIT_TAKE1("ForceType", ap_set_string_slot_lower, - (void *)APR_OFFSETOF(core_dir_config, mime_type), OR_FILEINFO, - "a mime type that overrides other configured type"), -@@ -5623,4 +5634,3 @@ - core_cmds, /* command apr_table_t */ - register_hooks /* register hooks */ - }; -- ---- a/server/core_filters.c -+++ b/server/core_filters.c -@@ -85,11 +85,6 @@ - apr_size_t nvec; - }; - --struct core_filter_ctx { -- apr_bucket_brigade *b; -- apr_bucket_brigade *tmpbb; --}; -- - - apr_status_t ap_core_input_filter(ap_filter_t *f, apr_bucket_brigade *b, - ap_input_mode_t mode, apr_read_type_e block, ---- a/server/protocol.c -+++ b/server/protocol.c -@@ -609,8 +609,15 @@ - } - - r->args = r->parsed_uri.query; -- r->uri = r->parsed_uri.path ? r->parsed_uri.path -- : apr_pstrdup(r->pool, "/"); -+ if (r->parsed_uri.path) { -+ r->uri = r->parsed_uri.path; -+ } -+ else if (r->method_number == M_OPTIONS) { -+ r->uri = apr_pstrdup(r->pool, "*"); -+ } -+ else { -+ r->uri = apr_pstrdup(r->pool, "/"); -+ } - - #if defined(OS2) || defined(WIN32) - /* Handle path translations for OS/2 and plug security hole. -@@ -645,13 +652,6 @@ - - static int read_request_line(request_rec *r, apr_bucket_brigade *bb) - { -- enum { -- rrl_none, rrl_badmethod, rrl_badwhitespace, rrl_excesswhitespace, -- rrl_missinguri, rrl_baduri, rrl_badprotocol, rrl_trailingtext, -- rrl_badmethod09, rrl_reject09 -- } deferred_error = rrl_none; -- char *ll; -- char *uri; - apr_size_t len; - int num_blank_lines = DEFAULT_LIMIT_BLANK_LINES; - core_server_config *conf = ap_get_core_module_config(r->server->module_config); -@@ -711,6 +711,20 @@ - } - - r->request_time = apr_time_now(); -+ return 1; -+} -+ -+AP_DECLARE(int) ap_parse_request_line(request_rec *r) -+{ -+ core_server_config *conf = ap_get_core_module_config(r->server->module_config); -+ int strict = (conf->http_conformance != AP_HTTP_CONFORMANCE_UNSAFE); -+ enum { -+ rrl_none, rrl_badmethod, rrl_badwhitespace, rrl_excesswhitespace, -+ rrl_missinguri, rrl_baduri, rrl_badprotocol, rrl_trailingtext, -+ rrl_badmethod09, rrl_reject09 -+ } deferred_error = rrl_none; -+ apr_size_t len = 0; -+ char *uri, *ll; - - r->method = r->the_request; - -@@ -742,7 +756,6 @@ - if (deferred_error == rrl_none) - deferred_error = rrl_missinguri; - r->protocol = uri = ""; -- len = 0; - goto rrl_done; - } - else if (strict && ll[0] && apr_isspace(ll[1]) -@@ -773,7 +786,6 @@ - /* Verify URI terminated with a single SP, or mark as specific error */ - if (!ll) { - r->protocol = ""; -- len = 0; - goto rrl_done; - } - else if (strict && ll[0] && apr_isspace(ll[1]) -@@ -866,6 +878,14 @@ - r->header_only = 1; - - ap_parse_uri(r, uri); -+ if (r->status == HTTP_OK -+ && (r->parsed_uri.path != NULL) -+ && (r->parsed_uri.path[0] != '/') -+ && (r->method_number != M_OPTIONS -+ || strcmp(r->parsed_uri.path, "*") != 0)) { -+ /* Invalid request-target per RFC 7230 section 5.3 */ -+ r->status = HTTP_BAD_REQUEST; -+ } - - /* With the request understood, we can consider HTTP/0.9 specific errors */ - if (r->proto_num == HTTP_VERSION(0, 9) && deferred_error == rrl_none) { -@@ -973,6 +993,79 @@ - return 0; - } - -+AP_DECLARE(int) ap_check_request_header(request_rec *r) -+{ -+ core_server_config *conf; -+ int strict_host_check; -+ const char *expect; -+ int access_status; -+ -+ conf = ap_get_core_module_config(r->server->module_config); -+ -+ /* update what we think the virtual host is based on the headers we've -+ * now read. may update status. -+ */ -+ strict_host_check = (conf->strict_host_check == AP_CORE_CONFIG_ON); -+ access_status = ap_update_vhost_from_headers_ex(r, strict_host_check); -+ if (strict_host_check && access_status != HTTP_OK) { -+ if (r->server == ap_server_conf) { -+ ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r, APLOGNO(10156) -+ "Requested hostname '%s' did not match any ServerName/ServerAlias " -+ "in the global server configuration ", r->hostname); -+ } -+ else { -+ ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r, APLOGNO(10157) -+ "Requested hostname '%s' did not match any ServerName/ServerAlias " -+ "in the matching virtual host (default vhost for " -+ "current connection is %s:%u)", -+ r->hostname, r->server->defn_name, r->server->defn_line_number); -+ } -+ r->status = access_status; -+ } -+ if (r->status != HTTP_OK) { -+ return 0; -+ } -+ -+ if ((!r->hostname && (r->proto_num >= HTTP_VERSION(1, 1))) -+ || ((r->proto_num == HTTP_VERSION(1, 1)) -+ && !apr_table_get(r->headers_in, "Host"))) { -+ /* -+ * Client sent us an HTTP/1.1 or later request without telling us the -+ * hostname, either with a full URL or a Host: header. We therefore -+ * need to (as per the 1.1 spec) send an error. As a special case, -+ * HTTP/1.1 mentions twice (S9, S14.23) that a request MUST contain -+ * a Host: header, and the server MUST respond with 400 if it doesn't. -+ */ -+ ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(00569) -+ "client sent HTTP/1.1 request without hostname " -+ "(see RFC2616 section 14.23): %s", r->uri); -+ r->status = HTTP_BAD_REQUEST; -+ return 0; -+ } -+ -+ if (((expect = apr_table_get(r->headers_in, "Expect")) != NULL) -+ && (expect[0] != '\0')) { -+ /* -+ * The Expect header field was added to HTTP/1.1 after RFC 2068 -+ * as a means to signal when a 100 response is desired and, -+ * unfortunately, to signal a poor man's mandatory extension that -+ * the server must understand or return 417 Expectation Failed. -+ */ -+ if (ap_cstr_casecmp(expect, "100-continue") == 0) { -+ r->expecting_100 = 1; -+ } -+ else { -+ ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, APLOGNO(00570) -+ "client sent an unrecognized expectation value " -+ "of Expect: %s", expect); -+ r->status = HTTP_EXPECTATION_FAILED; -+ return 0; -+ } -+ } -+ -+ return 1; -+} -+ - static int table_do_fn_check_lengths(void *r_, const char *key, - const char *value) - { -@@ -1256,16 +1349,10 @@ - apr_brigade_destroy(tmp_bb); - } - --request_rec *ap_read_request(conn_rec *conn) -+AP_DECLARE(request_rec *) ap_create_request(conn_rec *conn) - { - request_rec *r; - apr_pool_t *p; -- const char *expect; -- int access_status; -- apr_bucket_brigade *tmp_bb; -- apr_socket_t *csd; -- apr_interval_time_t cur_timeout; -- - - apr_pool_create(&p, conn->pool); - apr_pool_tag(p, "request"); -@@ -1304,6 +1391,7 @@ - r->read_body = REQUEST_NO_BODY; - - r->status = HTTP_OK; /* Until further notice */ -+ r->header_only = 0; - r->the_request = NULL; - - /* Begin by presuming any module can make its own path_info assumptions, -@@ -1314,13 +1402,35 @@ - r->useragent_addr = conn->client_addr; - r->useragent_ip = conn->client_ip; - -+ return r; -+} -+ -+/* Apply the server's timeout/config to the connection/request. */ -+static void apply_server_config(request_rec *r) -+{ -+ apr_socket_t *csd; -+ -+ csd = ap_get_conn_socket(r->connection); -+ apr_socket_timeout_set(csd, r->server->timeout); -+ -+ r->per_dir_config = r->server->lookup_defaults; -+} -+ -+request_rec *ap_read_request(conn_rec *conn) -+{ -+ int access_status; -+ apr_bucket_brigade *tmp_bb; -+ -+ request_rec *r = ap_create_request(conn); -+ - tmp_bb = apr_brigade_create(r->pool, r->connection->bucket_alloc); - conn->keepalive = AP_CONN_UNKNOWN; - - ap_run_pre_read_request(r, conn); - - /* Get the request... */ -- if (!read_request_line(r, tmp_bb)) { -+ if (!read_request_line(r, tmp_bb) || !ap_parse_request_line(r)) { -+ apr_brigade_cleanup(tmp_bb); - switch (r->status) { - case HTTP_REQUEST_URI_TOO_LARGE: - case HTTP_BAD_REQUEST: -@@ -1336,49 +1446,38 @@ - "request failed: malformed request line"); - } - access_status = r->status; -- r->status = HTTP_OK; -- ap_die(access_status, r); -- ap_update_child_status(conn->sbh, SERVER_BUSY_LOG, r); -- ap_run_log_transaction(r); -- r = NULL; -- apr_brigade_destroy(tmp_bb); -- goto traceout; -+ goto die_unusable_input; -+ - case HTTP_REQUEST_TIME_OUT: -+ /* Just log, no further action on this connection. */ - ap_update_child_status(conn->sbh, SERVER_BUSY_LOG, NULL); - if (!r->connection->keepalives) - ap_run_log_transaction(r); -- apr_brigade_destroy(tmp_bb); -- goto traceout; -- default: -- apr_brigade_destroy(tmp_bb); -- r = NULL; -- goto traceout; -+ break; - } -+ /* Not worth dying with. */ -+ conn->keepalive = AP_CONN_CLOSE; -+ apr_pool_destroy(r->pool); -+ goto ignore; - } -+ apr_brigade_cleanup(tmp_bb); - - /* We may have been in keep_alive_timeout mode, so toggle back - * to the normal timeout mode as we fetch the header lines, - * as necessary. - */ -- csd = ap_get_conn_socket(conn); -- apr_socket_timeout_get(csd, &cur_timeout); -- if (cur_timeout != conn->base_server->timeout) { -- apr_socket_timeout_set(csd, conn->base_server->timeout); -- cur_timeout = conn->base_server->timeout; -- } -+ apply_server_config(r); - - if (!r->assbackwards) { - const char *tenc, *clen; - - ap_get_mime_headers_core(r, tmp_bb); -+ apr_brigade_cleanup(tmp_bb); - if (r->status != HTTP_OK) { - ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(00567) - "request failed: error reading the headers"); -- ap_send_error_response(r, 0); -- ap_update_child_status(conn->sbh, SERVER_BUSY_LOG, r); -- ap_run_log_transaction(r); -- apr_brigade_destroy(tmp_bb); -- goto traceout; -+ access_status = r->status; -+ goto die_unusable_input; - } - - clen = apr_table_get(r->headers_in, "Content-Length"); -@@ -1389,13 +1488,8 @@ - ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(10242) - "client sent invalid Content-Length " - "(%s): %s", clen, r->uri); -- r->status = HTTP_BAD_REQUEST; -- conn->keepalive = AP_CONN_CLOSE; -- ap_send_error_response(r, 0); -- ap_update_child_status(conn->sbh, SERVER_BUSY_LOG, r); -- ap_run_log_transaction(r); -- apr_brigade_destroy(tmp_bb); -- goto traceout; -+ access_status = HTTP_BAD_REQUEST; -+ goto die_unusable_input; - } - } - -@@ -1411,13 +1505,8 @@ - ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(02539) - "client sent unknown Transfer-Encoding " - "(%s): %s", tenc, r->uri); -- r->status = HTTP_BAD_REQUEST; -- conn->keepalive = AP_CONN_CLOSE; -- ap_send_error_response(r, 0); -- ap_update_child_status(conn->sbh, SERVER_BUSY_LOG, r); -- ap_run_log_transaction(r); -- apr_brigade_destroy(tmp_bb); -- goto traceout; -+ access_status = HTTP_BAD_REQUEST; -+ goto die_unusable_input; - } - - /* https://tools.ietf.org/html/rfc7230 -@@ -1437,88 +1526,79 @@ - } - } - -- apr_brigade_destroy(tmp_bb); -- -- /* update what we think the virtual host is based on the headers we've -- * now read. may update status. -- */ -- ap_update_vhost_from_headers(r); -- access_status = r->status; -- -- /* Toggle to the Host:-based vhost's timeout mode to fetch the -- * request body and send the response body, if needed. -- */ -- if (cur_timeout != r->server->timeout) { -- apr_socket_timeout_set(csd, r->server->timeout); -- cur_timeout = r->server->timeout; -- } -- -- /* we may have switched to another server */ -- r->per_dir_config = r->server->lookup_defaults; -- -- if ((!r->hostname && (r->proto_num >= HTTP_VERSION(1, 1))) -- || ((r->proto_num == HTTP_VERSION(1, 1)) -- && !apr_table_get(r->headers_in, "Host"))) { -- /* -- * Client sent us an HTTP/1.1 or later request without telling us the -- * hostname, either with a full URL or a Host: header. We therefore -- * need to (as per the 1.1 spec) send an error. As a special case, -- * HTTP/1.1 mentions twice (S9, S14.23) that a request MUST contain -- * a Host: header, and the server MUST respond with 400 if it doesn't. -- */ -- access_status = HTTP_BAD_REQUEST; -- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(00569) -- "client sent HTTP/1.1 request without hostname " -- "(see RFC2616 section 14.23): %s", r->uri); -- } -- - /* - * Add the HTTP_IN filter here to ensure that ap_discard_request_body - * called by ap_die and by ap_send_error_response works correctly on - * status codes that do not cause the connection to be dropped and - * in situations where the connection should be kept alive. - */ -- - ap_add_input_filter_handle(ap_http_input_filter_handle, - NULL, r, r->connection); - -- if (access_status != HTTP_OK -- || (access_status = ap_run_post_read_request(r))) { -- ap_die(access_status, r); -- ap_update_child_status(conn->sbh, SERVER_BUSY_LOG, r); -- ap_run_log_transaction(r); -- r = NULL; -- goto traceout; -+ /* Validate Host/Expect headers and select vhost. */ -+ if (!ap_check_request_header(r)) { -+ /* we may have switched to another server still */ -+ apply_server_config(r); -+ access_status = r->status; -+ goto die_before_hooks; - } - -- if (((expect = apr_table_get(r->headers_in, "Expect")) != NULL) -- && (expect[0] != '\0')) { -- /* -- * The Expect header field was added to HTTP/1.1 after RFC 2068 -- * as a means to signal when a 100 response is desired and, -- * unfortunately, to signal a poor man's mandatory extension that -- * the server must understand or return 417 Expectation Failed. -- */ -- if (ap_cstr_casecmp(expect, "100-continue") == 0) { -- r->expecting_100 = 1; -- } -- else { -- r->status = HTTP_EXPECTATION_FAILED; -- ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, APLOGNO(00570) -- "client sent an unrecognized expectation value of " -- "Expect: %s", expect); -- ap_send_error_response(r, 0); -- ap_update_child_status(conn->sbh, SERVER_BUSY_LOG, r); -- ap_run_log_transaction(r); -- goto traceout; -- } -+ /* we may have switched to another server */ -+ apply_server_config(r); -+ -+ if ((access_status = ap_run_post_read_request(r))) { -+ goto die; - } - -- AP_READ_REQUEST_SUCCESS((uintptr_t)r, (char *)r->method, (char *)r->uri, (char *)r->server->defn_name, r->status); -+ AP_READ_REQUEST_SUCCESS((uintptr_t)r, (char *)r->method, -+ (char *)r->uri, (char *)r->server->defn_name, -+ r->status); - return r; -- traceout: -+ -+ /* Everything falls through on failure */ -+ -+die_unusable_input: -+ /* Input filters are in an undeterminate state, cleanup (including -+ * CORE_IN's socket) such that any further attempt to read is EOF. -+ */ -+ { -+ ap_filter_t *f = conn->input_filters; -+ while (f) { -+ if (f->frec == ap_core_input_filter_handle) { -+ core_net_rec *net = f->ctx; -+ apr_brigade_cleanup(net->in_ctx->b); -+ break; -+ } -+ ap_remove_input_filter(f); -+ f = f->next; -+ } -+ conn->input_filters = r->input_filters = f; -+ conn->keepalive = AP_CONN_CLOSE; -+ } -+ -+die_before_hooks: -+ /* First call to ap_die() (non recursive) */ -+ r->status = HTTP_OK; -+ -+die: -+ ap_die(access_status, r); -+ -+ /* ap_die() sent the response through the output filters, we must now -+ * end the request with an EOR bucket for stream/pipeline accounting. -+ */ -+ { -+ apr_bucket_brigade *eor_bb; -+ eor_bb = apr_brigade_create(conn->pool, conn->bucket_alloc); -+ APR_BRIGADE_INSERT_TAIL(eor_bb, -+ ap_bucket_eor_create(conn->bucket_alloc, r)); -+ ap_pass_brigade(conn->output_filters, eor_bb); -+ apr_brigade_cleanup(eor_bb); -+ } -+ -+ignore: -+ r = NULL; - AP_READ_REQUEST_FAILURE((uintptr_t)r); -- return r; -+ return NULL; - } - - /* if a request with a body creates a subrequest, remove original request's ---- a/server/vhost.c -+++ b/server/vhost.c -@@ -34,6 +34,7 @@ - #include "http_vhost.h" - #include "http_protocol.h" - #include "http_core.h" -+#include "http_main.h" - - #if APR_HAVE_ARPA_INET_H - #include -@@ -973,7 +974,13 @@ - } - - --static void check_hostalias(request_rec *r) -+/* -+ * Updates r->server from ServerName/ServerAlias. Per the interaction -+ * of ip and name-based vhosts, it only looks in the best match from the -+ * connection-level ip-based matching. -+ * Returns HTTP_BAD_REQUEST if there was no match. -+ */ -+static int update_server_from_aliases(request_rec *r) - { - /* - * Even if the request has a Host: header containing a port we ignore -@@ -1051,11 +1058,18 @@ - goto found; - } - -- return; -+ if (!r->connection->vhost_lookup_data) { -+ if (matches_aliases(r->server, host)) { -+ s = r->server; -+ goto found; -+ } -+ } -+ return HTTP_BAD_REQUEST; - - found: - /* s is the first matching server, we're done */ - r->server = s; -+ return HTTP_OK; - } - - -@@ -1072,7 +1086,7 @@ - * This is in conjunction with the ServerPath code in http_core, so we - * get the right host attached to a non- Host-sending request. - * -- * See the comment in check_hostalias about how each vhost can be -+ * See the comment in update_server_from_aliases about how each vhost can be - * listed multiple times. - */ - -@@ -1136,10 +1150,16 @@ - - AP_DECLARE(void) ap_update_vhost_from_headers(request_rec *r) - { -+ ap_update_vhost_from_headers_ex(r, 0); -+} -+ -+AP_DECLARE(int) ap_update_vhost_from_headers_ex(request_rec *r, int require_match) -+{ - core_server_config *conf = ap_get_core_module_config(r->server->module_config); - const char *host_header = apr_table_get(r->headers_in, "Host"); - int is_v6literal = 0; - int have_hostname_from_url = 0; -+ int rc = HTTP_OK; - - if (r->hostname) { - /* -@@ -1152,8 +1172,8 @@ - else if (host_header != NULL) { - is_v6literal = fix_hostname(r, host_header, conf->http_conformance); - } -- if (r->status != HTTP_OK) -- return; -+ if (!require_match && r->status != HTTP_OK) -+ return HTTP_OK; - - if (conf->http_conformance != AP_HTTP_CONFORMANCE_UNSAFE) { - /* -@@ -1174,10 +1194,16 @@ - /* check if we tucked away a name_chain */ - if (r->connection->vhost_lookup_data) { - if (r->hostname) -- check_hostalias(r); -+ rc = update_server_from_aliases(r); - else - check_serverpath(r); - } -+ else if (require_match && r->hostname) { -+ /* check the base server config */ -+ rc = update_server_from_aliases(r); -+ } -+ -+ return rc; - } - - /** diff -Nru apache2-2.4.48/debian/patches/buffer-http-request-bodies-for-tlsv13.diff apache2-2.4.51/debian/patches/buffer-http-request-bodies-for-tlsv13.diff --- apache2-2.4.48/debian/patches/buffer-http-request-bodies-for-tlsv13.diff 2021-08-12 11:51:47.000000000 +0000 +++ apache2-2.4.51/debian/patches/buffer-http-request-bodies-for-tlsv13.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,132 +0,0 @@ -From 3b6181a317bdecac0305c8eb538de4960405e3dd Mon Sep 17 00:00:00 2001 -From: Joe Orton -Date: Thu, 21 Nov 2019 15:51:32 +0000 -Subject: [PATCH] Buffer HTTP request bodies for TLSv1.3 PHA in the same way as - for TLSv<1.3 renegotiation. - -* modules/ssl/ssl_engine_kernel.c (fill_reneg_buffer): Factor - out... - (ssl_hook_Access_classic): ... from here. - (ssl_hook_Access_modern): Use it here too. - -Github: closes #75 - - -git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1870095 13f79535-47bb-0310-9956-ffa450edef68 ---- - modules/ssl/ssl_engine_kernel.c | 87 +++++++++++++++++++++------------ - 1 file changed, 55 insertions(+), 32 deletions(-) - ---- a/modules/ssl/ssl_engine_kernel.c -+++ b/modules/ssl/ssl_engine_kernel.c -@@ -114,6 +114,45 @@ - return result; - } - -+/* If a renegotiation is required for the location, and the request -+ * includes a message body (and the client has not requested a "100 -+ * Continue" response), then the client will be streaming the request -+ * body over the wire already. In that case, it is not possible to -+ * stop and perform a new SSL handshake immediately; once the SSL -+ * library moves to the "accept" state, it will reject the SSL packets -+ * which the client is sending for the request body. -+ * -+ * To allow authentication to complete in the hook, the solution used -+ * here is to fill a (bounded) buffer with the request body, and then -+ * to reinject that request body later. -+ * -+ * This function is called to fill the renegotiation buffer for the -+ * location as required, or fail. Returns zero on success or HTTP_ -+ * error code on failure. -+ */ -+static int fill_reneg_buffer(request_rec *r, SSLDirConfigRec *dc) -+{ -+ int rv; -+ apr_size_t rsize; -+ -+ /* ### this is HTTP/1.1 specific, special case for protocol? */ -+ if (r->expecting_100 || !ap_request_has_body(r)) { -+ return 0; -+ } -+ -+ rsize = dc->nRenegBufferSize == UNSET ? DEFAULT_RENEG_BUFFER_SIZE : dc->nRenegBufferSize; -+ if (rsize > 0) { -+ /* Fill the I/O buffer with the request body if possible. */ -+ rv = ssl_io_buffer_fill(r, rsize); -+ } -+ else { -+ /* If the reneg buffer size is set to zero, just fail. */ -+ rv = HTTP_REQUEST_ENTITY_TOO_LARGE; -+ } -+ -+ return rv; -+} -+ - #ifdef HAVE_TLSEXT - static int ap_array_same_str_set(apr_array_header_t *s1, apr_array_header_t *s2) - { -@@ -814,41 +853,14 @@ - } - } - -- /* If a renegotiation is now required for this location, and the -- * request includes a message body (and the client has not -- * requested a "100 Continue" response), then the client will be -- * streaming the request body over the wire already. In that -- * case, it is not possible to stop and perform a new SSL -- * handshake immediately; once the SSL library moves to the -- * "accept" state, it will reject the SSL packets which the client -- * is sending for the request body. -- * -- * To allow authentication to complete in this auth hook, the -- * solution used here is to fill a (bounded) buffer with the -- * request body, and then to reinject that request body later. -- */ -- if (renegotiate && !renegotiate_quick -- && !r->expecting_100 -- && ap_request_has_body(r)) { -- int rv; -- apr_size_t rsize; -- -- rsize = dc->nRenegBufferSize == UNSET ? DEFAULT_RENEG_BUFFER_SIZE : -- dc->nRenegBufferSize; -- if (rsize > 0) { -- /* Fill the I/O buffer with the request body if possible. */ -- rv = ssl_io_buffer_fill(r, rsize); -- } -- else { -- /* If the reneg buffer size is set to zero, just fail. */ -- rv = HTTP_REQUEST_ENTITY_TOO_LARGE; -- } -- -- if (rv) { -+ /* Fill reneg buffer if required. */ -+ if (renegotiate && !renegotiate_quick) { -+ rc = fill_reneg_buffer(r, dc); -+ if (rc) { - ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(02257) - "could not buffer message body to allow " - "SSL renegotiation to proceed"); -- return rv; -+ return rc; - } - } - -@@ -1132,6 +1144,17 @@ - } - } - -+ /* Fill reneg buffer if required. */ -+ if (change_vmode) { -+ rc = fill_reneg_buffer(r, dc); -+ if (rc) { -+ ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO() -+ "could not buffer message body to allow " -+ "TLS Post-Handshake Authentication to proceed"); -+ return rc; -+ } -+ } -+ - if (change_vmode) { - char peekbuf[1]; - diff -Nru apache2-2.4.48/debian/patches/fhs_compliance.patch apache2-2.4.51/debian/patches/fhs_compliance.patch --- apache2-2.4.48/debian/patches/fhs_compliance.patch 2021-08-12 11:51:47.000000000 +0000 +++ apache2-2.4.51/debian/patches/fhs_compliance.patch 2021-10-05 19:47:13.000000000 +0000 @@ -4,7 +4,7 @@ Last-Update: 2012-02-25 --- a/configure +++ b/configure -@@ -40439,17 +40439,17 @@ +@@ -40434,17 +40434,17 @@ cat >>confdefs.h <<_ACEOF @@ -27,7 +27,7 @@ --- a/configure.in +++ b/configure.in -@@ -874,11 +874,11 @@ +@@ -878,11 +878,11 @@ echo $MODLIST | $AWK -f $srcdir/build/build-modules-c.awk > modules.c APR_EXPAND_VAR(ap_prefix, $prefix) diff -Nru apache2-2.4.48/debian/patches/series apache2-2.4.51/debian/patches/series --- apache2-2.4.48/debian/patches/series 2021-08-12 11:51:47.000000000 +0000 +++ apache2-2.4.51/debian/patches/series 2021-10-07 17:49:44.000000000 +0000 @@ -4,11 +4,6 @@ customize_apxs.patch build_suexec-custom.patch reproducible_builds.diff -#mod_proxy_ajp-add-secret-parameter.diff -#buffer-http-request-bodies-for-tlsv13.diff -#tlsv13-add-logno.diff # This patch is applied manually #suexec-custom.patch -spelling-errors.diff -CVE-2021-33193.patch diff -Nru apache2-2.4.48/debian/patches/spelling-errors.diff apache2-2.4.51/debian/patches/spelling-errors.diff --- apache2-2.4.48/debian/patches/spelling-errors.diff 2021-08-12 11:51:47.000000000 +0000 +++ apache2-2.4.51/debian/patches/spelling-errors.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,27 +0,0 @@ -Description: little spelling errors -Author: Xavier Guimard -Forwarded: no -Last-Update: 2020-11-13 - ---- a/modules/http2/h2_config.c -+++ b/modules/http2/h2_config.c -@@ -730,7 +730,7 @@ - else if (!strcasecmp("BEFORE", sdependency)) { - dependency = H2_DEPENDANT_BEFORE; - if (sweight) { -- return "dependecy 'Before' does not allow a weight"; -+ return "dependency 'Before' does not allow a weight"; - } - } - else if (!strcasecmp("INTERLEAVED", sdependency)) { ---- a/modules/mappers/mod_imagemap.c -+++ b/modules/mappers/mod_imagemap.c -@@ -858,7 +858,7 @@ - /* There's not much else we can do ... we've already sent the headers - * to the client. - */ -- ap_rputs("\n\n[an internal server error occured]\n", r); -+ ap_rputs("\n\n[an internal server error occurred]\n", r); - menu_footer(r); - return OK; - } diff -Nru apache2-2.4.48/debian/patches/tlsv13-add-logno.diff apache2-2.4.51/debian/patches/tlsv13-add-logno.diff --- apache2-2.4.48/debian/patches/tlsv13-add-logno.diff 2021-08-12 11:51:47.000000000 +0000 +++ apache2-2.4.51/debian/patches/tlsv13-add-logno.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -From 55239ec1e23ec02734c0738a57e244b2a0de1060 Mon Sep 17 00:00:00 2001 -From: Joe Orton -Date: Thu, 21 Nov 2019 16:55:14 +0000 -Subject: [PATCH] Add logno. - -git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1870097 13f79535-47bb-0310-9956-ffa450edef68 ---- - modules/ssl/ssl_engine_kernel.c | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - ---- a/modules/ssl/ssl_engine_kernel.c -+++ b/modules/ssl/ssl_engine_kernel.c -@@ -1148,7 +1148,7 @@ - if (change_vmode) { - rc = fill_reneg_buffer(r, dc); - if (rc) { -- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO() -+ ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(10228) - "could not buffer message body to allow " - "TLS Post-Handshake Authentication to proceed"); - return rc; diff -Nru apache2-2.4.48/debian/upstream/signing-key.asc apache2-2.4.51/debian/upstream/signing-key.asc --- apache2-2.4.48/debian/upstream/signing-key.asc 2021-08-12 11:51:47.000000000 +0000 +++ apache2-2.4.51/debian/upstream/signing-key.asc 2021-09-30 13:58:11.000000000 +0000 @@ -5259,3 +5259,63 @@ Ot6BQHeyFl0mtrYT1mI= =L7j3 -----END PGP PUBLIC KEY BLOCK----- + +pub rsa4096 2021-09-01 [SC] + 26F51EF9A82F4ACB43F1903ED377C9E7D1944C66 +uid [ ultimativ ] Stefan Eissing (icing) +sub rsa4096 2021-09-01 [E] + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Comment: GPGTools - https://gpgtools.org + +mQINBGEvgQMBEADHvUv7G4XclbrRea5S/m0xcV/n4eAOE7UjoDhJurR2NYEA7Ori +YML3h+Uo0a8Fr7BWdvi9FucaxUbZ7ohbUULBNfFDRpH52ojNnnKaKgtWNbGjz0BJ +3y9Udlo7jblGXnsO5zDUoQI8t5I3MjrCK3lU5OO0gvMloa8aSl/rQJ4zo5AYx2VN +Tek0JNcccp5LJaQ31BmoC0ucanBZniQG0CrMKUw6utNoY/6HF2jNVxzBs0VBneA2 +LhIJ/2QKYIEfqTTmmDqeor/Uk3xowEpnAiEe1Y+QKlRkvNs0txekB9XKbW+L6yS8 +yW7VPtAMU4IAA6FKvSOAPWSAuqc0beitZarCw4zCLf5EsluI+r0j4nJ/rCNroiUe +CNCDx4i5wwV39m0+Dmei3HuXUBqyH1ydDspZdgSGacLqUOsj7M+v+lpWiWEgbEo8 +w1jeQ9mn+Juj73QLR3bmUxjTe8acTl22/FGKndMcNf+pawLh51NvqmOPGOX+w+Ul +jWIVG6nTCBZB3OACk8to16YMgw8NfK38VHM76YpMOJwgEk+kqljDU0vvI1LIxoT/ +BHyup3Bf2scPPKhe7U47+WBz2f2FC9ZQdlm7VhMYWhGfiilY+SkAHGIto6KEeavv +O5lo2ziOqsotQeYSN/2nyWLcayC5dQxmZJoo1VvjibRm/GkDGLTmc0wEcwARAQAB +tCtTdGVmYW4gRWlzc2luZyAoaWNpbmcpIDxzdGVmYW5AZWlzc2luZy5vcmc+iQJO +BBMBCgA4FiEEJvUe+agvSstD8ZA+03fJ59GUTGYFAmEvgQMCGwMFCwkIBwMFFQoJ +CAsFFgIDAQACHgECF4AACgkQ03fJ59GUTGaH/g//XHeDFajXzOuebcvVf6iQKUMS +WYlV/GO2f27ZutNv1nFmD6zvlOZ6yr+JANoMAK9iXK6K/R8fYlL1LzkJvCS4V0i3 +fnbZto3bd2Eiyitvs0ppj1c6GLOU5EtWLHsa3l1/X7EGjY9yOguqk168wLwMOXpy +YXGOzdqUxrep91kE4Z3y3YflcRm+3Fvi4dARnjAZguiMvbOLaiEHZ4jDDcckxQr3 +9uOWpq7OYY07PvemqCJyczVkzEKxDj7hm62p9HvoJB/KwTFkYW1aLfB8fd834iEc +6DoF17V8DoPMoU1kLRdcVDEsJPpFFEBF3pn2cmi+oOryRrSK1Rbo+HHQyFqo3D01 +9/svYZHRXnXhRbfBd45/qYaJOeq4tqo572Lv2LFDkuZ6S3rJ1qgVPSvSHL7kkOxh ++/x2zRujXzgdVorjXLYw6LfkCHzaevd/DVycHh6d5ctfiTSEsy3JVp+XKK94r8Rb +e9ybf6whA7tEnuwr0sX5219eYGWw5/awMn8UfMSdrRYQbRdW7Wr8vA+7UMdlY+VI +51gFBAod11bSi9uMPToXczwYH3OMRnAn04sIp2BOwCwnIW4h+RD71pnZgDMcxiil +NxhZJYw8w5dvla2v3zxh+oCa+bdP79wHbphNVVWMfhJcnRbQlDiZgoKXdPhU+mcN +BlyebrE81USOWMS6XXi5Ag0EYS+BAwEQAJ1jce2bjEpG6RNaXkN03GuzB8EOOW4K +J7t2ZNhX77okMdcUrXcu8DvvDG7okGDtwB+Ql6yWwbJeCIxhyWeeF+TwcZWvBs00 +3uiiZLfissN4pn9198BtxntUVqoc1NKbAudOyAimlCUlDExEhHQQ6PYP7i6xBf/M +3MZlYyni2ZnMjbsxuNXTN0TR2J53sKCaQvjQjWQwD9N5/0ZivU/uiCuG1Sbn6Wjt +Xp511g74m0Rio68i12/QVEfMZWhorWDhDxQSPhVWqFC1sChLDHZ/7L1IhzMX0q3W +xPCK+rBsMSy/SWw5GotrQATIgJLTGQG7tehDWiVDTxCQSrELQoawJdO99g6C+OEL +m3Z5CnDYVwD4CLPB+DRROaB8UbauvMJZCHMo3OXUALj89ZRpD20h2RQyIkTl37LS +J9IYM9SxA792ujNoUbdWS/FNIUpopP94jemyaj6qqEBwUGMvIPE0RdsIPdOEcuS3 +3kW9W/bHlWCe8m0CIPbwZFohNGk9+KBalz1CTNnZxB7rvRyLLhzJws9BqtU7X3dy +J0ZcYHGQJsvU8ZfAM/EUMLbyvUSbnDdNwDDjduO8ZuOWYjg5f/FwSR25k/yGvfUe +RyiptHnl5c7BMkNaEtfHFVDPOIts6vDVD3K/np9AK7UY58snaMnqFTtxz1munJSX +C0IXelr+V6hRABEBAAGJAjYEGAEKACAWIQQm9R75qC9Ky0PxkD7Td8nn0ZRMZgUC +YS+BAwIbDAAKCRDTd8nn0ZRMZqEoD/49MVe/6bW54eh0CG6B07tY1qlkelSv+xfY +tgZ3V+vZFtLVjo0RYpeP4Yt0ZtpNqZEPnHqwAvD7TZQayNVgo13uK/0aBlAhVtWZ +54nuItHcwT90u+3Tj5hnHwPptIxSsfRWEAg5BkegQN76c+yhNHWJ5U2H2pG2+YkP +dXHS89/nbDEi9kZhgtIer9lhmZSgSO2RYzj/QHgLNEor3IGUGAI3u0M2o+dcoVyH +NJGPRboBzCm8qNDt/3cctQDzFdDA+3X7KbPKekYs3ewuO1l+JtXtnq3S4tkvMDI1 +ZKX0RBydw5w+bksTk6Z7X7nbYmPCeNNBVQUshwQwDXCHPDXd1MxWJHqTz8lOPo70 +fHH0DWTTOw9rNMacUnz7FE0veDcknOZQ4snbHwZkUC4Mg5wM6KOyWgrTW6XK0TSx +Su1Qou7xKD/A1zgx9C0eIqicnifDUEY9SGfXaJrsJDJICEP0BtmcfsP0Z8DcmzOv +atfaF/cmJBtSR6IegJYJCtrlFdpIKQSikZO4QP5B3odc0ipuklkJcPkbQhpx+C5x +O3yU7Izv+cy+yhF+uq8NtWVQx+WCtt4RWqSn6sxtUvTb5qnRbMQtZJ2vbN8+WqTK +ZNlXGF7PBgjSTJnHmCvaT4gfVnJ/NAwn4stq+bdPnrBSKaDnYGwWpV9g8u+XSpOF +ebJKIV3Evw== +=tHCM +-----END PGP PUBLIC KEY BLOCK----- + diff -Nru apache2-2.4.48/docs/manual/bind.html.de apache2-2.4.51/docs/manual/bind.html.de --- apache2-2.4.48/docs/manual/bind.html.de 2021-04-22 06:43:44.000000000 +0000 +++ apache2-2.4.51/docs/manual/bind.html.de 2021-09-16 07:58:22.000000000 +0000 @@ -202,7 +202,7 @@  ja  |  ko  |  tr 

-
top

Kommentare

Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our mailing lists.
+
top

Kommentare

Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our mailing lists.
+ + +

HTML/2.0 Test File: 006

+
This page contains: +
    +
  • HTML +
  • CSS +
  • JavaScript +
+
+
+ +
+ + \ No newline at end of file diff -Nru apache2-2.4.48/test/modules/http2/htdocs/test1/007/007.py apache2-2.4.51/test/modules/http2/htdocs/test1/007/007.py --- apache2-2.4.48/test/modules/http2/htdocs/test1/007/007.py 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.51/test/modules/http2/htdocs/test1/007/007.py 2021-08-20 16:07:44.000000000 +0000 @@ -0,0 +1,29 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +import cgi, sys +import cgitb; cgitb.enable() + +print "Content-Type: text/html;charset=UTF-8" +print + +print """\ + + HTML/2.0 Test File: 007 (received data) +

HTML/2.0 Test File: 007

""" + +# alternative output: parsed form params <-> plain POST body +parseContent = True # <-> False + +if parseContent: + print '

Data processed:

    ' + form = cgi.FieldStorage() + for name in form: + print '
  • ', name, ': ', form[name].value, '
  • ' + print '
' +else: + print '

POST data output:

'
+	data = sys.stdin.read()
+	print data
+	print '
' + +print '' \ No newline at end of file diff -Nru apache2-2.4.48/test/modules/http2/htdocs/test1/007.html apache2-2.4.51/test/modules/http2/htdocs/test1/007.html --- apache2-2.4.48/test/modules/http2/htdocs/test1/007.html 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.51/test/modules/http2/htdocs/test1/007.html 2021-08-20 16:07:44.000000000 +0000 @@ -0,0 +1,21 @@ + + + + +HTML/2.0 Test File: 007 + + +

HTML/2.0 Test File: 007

+

This page is used to send data from the client to the server:

+
+ + Name:
+ Age:
+ Gender: Male + Female
+ + +
+
+ + \ No newline at end of file diff -Nru apache2-2.4.48/test/modules/http2/htdocs/test1/009.py apache2-2.4.51/test/modules/http2/htdocs/test1/009.py --- apache2-2.4.48/test/modules/http2/htdocs/test1/009.py 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.51/test/modules/http2/htdocs/test1/009.py 2021-08-20 16:07:44.000000000 +0000 @@ -0,0 +1,21 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +import cgi, sys, time +import cgitb; cgitb.enable() + +print "Content-Type: text/html;charset=UTF-8" +print + +print """\ + + HTML/2.0 Test File: 009 (server time) +

HTML/2.0 Test File: 009

+

60 seconds of server time, one by one.

""" + +for i in range(60): + s = time.strftime("%Y-%m-%d %H:%M:%S") + print "
", s, "
" + sys.stdout.flush() + time.sleep(1) + +print "

done.

" \ No newline at end of file diff -Nru apache2-2.4.48/test/modules/http2/htdocs/test1/alive.json apache2-2.4.51/test/modules/http2/htdocs/test1/alive.json --- apache2-2.4.48/test/modules/http2/htdocs/test1/alive.json 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.51/test/modules/http2/htdocs/test1/alive.json 2021-08-20 16:07:44.000000000 +0000 @@ -0,0 +1,5 @@ +{ + "host" : "test1", + "alive" : true +} + Binary files /srv/release.debian.org/tmp/HdKyusVpFc/apache2-2.4.48/test/modules/http2/htdocs/test1/apache.org-files/ant.jpg and /srv/release.debian.org/tmp/0jaotgCQ4h/apache2-2.4.51/test/modules/http2/htdocs/test1/apache.org-files/ant.jpg differ Binary files /srv/release.debian.org/tmp/HdKyusVpFc/apache2-2.4.48/test/modules/http2/htdocs/test1/apache.org-files/asf_logo.png and /srv/release.debian.org/tmp/0jaotgCQ4h/apache2-2.4.51/test/modules/http2/htdocs/test1/apache.org-files/asf_logo.png differ diff -Nru apache2-2.4.48/test/modules/http2/htdocs/test1/apache.org-files/async-ads.js apache2-2.4.51/test/modules/http2/htdocs/test1/apache.org-files/async-ads.js --- apache2-2.4.48/test/modules/http2/htdocs/test1/apache.org-files/async-ads.js 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.51/test/modules/http2/htdocs/test1/apache.org-files/async-ads.js 2021-08-20 16:07:44.000000000 +0000 @@ -0,0 +1,278 @@ +if(!window['googleNDT_']){window['googleNDT_']=(new Date()).getTime();}(function() {window.googleAltLoader=4;var version_='3.0';var hash_='1ac79f060b1e0868a225f2a9999fbf89c251fdf3';var module_='ads';var packages_='search';var googleApisBase_='//ajax.googleapis.com/ajax';var serviceBase_='//cse.google.com/uds';var serviceHost_='cse.google.com';var k;var aa=this,ba=function(a){var b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array";if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null"; +else if("function"==b&&"undefined"==typeof a.call)return"object";return b},ca=function(a){return null!=a},da=function(a){return"string"==typeof a},ea=function(a,b,c){return a.call.apply(a.bind,arguments)},fa=function(a,b,c){if(!a)throw Error();if(2this.Mf&&(Mb("Tried to set int value to a number too large ( "+a+" = "+b+")","sIGVV"),c=this.Mf);0>c&&(Mb("Tried to set int value to a number too small ( "+a+" = "+b+")","sIGVV"),c=0);return c};k.Ga=m(x.prototype.Ga,"fssiGVV");k.Db=function(){return this.value||0};k.Db=m(x.prototype.Db,"fssiTB");k.Ub=function(a){return a};k.Ub=m(x.prototype.Ub,"fssiPFB"); +k.Ra=function(){return this.value+""};k.Ra=m(x.prototype.Ra,"fssiTES");k.Oa=function(a){return parseInt(a,10)};k.Oa=m(x.prototype.Oa,"fssiPES");var Ib=function(){this.lb=this.value=null;this.U=!1},Ib=m(Ib,"fsES");k=Ib.prototype;k.Td=2;k.Ga=function(a,b){return b=b?b.toString():""};k.Ga=m(Ib.prototype.Ga,"fsesGVV");k.Ra=function(){return this.value?encodeURIComponent(this.value):""};k.Ra=m(Ib.prototype.Ra,"fsesTES");k.Oa=function(a){return decodeURIComponent(a)};k.Oa=m(Ib.prototype.Oa,"fsesPES"); +var Lb=[Jb,x,Ib],Nb=function(a){null==Hb&&Kb();return Hb.Qa(a)},Nb=m(Nb,"fsSC"),Pb=function(a,b){null==Hb&&Kb();null==t&&(t={},Ob());a.Ua=b;t[a.sessionId]=a},Pb=m(Pb,"fsLFC"),Ob=function(){window.setInterval(Qb,500);Hb.Ha()},Ob=m(Ob,"fsIL"),Qb=function(){for(var a in t)if(t.hasOwnProperty(a)){var b=t[a];b.Rb()||(b.Ua=null,delete t[a])}},Qb=m(Qb,"fsCDI"),Kb=function(){A.Oe();Hb=A.af?A:ra()?z:B},Kb=m(Kb,"fsLT"),z={Jf:"exists",Qa:function(a){if(!a.U)return!0;for(var b in a.state)if(a.state.hasOwnProperty(b)){var c= +a.state[b];if(c.U&&c.Db){var d=c.Tc,e=c.Db(),f=b+":";z.Md(f+z.Jf);for(var g=0,h=1;g")&&(a=a.replace(ac,">"));-1!=a.indexOf('"')&&(a=a.replace(bc,"""));-1!=a.indexOf("'")&&(a=a.replace(cc,"'"));-1!=a.indexOf("\x00")&&(a=a.replace(dc,"�"));return a},Zb=/&/g,$b=//g,bc=/"/g,cc=/'/g,dc=/\x00/g,Yb=/[\x00&<>"']/, +fc=function(){return Math.floor(2147483648*Math.random()).toString(36)+Math.abs(Math.floor(2147483648*Math.random())^ia()).toString(36)},gc=function(a,b){return ab?1:0};var hc=Array.prototype.filter?function(a,b,c){return Array.prototype.filter.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=[],f=0,g=da(a)?a.split(""):a,h=0;h]*>|&[^;]+;/g,kc=function(a,b){return b?a.replace(jc,""):a},lc=RegExp("[A-Za-z\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02b8\u0300-\u0590\u0800-\u1fff\u200e\u2c00-\ufb1c\ufe00-\ufe6f\ufefd-\uffff]"),mc=RegExp("^[^A-Za-z\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02b8\u0300-\u0590\u0800-\u1fff\u200e\u2c00-\ufb1c\ufe00-\ufe6f\ufefd-\uffff]*[\u0591-\u06ef\u06fa-\u07ff\u200f\ufb1d-\ufdff\ufe70-\ufefc]"),nc=/^http:\/\/.*/,oc=/\s+/,pc=/[\d\u06f0-\u06f9]/;var rc=function(){this.Kj="";this.$h=qc},qc={};var tc=function(){this.df="";this.ai=sc};tc.prototype.ve=function(){return 1};var uc=function(a){return a instanceof tc&&a.constructor===tc&&a.ai===sc?a.df:"type_error:SafeUrl"},sc={};var wc=function(){this.Lj="";this.bi=vc};wc.prototype.ve=function(){return 1};var xc=function(a){return a instanceof wc&&a.constructor===wc&&a.bi===vc?a.Lj:"type_error:TrustedResourceUrl"},vc={};var zc=function(){this.df="";this.Zh=yc;this.Ii=null};zc.prototype.ve=function(){return this.Ii};var yc={};var Ac=function(){return null},Bc=function(a){var b=arguments,c=b.length;return function(){for(var a,e=0;eparseFloat(a))?String(b):a}(),Qc={},Rc=function(a){var b;if(!(b=Qc[a])){b=0;for(var c=Xb(String(Pc)).split("."),d=Xb(String(a)).split("."),e=Math.max(c.length,d.length),f=0;0==b&&f"+b,d.removeChild(d.firstChild)):d.innerHTML=b;if(1==d.childNodes.length)d=d.removeChild(d.firstChild);else{for(c=c.createDocumentFragment();d.firstChild;)c.appendChild(d.firstChild);d=c}return d};Xc.prototype.appendChild=function(a,b){a.appendChild(b)}; +Xc.prototype.contains=function(a,b){if(a.contains&&1==b.nodeType)return a==b||a.contains(b);if("undefined"!=typeof a.compareDocumentPosition)return a==b||Boolean(a.compareDocumentPosition(b)&16);for(;b&&a!=b;)b=b.parentNode;return b==a};E&&Rc(8);var ad={},bd={},cd={},dd={},ed={},fd={},gd=function(){throw Error("Do not instantiate directly");};gd.prototype.Ba=null;gd.prototype.toString=function(){return this.content};var hd=function(){gd.call(this)};ja(hd,gd);var id=function(a,b){return null!=a&&a.Ya===b},jd=function(a){if(null!=a)switch(a.Ba){case 1:return 1;case -1:return-1;case 0:return 0}return null},kd=function(){gd.call(this)};ja(kd,gd);kd.prototype.Ya=ad;var G=function(a){return null!=a&&a.Ya===ad?a:a instanceof zc?F(a instanceof zc&&a.constructor===zc&&a.Zh===yc?a.df:"type_error:SafeHtml",a.ve()):F(ec(String(String(a))),jd(a))},ld=function(){gd.call(this)};ja(ld,gd);ld.prototype.Ya={};ld.prototype.Ba=1;var md=function(){gd.call(this)};ja(md,gd); +md.prototype.Ya=bd;md.prototype.Ba=1;var nd=function(){gd.call(this)};ja(nd,gd);nd.prototype.Ya=cd;nd.prototype.Ba=1;var od=function(){gd.call(this)};ja(od,gd);od.prototype.Ya=dd;od.prototype.Ba=1;var pd=function(){gd.call(this)};ja(pd,gd);pd.prototype.Ya=ed;pd.prototype.Ba=1;var qd=function(a,b){this.content=String(a);this.Ba=null!=b?b:null};ja(qd,hd);qd.prototype.Ya=fd; +var rd=function(a){function b(a){this.content=a}b.prototype=a.prototype;return function(a){return new b(String(a))}},F=function(a){function b(a){this.content=a}b.prototype=a.prototype;return function(a,d){var e=new b(String(a));void 0!==d&&(e.Ba=d);return e}}(kd);rd(ld);var sd=rd(md);rd(nd); +var td=rd(od),ud=rd(pd),vd=function(a,b){function c(){}c.prototype=a;var d=new c,e;for(e in b)d[e]=b[e];return d},wd=function(a){function b(a){this.content=a}b.prototype=a.prototype;return function(a){return(a=String(a))?new b(a):""}},xd=function(a){return(a=String(a))?new qd(a,void 0):""},I=function(a){function b(a){this.content=a}b.prototype=a.prototype;return function(a,d){var e=String(a);if(!e)return"";e=new b(e);void 0!==d&&(e.Ba=d);return e}}(kd);wd(ld);wd(nd);wd(md);wd(od); +var yd=wd(pd),K=function(a){return G(a)},zd=function(a){return a.replace(/<\//g,"<\\/").replace(/\]\]>/g,"]]\\>")},M=function(a){return id(a,ad)?(a=String(a.content).replace(Ad,"").replace(Bd,"<"),String(a).replace(Cd,Dd)):ec(String(a))},Fd=function(a){if(id(a,dd))return a.content.replace(/([^"'\s])$/,"$1 ");a=String(a);a=Ed.test(a)?a:"zSoyz";return a},Id=function(a){return String(a).replace(Gd,Hd)},O=function(a){if(id(a,bd)||id(a,cd))return String(a).replace(Gd,Hd);a instanceof tc?a=Id(uc(a)): +a instanceof wc?a=Id(xc(a)):(a=String(a),a=Jd.test(a)?a.replace(Gd,Hd):"#zSoyz");return a},Ld=function(a){if(id(a,bd)||id(a,cd))return String(a).replace(Gd,Hd);a instanceof tc?a=Id(uc(a)):a instanceof wc?a=Id(xc(a)):(a=String(a),a=Kd.test(a)?a.replace(Gd,Hd):"about:invalid#zSoyz");return a},P=function(a){if(id(a,ed))return zd(a.content);null==a?a="":a instanceof rc?(a=a instanceof rc&&a.constructor===rc&&a.$h===qc?a.Kj:"type_error:SafeStyle",a=zd(a)):(a=String(a),a=Md.test(a)?a:"zSoyz");return a}, +Q=function(a){return id(a,fd)?"zSoyz":a},Nd=function(a){var b=jd(a);if(null==b){var c=b=0,d=!1;a=kc(a+"",id(a,ad)).split(oc);for(var e=0;e":">","`":"`","\u0085":"…", +"\u00a0":" ","\u2028":"
","\u2029":"
"},Dd=function(a){return Od[a]},Pd={"\x00":"%00","\u0001":"%01","\u0002":"%02","\u0003":"%03","\u0004":"%04","\u0005":"%05","\u0006":"%06","\u0007":"%07","\b":"%08","\t":"%09","\n":"%0A","\x0B":"%0B","\f":"%0C","\r":"%0D","\u000e":"%0E","\u000f":"%0F","\u0010":"%10","\u0011":"%11","\u0012":"%12","\u0013":"%13","\u0014":"%14","\u0015":"%15","\u0016":"%16","\u0017":"%17","\u0018":"%18","\u0019":"%19","\u001a":"%1A","\u001b":"%1B","\u001c":"%1C", +"\u001d":"%1D","\u001e":"%1E","\u001f":"%1F"," ":"%20",'"':"%22","'":"%27","(":"%28",")":"%29","<":"%3C",">":"%3E","\\":"%5C","{":"%7B","}":"%7D","\u007f":"%7F","\u0085":"%C2%85","\u00a0":"%C2%A0","\u2028":"%E2%80%A8","\u2029":"%E2%80%A9","\uff01":"%EF%BC%81","\uff03":"%EF%BC%83","\uff04":"%EF%BC%84","\uff06":"%EF%BC%86","\uff07":"%EF%BC%87","\uff08":"%EF%BC%88","\uff09":"%EF%BC%89","\uff0a":"%EF%BC%8A","\uff0b":"%EF%BC%8B","\uff0c":"%EF%BC%8C","\uff0f":"%EF%BC%8F","\uff1a":"%EF%BC%9A","\uff1b":"%EF%BC%9B", +"\uff1d":"%EF%BC%9D","\uff1f":"%EF%BC%9F","\uff20":"%EF%BC%A0","\uff3b":"%EF%BC%BB","\uff3d":"%EF%BC%BD"},Hd=function(a){return Pd[a]},Cd=/[\x00\x22\x27\x3c\x3e]/g,Gd=/[\x00- \x22\x27-\x29\x3c\x3e\\\x7b\x7d\x7f\x85\xa0\u2028\u2029\uff01\uff03\uff04\uff06-\uff0c\uff0f\uff1a\uff1b\uff1d\uff1f\uff20\uff3b\uff3d]/g,Md=/^(?!-*(?:expression|(?:moz-)?binding))(?:[.#]?-?(?:[_a-z0-9-]+)(?:-[_a-z0-9-]+)*-?|-?(?:[0-9]+(?:\.[0-9]*)?|\.[0-9]+)(?:[a-z]{1,2}|%)?|!important|)$/i,Jd=/^(?![^#?]*\/(?:\.|%2E){2}(?:[\/?#]|$))(?:(?:https?|mailto):|[^&:\/?#]*(?:[\/?#]|$))/i, +Kd=/^[^&:\/?#]*(?:[\/?#]|$)|^https?:|^data:image\/[a-z0-9+]+;base64,[a-z0-9+\/]+=*$|^blob:/i,Ed=/^(?!on|src|(?:style|action|archive|background|cite|classid|codebase|data|dsync|href|longdesc|usemap)\s*$)(?:[a-z0-9_$:-]*)$/i,Ad=/<(?:!|\/?([a-zA-Z][a-zA-Z0-9:\-]*))(?:[^>'"]|"[^"]*"|'[^']*')*>/g,Bd=/"+G(a.content)+"")};if(window.IS_GOOGLE_AFS_IFRAME_){var Td=1,R=function(){return"e"+Td++},Ud=function(a){this.Cb=a};Ud.prototype.j=function(){return this.Cb};var S=new Ud("");S.G=function(){return[]}};if(window.IS_GOOGLE_AFS_IFRAME_)var Vd=function(a,b,c,d,e,f,g,h,l,r,u,y,C,H,J){this.eb=a;this.za=b;this.xi=c;this.Jb=d;this.me=e;this.Te=f;this.yb=g;this.xk=h;this.f=l;this.A=r;this.yj=u;this.bk=y;this.Y=C;this.ac=H;this.xg=!1;this.sg=J};var Wd=function(a,b){if(a.classList)return a.classList.contains(b);for(var c=a.className.split(" "),d=0;d"+ +a+"";var c;try{c=b.firstChild.firstChild.firstChild}catch(d){return null}return 1==c.nodeType&&"tr"==c.tagName.toLowerCase()?c:null},be=function(a){var b=a.parentNode,c=a.nextSibling,d=document.createElement("div");d.appendChild(a);b&&(c?b.insertBefore(d,c):b.appendChild(d));return d};var U=function(a,b,c){if(a.addEventListener)a.addEventListener(b,c,!1);else if(a.attachEvent)a.attachEvent("on"+b,c);else{var d=a["on"+b];a["on"+b]=null!=d?Bc(c,d):c}},ce=function(a,b){U(a,"mousedown",b);U(a,"mousedown",function(a,b,e){var f=!1;return function(){f||(a.removeEventListener?a.removeEventListener(b,e,!1):a.detachEvent&&a.detachEvent("on"+b,e),f=!0)}}(a,"mousedown",b))};var de=function(a){de[" "](a);return a};de[" "]=function(){};E&&Rc("9");!Mc||Rc("528");Lc&&Rc("1.9b")||E&&Rc("8")||Jc&&Rc("9.5")||Mc&&Rc("528");Lc&&!Rc("8")||E&&Rc("9");var ee=function(a,b,c,d,e,f,g,h){this.Rc=a;this.Ef=b;this.Cf=c;this.Ff=d;this.Df=e;this.Gf=f;this.Rd=g;this.Hf=h};ee.prototype.clone=function(){return new ee(this.Rc,this.Ef,this.Cf,this.Ff,this.Df,this.Gf,this.Rd,this.Hf)}; +var fe=function(a,b){if(0==b)return a.Rc;if(1==b)return a.Rd;var c=Cc(a.Rc,a.Cf,b),d=Cc(a.Cf,a.Df,b),e=Cc(a.Df,a.Rd,b),c=Cc(c,d,b),d=Cc(d,e,b);return Cc(c,d,b)},he=function(a){var b=ge,c=(a-b.Rc)/(b.Rd-b.Rc);if(0>=c)return 0;if(1<=c)return 1;for(var d=0,e=1,f=0;8>f;f++){var g=fe(b,c),h=(fe(b,c+1E-6)-g)/1E-6;if(1E-6>Math.abs(g-a))return c;if(1E-6>Math.abs(h))break;else gf;f++)gNd(a.text),f:a.f}))},ne=function(a){return F(0'+G(a.text)+""+(a.f?"‏":"‎"):"")};var qe=function(a){return F('"+K(oe(a))+"")},re=function(a){return F('
"+K(ne({text:a.Hd,Ia:!1,f:a.f}))+""+(a.mg?' ('+K(pe({text:a.mg,f:a.f}))+")":"")+"
"+(a.Zi?"":''+K(oe(a))+""))},se=function(a){return F('"+K(ne({text:a.text,Ia:!1,f:a.f}))+"")},te=function(a){var b=F,c;c=a.wh;var d=a.xh;a=a.f;var e="";if(d&&0'+G(c)+"")},ue=function(a){return F('"+te(a)+"")},ve=function(a){return F("
"+ +G(a.Ka)+"
"+G(a.La)+"
"+G(a.Ad))},we=function(a){return F("
"+G(a.Ka)+"
"+G(a.La))},xe=function(a){var b,c="",d=b=a.eb,e=typeof d;switch("object"==e&&null!=d||"function"==e?b.toString():b){case 1:c+="oneLine";break;case 2:c+="twoLine";break;case 3:c+="threeLine"}c=xd(c);a=""+('
"+G(a.content)+"
");return F(a)};var ye=function(a){var b=Yc(a),c=new Vc(0,0),d;d=b?Yc(b):document;var e;(e=!E||9<=Uc)||(e="CSS1Compat"==Zc(d).qc.compatMode);if(a==(e?d.documentElement:d.body))return c;var f;a:{try{f=a.getBoundingClientRect()}catch(g){f={left:0,top:0,right:0,bottom:0};break a}E&&a.ownerDocument.body&&(a=a.ownerDocument,f.left-=a.documentElement.clientLeft+a.body.clientLeft,f.top-=a.documentElement.clientTop+a.body.clientTop)}a=Zc(b).qc;b=a.scrollingElement?a.scrollingElement:Mc||"CSS1Compat"!=a.compatMode?a.body|| +a.documentElement:a.documentElement;a=a.parentWindow||a.defaultView;b=E&&Rc("10")&&a.pageYOffset!=b.scrollTop?new Vc(b.scrollLeft,b.scrollTop):new Vc(a.pageXOffset||b.scrollLeft,a.pageYOffset||b.scrollTop);c.x=f.left+b.x;c.y=f.top+b.y;return c};var ze=function(a){return F(""+G(a.text)+"")};if(window.IS_GOOGLE_AFS_IFRAME_){var Ae=function(a,b){this.ki=a;this.D=b||ze};Ae.prototype.j=function(){return this.D({text:this.ki,ca:null})}};var Be=function(a){var b="";a=a.elements;for(var c=a.length,d=0;d';a=a.Jc;for(var c=a.length,d=0;d")};if(window.IS_GOOGLE_AFS_IFRAME_){var Ee=function(a,b){this.F=R();this.qb=a;this.D=b||De};Ee.prototype.j=function(){for(var a=[],b=0;b^<]*>/g,"")},Le=function(a){var b=a.offsetWidth;if(!Ge())return b;var c=document.defaultView||{};c&&c.getComputedStyle?(a=c.getComputedStyle(a,!1),b-=He(a.getPropertyValue("padding-left"))+He(a.getPropertyValue("padding-right"))):(a=a.currentStyle,b-=He(a.paddingLeft)+He(a.paddingRight));return b},Me=function(a){var b=a.cloneNode(!0);b.style.visibility="hidden";b.style.position="absolute";if(ra()){var c=a.ownerDocument.createElement("div"); +c.style.visibility="hidden";c.style.position="relative";c.style.width="9999px";c.appendChild(b);a.parentNode.appendChild(c)}else b.style.top="0",b.style.whiteSpace="nowrap",a.parentNode.appendChild(b);a=new Wc(b.offsetWidth,b.offsetHeight);ra()?c.parentNode.removeChild(c):b.parentNode.removeChild(b);return a},Ne=function(){var a=document.createElement("div");a.innerHTML="";return"http://www.w3.org/2000/svg"==(a.firstChild&&a.firstChild.namespaceURI)};var Oe=/([?|&]{1}nm=)([\d]{1,})/,Pe=/(\?|&)clkt=-?[\d]*/g,Qe=/[&\?]nb=\d/,Re=/(\?|&)nx=-?[\d]+/g,Se=/(\?|&)ny=-?[\d]+/g,Ue=function(a){return function(){for(var b=0;ba.length+b.length&&(a+=b+encodeURIComponent(c),1950'),c=a.Jc,d=c.length,e=0;e'+G(f)+"
");b+=""}return F(b)},lf=function(a){var b=F;if("jfkButton"==a.Y){var c=a.ij,d=a.text;a=F(K(Sd({href:a.url,A:a.A,qa:"grayJfkButton",content:I((c?'': +"")+''+G(d)+"")})))}else a='";return b(a)};var mf=function(a){var b=a.rb?"right":"left";a=""+('
'+G(a.Da)+'
'+G(a.Ea)+"
");return F(a)},nf=function(a){var b=a.rb?"right":"left";return a=""+('
'+Q(a.Da)+'
'+Q(a.Ea)+"
")},of=function(a){var b= +a.f?"right":"left";a=""+('
'+G(a.Ea)+''+G(a.Da)+"
");return F(a)};if(window.IS_GOOGLE_AFS_IFRAME_){var pf=function(a,b,c,d,e,f,g,h){this.F=R();this.va=a;this.aj=b;this.jj=c;this.Cb=d;this.ui=e;this.I=f;this.W=g;this.D=h||lf};pf.prototype.j=function(){return this.D({uid:this.F,url:this.va,zg:this.aj,ij:this.jj,text:this.Cb,Y:this.ui,f:this.I,A:this.W})};var qf=function(a,b,c,d,e){"svgIcon"==c&&(c=Ne()?c+"Ctc":"pngIcon");return new pf(a,(window._googCsaAlwaysHttps?"https:":"")+"//www.google.com/images/afs/mobile/button_ctc.png",(window._googCsaAlwaysHttps?"https:": +"")+"//www.google.com/images/afs/mobile/gray_phone_icon.png",b,c,d,e,void 0)},rf=function(a,b,c,d,e){"svgIcon"==c&&(c=Ne()?c+"Ctd":"pngIcon");return new pf(a,(window._googCsaAlwaysHttps?"https:":"")+"//www.google.com/images/afs/mobile/"+(c?"ctd_get_app.png":"ctd-dl-icon.png"),"",b,c,e,d,void 0)},sf=function(a,b){var c=[];a.ctc&&c.push(qf(a.ctc.u,a.ctc.bt,b.Y,b.f,b.A));a.ctd&&c.push(rf(a.u,a.ctd.ps,b.Y,b.f,b.A));!(1<=c.length)||b.Y||a.ctc&&a.ctc.coa||a.ctd||c.push(new pf(a.u,(window._googCsaAlwaysHttps? +"https:":"")+"//www.google.com/images/afs/mobile/button_visit_site.png","",b.xk,"",b.f,b.A,void 0));return c},tf=function(a,b,c,d){this.Nc=a;this.jc=b;this.o=c;this.D=d||of};tf.prototype.j=function(){var a={Da:this.jc.j(),Ea:this.Nc.j(),Z:this.o.ac?60:78,Li:"jfkButton"==this.o.Y?"top":"middle",ga:12,borderColor:"jfkButton"==this.o.Y||this.o.ac?"":"#DDDDDD",f:this.o.f};return this.D(a)};tf.prototype.M=function(a,b){this.Nc.M&&this.Nc.M(a,b);this.jc.M&&this.jc.M(a,b)};tf.prototype.G=function(a){var b= +[];this.Nc.G&&(b=b.concat(this.Nc.G(a)));this.jc.G&&(b=b.concat(this.jc.G(a)));return b};var uf=function(a,b,c){b=sf(b,c);return 1==b.length?new tf(a,b[0],c,void 0):a},vf=function(a,b){var c=sf(a,b);return 1a?b=0:.8a&&(.2>=c&&(g.style.paddingBottom="3px"),.95<=c?g.style.paddingBottom="1px":.85<=c&&(g.style.paddingBottom="2px"));g&&1==c&&(g.style.paddingBottom="");if(window.onresize)window.onresize();f.style.opacity=b},l=function(a){var b=2*(.5-a);.5a&&(c=1);f.style.height=e*c+"px";f.style.opacity=b;if(window.onresize)window.onresize()},r=new ke(350);return function(){r.$a||(Wd(b,"collapsed")?(r.Gb=h,Xd(b,"collapsed"),d&&Xd(d,"collapsed")):(r.Gb=l,Yd(b, +"collapsed"),d&&Yd(d,"collapsed")),le(r))}};var Af=function(a){return F('
'+G(a.Ka)+"
"+yf({content:I('
'+(!a.J||!a.O||a.$&&a.V?"":zf({J:a.J,O:a.O,xd:!0}))+G(a.La)+'
'+G(a.Ad)+"
"),f:a.f,$:a.$,V:a.V,sa:a.sa,ra:a.ra,Z:a.$&&a.V?45:0,ga:0,rb:a.f,J:a.J,O:a.O})+"
")},Bf=function(a){return F('
'+G(a.Ka)+"
"+yf({content:I('
'+ +(!a.J||!a.O||a.$&&a.V?"":zf({J:a.J,O:a.O,xd:!0}))+'
'+G(a.La)+"
"),f:a.f,$:a.$,V:a.V,sa:a.sa,ra:a.ra,Z:a.$&&a.V?45:0,ga:0,rb:a.f,J:a.J,O:a.O})+"
")},Cf=function(a){return F("
"+(a.$&&a.V?'':"")+G(a.nj)+(a.J&&a.O?" "+zf({J:a.J,O:a.O,xd:!0}):"")+G(a.oj)+"
")},yf=function(a){return F(K(mf({Da:I(""+ +(a.$&&a.V?'
'+(a.J&&a.O?zf({J:a.J,O:a.O,xd:!1}):"")+"
":"")),Ea:I(""+G(a.content)),Z:a.Z,ga:a.ga,rb:a.f})))},zf=function(a){return F('
('+ +G(a.O)+")
")};var Df=function(a){return F('')},Ef=function(a){return F('')};if(window.IS_GOOGLE_AFS_IFRAME_){var Gf=function(a){return a.adIconUrl&&"title-right"==a.adIconLocation?new Ff(a.adIconUrl,a.img?Df:Ef):S},Ff=function(a,b){this.ek=a;this.D=b};Ff.prototype.j=function(){return this.D({ya:this.ek})}};var Hf=function(a){return F((a.Ng?F(''):"")+'
'+K(pe({text:a.Hd,f:a.f}))+"
")};if(window.IS_GOOGLE_AFS_IFRAME_){var If=function(a,b,c){this.Ic=a;this.I=b;this.D=c||Hf};If.prototype.j=function(){return this.D({Hd:this.Ic,f:this.I,Ng:!0})}};var Kf=function(a){return""+Jf({text:a.text.c,Ia:a.text.rtl,f:a.f})},Jf=function(a){return''+Q(a.text)+""+(a.f?"‏":"‎")};var Lf=function(a){return F(a.Ne?"
"+K(pe({text:a.Ne,f:a.f}))+"
":"")};if(window.IS_GOOGLE_AFS_IFRAME_){var Mf=function(a,b,c){this.F=R();this.Cb=a;this.I=b;this.D=c||Lf};Mf.prototype.j=function(){return this.D({uid:this.F,Ne:this.Cb,f:this.I})};var Nf=function(a,b){return a.location?new Mf(a.location,b.f):S}};if(window.IS_GOOGLE_AFS_IFRAME_){var Pf=function(a,b,c,d){this.F=R();this.xa=a;this.Ce=b;this.zk=c;this.D=d||Of};Pf.prototype.j=function(){return this.D({uid:this.F,Gd:this.xa,tb:this.Ce,Hh:this.zk})};var Qf=function(a,b){var c=a.gt&&"oh"==a.gt.r&&a.gt.t?a.gt.t:null;return a.oh&&0",c=a.$e,d=c.length,e=0;e"}return F(b)};if(window.IS_GOOGLE_AFS_IFRAME_){var Sf=function(a,b,c,d){this.F=R();this.jk=a;this.W=b;this.I=c;this.D=d||Rf};Sf.prototype.j=function(){return this.D({uid:this.F,$e:this.jk,A:this.W,f:this.I})};var Uf=function(a,b){return a.plus_ones?new Sf(Tf(a),b.A,b.f):S},Tf=function(a){var b=[];if(a.plus_ones)for(var c=0,d=a.plus_ones.length;c  ('+K(Sd({href:a.Mc.u,content:Math.round(10*a.Mc.r)/10,A:a.A,qa:"sr-gt sr-gl"}))+")":"")},Xf=function(a){for(var b='
',c=a.ik,d=c.length,e=0;e ':"LINK_START"==f?'":"LINK_END"==f?"":"NUM_START"==f?'':"NUM_END"== +f?" ":K(pe({text:f,f:a.f})));return F(b+"
")},Vf=function(a){return F('
')};if(window.IS_GOOGLE_AFS_IFRAME_){var Yf=function(a,b,c,d,e,f){this.F=R();this.Cb=a;this.W=b;this.Pa=c;this.va=d;this.I=e;this.D=f||Xf};Yf.prototype.j=function(){return this.D({uid:this.F,ik:this.Cb,A:this.W,r:this.Pa,vk:this.va,f:this.I})};var Zf=function(a,b){if(a.ctd&&a.ctd.r&&a.ctd.nr&&b.ac){var c=a.ctd.r;return new Yf(["NUM_START",c,"NUM_END","RATING"," ","("+a.ctd.nr+")"],!1,c,"",b.f)}return a.sr&&a.sr.nt&&a.sr.r&&a.sr.u?new Yf(a.sr.nt,b.A,a.sr.r,a.sr.u,b.f):S}};var ag=function(a){var b="";if(a.qf&&0'),c=a.qf,d=c.length,e=0;e";c=a.ck;d=c.length;for(e=0;e";if(a.Te&&a.na&&0';c=a.na;d=c.length;for(e=0;e"}}return F(b)}, +$f=function(a){return F("")},bg=function(a){for(var b='")},cg=function(a){return F('")},dg=function(a){return F('
'+cg({uid:a.uid,na:a.na,A:a.A,qh:"sitelinksTruncatedWide",nh:"sitelinksTruncatedNarrow",Ih:"nonSfblSitelinksWrapper"})+ +"
")};if(window.IS_GOOGLE_AFS_IFRAME_){var eg=function(a,b,c,d,e){this.F=R();this.$b=a;this.W=b;this.Qj=c;this.I=d;this.D=e||ag};eg.prototype.j=function(){for(var a=[],b=[],c=0;c',c=a.be,d=c.length,e=0;e'+(0!=e?"· ":"")+K(pe({text:c[e],f:a.f}))+"";b+=""}return F(b)};if(window.IS_GOOGLE_AFS_IFRAME_){var jg=function(a,b,c){this.vi=a;this.I=b;this.D=c||ig};jg.prototype.j=function(){return this.D({be:this.vi,f:this.I})};var kg=function(a,b){return a.cos&&0d&&(c=c.substring(0,d-3)+"...");a.nodeValue=c;return!1}c=a.textContent||a.innerText;if(!c||c.length<=(b?0:4))return a.parentNode.removeChild(a),!0;for(c=lg(a.lastChild,b);c;)c=lg(a.lastChild,c);return!1},mg=function(a,b){if(!(0>=b)){for(var c=a.innerHTML.length;0b;c--)for(var d=a,e=lg(d.lastChild,!1);e;)e=lg(d.lastChild, +e);a.offsetHeight>b&&(a.innerHTML="")}},ng=function(a,b){var c=a.style.whiteSpace,d=a.style.wordWrap;a.style.whiteSpace="nowrap";a.style.wordWrap="normal";var e=a.offsetHeight;a.style.whiteSpace=c;a.style.wordWrap=d;mg(a,e*b+b)},og=function(a,b,c,d,e){var f=a.offsetHeight;if(!(f<=b)){var g=be(a);a=be(g);g.style.overflow="hidden";g.style.position="relative";var h=document.createElement("div");try{h.style.backgroundImage="linear-gradient(to bottom, rgba(255,255,255,0), #ffffff)"}catch(L){}h.style.height= +"30px";h.style.position="absolute";h.style.bottom=0;h.style.width="100%";h.style.pointerEvents="none";g.appendChild(h);var l=document.createElement("div");l.innerHTML=c;l.className="expander";l.style.textAlign="center";l.style.color=e;l.style.cursor="pointer";l.style.fontSize="11px";a.appendChild(l);var r=b-l.offsetHeight;g.style.height=r+"px";var u=f-r,y=document.getElementById("adBlock"),C=function(a){var b=y?y.offsetHeight:null;g.style.height=r+a*u+"px";.8<=a&&(l.innerHTML=d,h.style.background= +"");y&&b&&y.offsetHeight>b&&(y&&.2>=a&&(y.style.paddingBottom="4px"),y&&.98<=a?y.style.paddingBottom="1px":y&&.97<=a?y.style.paddingBottom="2px":y&&.96<=a&&(y.style.paddingBottom="3px"));y&&1==a&&(y.style.paddingBottom="");if(window.onresize)window.onresize()},H=function(a){g.style.height=f-a*u+"px";if(.2>=a)try{h.style.backgroundImage="linear-gradient(to bottom, rgba(255,255,255,0), #ffffff)"}catch(b){}.8<=a&&(l.innerHTML=c);if(window.onresize)window.onresize()},J=new ke(400);U(l,"click",function(){J.$a|| +l.innerHTML!=c?J.$a||(J.Gb=H,le(J)):(J.Gb=C,le(J))})}};if(window.IS_GOOGLE_AFS_IFRAME_){var pg=function(a,b,c){ng(T(a.document,b),2);U(a,"resize",function(){var d=T(a.document,b);d.innerHTML=c;ng(d,2)})},qg=function(a,b,c,d,e,f,g,h,l,r,u,y,C,H){this.F=R();this.P=a;this.T=b;this.ob=R();this.R=c;this.zc=d;this.vb=e;this.oa=f;this.vc=g;this.Dc=h;this.Cc=l;this.Ac=r;this.Pa=u;this.zb=y;this.I=C;this.fa=H||Af;this.Fb=R();this.Ca=R()};qg.prototype.j=function(){var a=Be({elements:[this.oa.j(),this.R.j()]}),b=Be({elements:[this.P.j(),this.vb.j()]}),c=this.zc? +a:this.T.j(),d=this.zc?this.T.j():a,a=this.fa({Ka:b,La:c,Ad:d,Eb:this.F,oc:this.ob,$:this.vc,V:this.Dc,sa:this.Cc,ra:this.Ac,J:this.Pa,O:this.zb,Lc:!1,f:this.I}),b=this.fa({Ka:b,La:c,Ad:d,Eb:this.Fb,oc:this.Ca,J:this.Pa,O:this.zb,Lc:!0,f:this.I});return Be({elements:[a,b]})};qg.prototype.M=function(a){var b=T(a.document,this.ob).innerHTML;pg(a,this.ob,b);this.Ca&&(b=T(a.document,this.Ca).innerHTML,pg(a,this.Ca,b));this.Fb&&U(a,"resize",wf(a,this.F,this.Fb))};qg.prototype.G=function(a){return this.P.G(a).concat(this.R.G(a))}; +var rg=function(a,b,c,d,e,f,g,h,l,r,u,y,C){this.F=R();this.P=a;this.T=b;this.ob=R();this.R=c;this.vb=d;this.oa=e;this.vc=f;this.Dc=g;this.Cc=h;this.Ac=l;this.Pa=r;this.zb=u;this.I=y;this.fa=C||Bf;this.Fb=R();this.Ca=R()};rg.prototype.j=function(){var a=Be({elements:[this.P.j(),this.vb.j()]}),b=Be({elements:[this.oa.j()," ",this.R.j()," ",this.T.j()]}),c=this.fa({Ka:a,La:b,Eb:this.F,oc:this.ob,$:this.vc,V:this.Dc,sa:this.Cc,ra:this.Ac,J:this.Pa,O:this.zb,Lc:!1,f:this.I}),a=this.fa({Ka:a,La:b,Eb:this.Fb, +oc:this.Ca,J:this.Pa,O:this.zb,Lc:!0,f:this.I});return Be({elements:[c,a]})};rg.prototype.M=function(a){var b=T(a.document,this.ob).innerHTML;pg(a,this.ob,b);this.Ca&&(b=T(a.document,this.Ca).innerHTML,pg(a,this.Ca,b));this.Fb&&U(a,"resize",wf(a,this.F,this.Fb))};rg.prototype.G=function(a){return this.P.G(a).concat(this.R.G(a))};var sg=function(a,b,c,d,e,f,g,h,l,r,u){this.P=a;this.T=b;this.R=c;this.oa=d;this.vc=e;this.Dc=f;this.Cc=g;this.Ac=h;this.Pa=l;this.zb=r;this.fa=u||Cf};sg.prototype.j=function(){var a= +Be({elements:[this.oa.j()," ",this.P.j()," "]}),b=Be({elements:[" ",this.T.j()," ",this.R.j()]});return this.fa({nj:a,oj:b,$:this.vc,V:this.Dc,sa:this.Cc,ra:this.Ac,J:this.Pa,O:this.zb})};sg.prototype.G=function(a){return this.P.G(a).concat(this.R.G(a))}};if(window.IS_GOOGLE_AFS_IFRAME_){var yg=function(a,b,c,d,e){this.F=R();this.gc=a;this.caps_=b;this.o=c;this.D=e||tg;d=[];c.Y&&1!=c.eb&&(e=df(a,c),e=new Ee([e,Gf(a)]),d.push(new af(e,a,c)));e=c.Y&&1!=c.eb?S:df(a,c);var f=c.Y&&1!=c.eb?S:Gf(a),g=jf(a,c),h=gf(a,c);if(a.ctd){var l=a.ctd.iu;if(l)var r=a.ctd.ih>a.ctd.iw?"height":"width",u=a.u,y=a.ctd.ir;else y=u=r=void 0;var C=a.ctd.r,H=a.ctd.nr;switch(c.eb){case 1:e=new sg(e,h,g,c.yb,l,r,u,y,C,H);break;case 2:e=new rg(e,h,g,f,c.yb,l,r,u,y,C,H,c.f);break; +default:e=new qg(e,h,g,c.me,f,c.yb,l,r,u,y,C,H,c.f)}}else switch(c.eb){case 1:e=new ug(e,h,g,c.yb);break;case 2:e=new vg(e,h,g,f,c.yb);break;default:e=new wg(e,h,g,a.pn?new If(a.pn,c.f):S,c.me,f,c.yb)}e=new af(e,a,c);b=xg(a,b,c);c.Y?(b=new Ee([e].concat(b)),d.push(uf(b,a,c))):(d.push(uf(e,a,c)),d=d.concat(b));this.$c=new Ee(d);this.Wf=R()};yg.prototype.j=function(){var a={uid:this.F,B:this.gc,A:this.o.A,fi:this.$c.j(),Jb:this.o.za||this.o.Jb,Vf:this.Wf,kk:null,jh:null};return this.D(a)};yg.prototype.M= +function(a,b){var c=this.$c.G(a.document),d=document.getElementById(this.Wf);d&&c.push(new Ze(d,"&nb=18"));for(d=T(a.document,this.F);null!=d&&!Wd(d,"a_");)d=d.parentElement;d&&$e(c,d,T(a.document,"adBlock"),b);this.$c.M&&this.$c.M(a,b)};var wg=function(a,b,c,d,e,f,g,h){this.P=a;this.T=b;this.R=c;this.Ic=d;this.zc=e;this.vb=f;this.oa=g;this.fa=h||ve};wg.prototype.j=function(){var a=Be({elements:[this.oa.j(),this.R.j(),this.Ic.j()]});return this.fa({Ka:Be({elements:[this.P.j(),this.vb.j()]}),La:this.zc? +a:this.T.j(),Ad:this.zc?this.T.j():a})};wg.prototype.G=function(a){return this.P.G(a).concat(this.R.G(a).concat(this.T.G(a)))};var vg=function(a,b,c,d,e,f){this.P=a;this.T=b;this.R=c;this.vb=d;this.oa=e;this.fa=f||we};vg.prototype.j=function(){var a=Be({elements:[this.P.j(),this.vb.j()]}),b=Be({elements:[this.oa.j(),this.R.j(),this.T.j()]});return this.fa({Ka:a,La:b})};vg.prototype.G=function(a){return this.P.G(a).concat(this.R.G(a).concat(this.T.G(a)))};var ug=function(a,b,c,d){this.P=a;this.T=b; +this.R=c;this.oa=d};ug.prototype.j=function(){return Be({elements:[this.oa.j(),this.P.j(),this.T.j(),F(""),this.R.j()]})};ug.prototype.G=function(a){return this.P.G(a).concat(this.R.G(a).concat(this.T.G(a)))}};var zg=function(a,b,c,d,e){this.gg=a;this.tg=b;this.hh=c;this.Oj=d;this.Nj=e||""};zg.prototype.$j=function(a){var b=new $a("https:"+Ka()+"/afs/gen_204");n(b,"client",this.gg);n(b,"zx",this.tg());n(b,"aqid",this.Nj);n(b,"action",a);this.hh(ab(b))};var Ag={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400", +darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc", +ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a", +lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1", +moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57", +seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};var Fg=function(a){var b={};a=String(a);var c="#"==a.charAt(0)?a:"#"+a;if(Bg.test(c))return b.ud=Cg(c),b.type="hex",b;a:{var d=a.match(Dg);if(d){var c=Number(d[1]),e=Number(d[2]),d=Number(d[3]);if(0<=c&&255>=c&&0<=e&&255>=e&&0<=d&&255>=d){c=[c,e,d];break a}}c=[]}if(c.length)return b.ud=Eg(c[0],c[1],c[2]),b.type="rgb",b;if(Ag&&(c=Ag[a.toLowerCase()]))return b.ud=c,b.type="named",b;throw Error(a+" is not a valid color string");},Gg=/#(.)(.)(.)/,Cg=function(a){if(!Bg.test(a))throw Error("'"+a+"' is not a valid hex color"); +4==a.length&&(a=a.replace(Gg,"#$1$1$2$2$3$3"));return a.toLowerCase()},Eg=function(a,b,c){a=Number(a);b=Number(b);c=Number(c);if(isNaN(a)||0>a||255b||255c||255'+Q(a[d])+"";return b};var Ng=function(a){return F(a.B.adIconUrl&&"ad-left"==a.B.adIconLocation&&a.B.img?(a.kc?'':"")+''+(a.kc?"":""):"")},Og=function(a){return F(a.B.adIconUrl&&"ad-left"==a.B.adIconLocation&&!a.B.img?'':"")};var Qg=function(a){var b=F,c='
',d;if(a.B.adIconUrl&&"ad-left"==a.B.adIconLocation&&a.B.img&&a.B.adIconWidth){d=I(""+K(Ng({B:a.B,kc:a.Jb,A:a.A,Kg:a.Bk})));var e=I(""+Pg(a)),f=a.B.adIconSpacingAfter?a.B.adIconSpacingAfter:12,g=a.f?"right":"left";d=""+('
'+G(d)+''+G(e)+"
");d=F(d);d=G(d)}else d=Pg(a);c=c+d+"
";d=a.expansion;d=F(d&&""!=d?'
'+G(d)+"
":"");return b(c+d+(a.ii?F('
'+(a.Fh?'': +'
')+'
'+(a.Fh?'': +'
')+"
"):"")+"
")},Pg=function(a){return F(G(a.li)+G(a.tk)+(a.Fg&&a.V?K(yf({content:a.eg,f:a.f,$:a.Fg,V:a.V,sa:a.sa,ra:a.ra,Z:45,ga:12,rb:a.f})):'
'+G(a.eg)+"
"))};if(window.IS_GOOGLE_AFS_IFRAME_){var Rg=function(a,b,c,d){this.gc=a;this.F=R();this.lj=R();var e=df(a,c),e=new Ee([e,Gf(a)]);this.Ah=new af(e,a,c);var f=jf(a,c),g=Zf(a,c),e=gf(a,c),f=new Ee([f,g],Ce),e=c.me?new Ee([f,e]):new Ee([e,f]),e=new Ee([new af(e,a,c),kg(a,c)]);this.fg=uf(e,a,c);this.qg=new Ee(xg(a,b,c));this.gj=!c.xg;c.xg=!0;this.o=c;this.Wi=a.ctc||a.ctd;this.Mg="collapse"==c.ac;a.ctd&&(this.Di=a.ctd.iu,this.Fi=a.ctd.ih>a.ctd.iw?"height":"width",this.Ei=a.u,this.fj=a.ctd.ir);this.D=d||Qg}; +Rg.prototype.j=function(){var a={tk:this.Ah.j(),li:this.o.yb.j(),eg:this.fg.j(),expansion:this.qg.j(),Eb:this.F,f:this.o.f,Fg:this.Di,V:this.Fi,sa:this.Ei,ra:this.fj,B:this.gc,Jb:this.o.za||this.o.Jb,A:this.o.A,Vf:this.lj,ii:this.Mg,Fh:Ne()};return this.D(a)};Rg.prototype.M=function(a,b){this.Ah.M(a,b);this.fg.M(a,b);this.qg.M(a,b);var c=T(a.document,this.F),d=c.parentNode;this.Wi||Yd(c,"n_");var e=Zd(c,"a","e_");0'+(a.gd?'':"")+G(a.$d)+(a.gd?"":"")+"":"")},Vg=function(a){return""+(a.Bc?''+Q(a.Bc)+"":"")};var tg=function(a){var b=(a.jh?"":Og(a))+'
'+(a.jh?"":Ng({B:a.B,kc:a.Jb,A:a.A,Kg:a.Vf}))+'
',c;c=a.kk?F('"):"";return b+c+Q(a.fi)+"
"+F(a.B.adIconUrl&&"ad-left"==a.B.adIconLocation&&!a.B.img?'
': +"")};var Wg=function(a){return F(a.text?'
'+G(a.text)+"
":"")};var Xg=function(a){var b="";if(a.Kd&&0',c=a.Kd,d=c.length,e=0;e'+K(pe(f))+" - "+(f.rh?'"+K(pe({text:f.source,f:f.f}))+"":K(pe({text:f.source,f:f.f})))+"":""),b=b+f;b+=""}else a.tb&&(b+=K(Wg({text:a.tb})));return F(b)};if(window.IS_GOOGLE_AFS_IFRAME_){var Yg=function(a,b,c,d){this.F=R();this.Tj=a;this.Ce=b;this.I=c;this.D=d||Xg};Yg.prototype.j=function(){return this.D({uid:this.F,Kd:this.Tj,tb:this.Ce,f:this.I})};var Zg=function(a,b){var c=a.gt&&"ar"==a.gt.r&&a.gt.t?a.gt.t:null;return a.ar&&0':"");a=a.Gd;for(var c=a.length,d=0;d'+(0!=d?"· ":"")+''+G(a[d].t)+" ";b+=""}else a.tb&&(b+=K(Wg({text:a.tb})));return F(b)};if(window.IS_GOOGLE_AFS_IFRAME_)var xg=function(a,b,c){return b.isHighendMobile?c.ac?[Nf(a,c),hg(a,c)]:b.reviewUnderSellerRating?[kg(a,c),hg(a,c),Zf(a,c),Zg(a,c),Uf(a,c),Nf(a,c),Qf(a,c),vf(a,c)]:[kg(a,c),Zg(a,c),hg(a,c),Zf(a,c),Uf(a,c),Nf(a,c),Qf(a,c),vf(a,c)]:b.reviewUnderSellerRating?[kg(a,c),Uf(a,c),Nf(a,c),hg(a,c),Zf(a,c),Zg(a,c),Qf(a,c)]:[kg(a,c),Zg(a,c),Uf(a,c),Nf(a,c),hg(a,c),Zf(a,c),Qf(a,c)]},ch=function(a,b,c,d,e){var f=Rb(d),g=Sb(d),h=f("type")||"ads",l=a.linkColorSchemeVisUrlLinkColor|| +"#008000",r=a.linkColorSchemeTitleLinkColor||"#0000CC";a.isHighendMobile&&a.mobileUiFormat?(l="#006621",r="#1a0dab"):$g(d,a)&&(r=l="#4272db");var l=f("colorDomainLink",l),r=f("colorTitleLink",r),u=e.adBadgeColor||l,y="0.85em",C=f("fontSizeDomainLink");C&&(y=.85*C+"px");var H;H=(H=d.width)&&"auto"!=H?H:"100%";var J={Qb:!1,Ud:null,ae:null};if(d.verticalSpacing){var L=d.verticalSpacing/2;J.Qb=!0;J.Ud=Math.floor(L);J.ae=Math.ceil(L)}var L=(L=f("colorAdSeparator"))?L:a.isHighendMobile||a.isTablet?"#E6E6E6": +null,ua=f("colorAdBackground"),ka=f("colorAdBorder"),la=f("colorText"),qa=f("colorBackground"),eb=f("colorBorder"),sb=f("colorAttribution"),fb=f("colorPlusOnes"),qk=f("colorKeyword"),rk=f("colorLocation"),sk=f("colorAnnotation"),Qa;Qa=[[0,0,0],[255,255,255]];if(l){var Sc;Sc=Cg(l);Qa=Kg([parseInt(Sc.substr(1,2),16),parseInt(Sc.substr(3,2),16),parseInt(Sc.substr(5,2),16)],Qa);Qa=Eg(Qa[0],Qa[1],Qa[2])}else Qa=null;a={C:a,ti:H,Ta:J,fc:L,Va:ua,S:ka,da:la,mb:r,Mb:l,Lb:qa,Aa:eb,Kb:sb,hd:fb,hg:qk,Wa:rk,N:sk, +yi:u,zi:Qa,fontFamily:f("fontFamily"),qe:f("fontFamilyAttribution"),sb:f("fontSizeTitle"),wa:f("fontSizeDescription"),rc:C,Pb:f("fontSizeAttribution"),qd:f("fontSizePlusOnes"),od:f("fontSizeLocation"),K:f("fontSizeAnnotation"),Ni:y,mk:f("titleBold"),sk:e.titleInlineBlock,Uj:f("rolloverLinkBold"),fh:f("rolloverLinkColor"),eh:f("rolloverLinkBackgroundColor"),Vj:f("rolloverLinkUnderline"),dh:f("rolloverAdBackgroundColor"),Pg:f("noTitleUnderline"),zh:ah(a),Xc:g("adBorderSelections","left"),cc:g("adBorderSelections", +"right"),Yc:g("adBorderSelections","top"),Wc:g("adBorderSelections","bottom"),pi:g("borderSelections","left"),ag:g("borderSelections","right"),ri:g("borderSelections","top"),oi:g("borderSelections","bottom"),za:Tb(d,a),Tb:f("lineHeightTitle"),aa:f("lineHeightDescription"),ab:f("lineHeightDomainLink"),Zf:f("attributionSpacingBelow"),hj:$g(d,a),De:e.hasButtonRight};f("adIconUrl")?(a.Ib=f("adIconWidth"),a.kb=f("adIconHeight"),a.Hb=f("adIconLocation"),a.dc=f("adIconSpacingAbove"),a.ec=f("adIconSpacingBefore"), +a.Uf=f("adIconSpacingAfter"),a.ad=f("adIconSpacingBelow"),a.Vd=!0):f("adIconPageUrl")&&(a.Ib=f("adIconPageWidth"),a.kb=f("adIconPageHeight"),a.Hb=f("adIconPageLocation"),a.dc=f("adIconPageSpacingAbove"),a.ec=f("adIconPageSpacingBefore"),a.Uf=f("adIconPageSpacingAfter"),a.Vd=!1);"relatedsearch"==h&&(a.type="relatedsearch",a.Nb=f("columnSpacing"),a.vd=f("horizontalFlow"),a.ub=f("horizontalAlignment"));var v,h=a.C.isRtl?"right":"left";d=a.C.isRtl?"left":"right";f="";e=""),b,c)},dh=function(a,b,c,d,e,f,g,h,l){a="

"+(f?a?ze({text:a,ca:"rhHeader"})+"
":Ug({$d:c,gd:b,ca:"rhHeader"})+(e?Vg({Bc:e,ca:"rhHeader",id:"megaLabel"}):Vg({Bc:d,ca:"lhHeader",id:"adsLabel"})):a?ze({text:a,ca:"lhHeader"}):(e?Vg({Bc:e,ca:"lhHeader",id:"megaLabel"}):Vg({Bc:d,ca:"rhHeader", +id:"adsLabel"}))+Ug({$d:c,gd:b,ca:"lhHeader"}))+"

";bh(a,g,h)},bh=function(a,b,c){da(a)||(a=a.toString());ra()?b.populate(a):c.appendChild($c(Zc(),a))};if(window.IS_GOOGLE_AFS_IFRAME_)var eh=/^((https?):)?\/\/afs.googleusercontent.com\//,fh=/^\/\/afs.googleusercontent.com\//,gh=function(a,b,c,d,e,f,g){if(!d||eh.test(b))for(var h=0;ha.which:2>a.button)&&Fa(Eb(b))}))}},nh,oh,mh=!1,kh=function(a){mh=!1;a=a.touches;1==a.length&&(a=a[0],nh=a.clientX,oh=a.clientY,mh=!0)},lh=function(a){a=a.touches[0]; +if(10'+G(a.Og)+"":'
')},wh=function(a){return ud(".sb_ {padding-top: 10px; text-align: right; height: 29px; font-size: 12px; color: #666666; line-height: 29px; margin-bottom: 2px;}.tb_ {padding-right: 10px; height: 100%; display: inline-block;}.lb_ {display: inline-block; text-align: center; border-radius: 2px; background: white; border: 1px solid #f3f3f3; cursor: default; white-space: nowrap; text-decoration: none; color: #444444; font-size: 11px; font-weight: bold; -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none;}.ub_.lb_ {height: 100%; width: 34px; font-size: inherit; position: relative;}.lb_.s_ {border: 1px solid #dcdcdc; background: #f5f5f5; z-index: 10;}.lb_.s_:active {-webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.1); -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,.1); box-shadow: inset 0 1px 2px rgba(0,0,0,.1); background: #f8f8f8; color: #333;}.lb_.s_:hover {border: 1px solid #c6c6c6; z-index: 20;}.left.lb_ {border-top-right-radius: 0; border-bottom-right-radius: 0;}.right.lb_ {border-top-left-radius: 0; border-bottom-left-radius: 0; margin-left: -1px;}.vb_ {margin-top: -3px; vertical-align: middle; filter: alpha(opacity=33); opacity: .333;}.lb_.s_:hover > .vb_ {filter: alpha(opacity=90); opacity: .9;}.lb_.s_ > .vb_ {filter: alpha(opacity=55); opacity: .55;}table {font-size: "+ +P(a.fontSize)+"px; border-collapse: collapse; display: inline-table; white-space: normal; margin-right: 10px; vertical-align: top; border-top: 1px solid #ebebeb;}.qb_ {position: relative; overflow: hidden;}.rb_ {white-space: nowrap; position: relative; left: 0px;}.j_ {color: #777777;}")};if(window.IS_GOOGLE_AFS_IFRAME_){var xh=function(a,b,c,d,e){this.xa=a;this.Fj=b;this.ak=c;this.xj=d;this.nb=0;this.Hc=[];this.D=e;this.Yd=new ke(300);this.Qg=R();this.kf=R();this.Sg=R();this.hf=R();this.jf=R();this.Tg=R()};k=xh.prototype;k.j=function(){return this.D({zj:this.Qg,Yj:this.kf,Dj:this.Sg,Wj:this.hf,Xj:this.jf,Ej:this.Tg,Og:0==this.xa.length?this.xj:""})};k.ug=function(a,b){return a==b?this.ak.replace("%1$d",""+a).replace("%2$d",""+this.xa.length):this.Fj.replace("%1$d",""+a).replace("%2$d", +""+b).replace("%3$d",""+this.xa.length)};k.Cj=function(a,b){if(0!=this.xa.length){var c=T(a,this.Qg);b-=c.offsetHeight;var d=T(a,this.kf),c=c.offsetWidth,e=a.createElement("table");e.style.width=c+"px";d.appendChild(e);for(var f=0,g=0;gb){var h=e.removeChild(e.lastChild);0==f&&(b=e.offsetHeight);this.Hc.push(this.ug(f+1,g));e=a.createElement("table");e.style.width=c+"px";d.appendChild(e);e.appendChild(h);f=g}this.Hc.push(this.ug(f+ +1,this.xa.length));this.Eh(a)}};k.cg=function(){return 0
';c='
'+G(a.title)+"
"+(a.ha?'
'+G(a.ha)+"
":"");c=I(c);b+=(a.xb?K(mf({Da:I('
'),Ea:I(""+G(c)),Z:69,ga:10})):G(c))+'
'+G(a.sh)+"
"+G(a.ah)+"
";return F(b)},zh= +function(a){for(var b='
';c='
'+G(a.title)+'
'+G(a.ha)+'
'+G(a.sh)+"
"+G(a.ah)+"
";c=I(c);b+=(a.xb?K(mf({Da:I('
'+ +(a.description?'
'+G(a.description)+"
":"")),Ea:I(""+G(c)),Z:224,ga:20})):G(c))+"
";return F(b)};var Bh=function(a){var b;return F(''+Ah(a)+""+K(null==(b=a.ma)?"":b)+''+G(a.Wb)+"")},Ah=function(a){return F('
'+K(Sd({href:a.Ja,content:a.Ed,A:a.Ma,qa:xd("hb_"),Za:a.Dd}))+"
 
")},Ch=function(a){var b;return F(''+Ah(a)+""+K(null==(b=a.ma)?"":b)+"
"+G(a.Wb)+'
'+ +G(a.ua)+'
'+K(Sd({href:a.Ja,content:"Buy",A:a.Ma,qa:xd("s_ kb_ lb_")}))+"")},Dh=function(a){return ud(".i_ {border-bottom: 1px solid #ebebeb; vertical-align: middle;}.i_ td {padding: 7px 4px 7px 0;}.gb_ {width: 40%;}.i_ .fb_ {text-align: right; padding: 7px 0; font-weight: bold;}.hb_ {text-decoration: none; color: "+P(a.linkColor)+"; display: block; overflow: hidden; text-overflow: ellipsis;}.hb_:hover {text-decoration: underline;}")},Eh=function(a){var b;a=a|| +{};return F(''+Ah(a)+'
'+G(a.Wb)+'
'+K(null==(b=a.ua)?"":b)+'
'+K(null==(b=a.ma)?"":b)+"
")},Fh=function(a){return ud(".i_ {border-bottom: 1px solid #ebebeb; vertical-align: middle;}.i_ td {height: 50px; padding-right: 4px;}.gb_ {width: 40%;}.i_ .jb_ {text-align: right; padding-right: 0;}.kb_.lb_ {padding: 0 8px; min-width: 54px; height: 27px; line-height: 27px;}.hb_ {text-decoration: none; color: "+ +P(a.linkColor)+"; display: block; overflow: hidden; text-overflow: ellipsis;}.hb_:hover {text-decoration: underline;}.ib_ {color: #7d7d7d; font-size: 80%;}")};if(window.IS_GOOGLE_AFS_IFRAME_){var Gh=function(a,b){this.bg=a;this.maxHeight=b},Hh=new Gh(10,350),Ih=new Gh(20,700),Jh=function(a,b,c,d,e,f,g,h,l,r,u,y,C){this.Ee=a;this.P=b;this.T=c;this.pe=d;this.pj=e;this.dk=f;this.wj=g+" \u25bc";this.mj=h+" \u25b2";this.re=l;this.We=r;this.gk=y;this.D=C;this.Ab=u;this.Ab.height=Math.min(this.Ab.height,this.re.maxHeight);this.Ab.width=Math.min(this.Ab.width,1E3);this.yh=R();this.kg=R();this.Sf=R();this.Qf=R();this.yg=R()};Jh.prototype.j=function(){return this.D({xb:this.Ee, +title:this.P,description:this.T,ha:this.pe,sh:this.dk,ah:this.We.j(),si:this.Ab.width,uh:this.gk,Oc:this.yh,Hi:this.kg,Rf:this.Sf,ei:this.Qf,Xi:this.yg})};Jh.prototype.Vi=function(a){return T(a,"adBlock").offsetWidth};Jh.prototype.Mj=function(a){this.uk(a);var b=T(a,this.Sf).offsetHeight,b=b+2*this.re.bg;this.We.Cj(a,this.Ab.height-b);this.We.Zd(a)};Jh.prototype.uk=function(a){var b=T(a,this.yh);ng(b,3);if(b=a.getElementById(this.kg)){var c=Je(T(a,this.Qf)),c=c+2*this.re.bg;Je(T(a,this.yg));og(b, +this.Ab.height-c-50,this.wj,this.mj,this.pj)}};var Kh=function(a,b,c,d){var e,f,g,h=[],l=null,r=a.lc||"#0651cf";switch(a.id){case 1:case "SMALL_FORMAT":e=Bh;f=vh;g=yh;h.push(Dh({linkColor:r}));h.push(ud(wh({fontSize:12})));h.push(ud("#adBlock {font-family: arial; font-size: 0; width: 300px; background: white;}.h_ {font-size: 18px; font-weight: bold; color: #222222; word-wrap: break-word;}.xa_ {padding: 9px; border: 1px solid #e0e0e0;}.ab_ {max-width: 67px; max-height: 67px; vertical-align: middle;}.za_ {width: 67px; height: 67px; border: 1px solid #eeeeee; text-align: center; line-height: 67px;}.bb_ {padding: 10px 0; font-size: 12px; font-weight: bold; color: #222222;}.cb_ {color: #787878; font-size: 13px;}")); +d&&(e=Eh,h.push(ud(".i_ .nb_ {padding: 7px 0; width: 46px;}.i_ .fb_ {text-align: left; padding-right: 4px;}.ib_ {color: #7d7d7d; font-size: 90%; font-weight: normal;}")));l=Hh;break;case 3:case "WIDE_FORMAT":e=Ch;f=vh;g=zh;h.push(Fh({linkColor:r}));h.push(ud(wh({fontSize:14})));h.push(ud("#adBlock {font-family: arial; font-size: 0; background: white;}.xa_ {padding: 19px; border: 1px solid #e0e0e0;}.ab_ {max-width: 222px; max-height: 222px; vertical-align: middle;}.za_ {width: 222px; height: 222px; border: 1px solid #eeeeee; text-align: center; line-height: 222px; margin-bottom: 20px;}.eb_ {font-size: 12px; line-height: 18px; color: #222222; word-wrap: break-word;}.db_ {padding-bottom: 20px;}.h_ {font-size: 18px; font-weight: bold; color: #222222; word-wrap: break-word;}.cb_ {color: #7d7d7d; font-size: 13px;}.bb_ {font-size: 14px; font-weight: bold; color: #222222; padding-bottom: 8px;}")); +l=Ih;break;default:return Na.log({message:"Jackpot block json failed to provide a known format."},"crjc"),null}var u=[];a.offers&&(u=ic(a.offers,function(a){return new uh(a.u,a.m,a.pr,a.s,d&&a.ppu?a.ppu:"",c,e)}));f=new xh(u,b.pt,b.sipt,b.nl,f);return new Jh(a.pd.i,a.pd.t,a.pd.d,d&&a.pd.er?a.pd.er:"",r,b.sl,b.m,b.l,l,f,new Wc(a.mw,a.mh),h,g)}};var Lh=function(a){var b='
',c='
'+K(Sd({href:a.Ja,content:a.title,A:a.Ma,qa:xd("oc_"),Za:a.Oc}))+'
',c=c+('
'+G(a.Wb)+"
"+(a.Id?(a.ma?'
'+G(a.ma)+"
": +"")+(a.ha?'
'+G(a.ha)+"
":"")+(a.ua?'
'+G(a.ua)+"
":""):"")+'
'+K(Sd({href:a.Ja,content:a.Ed,A:a.Ma,qa:xd("sc_"),Za:a.Dd}))+"
"),b=b+K(mf({Da:I("
"+K(Sd({href:a.Ja,content:I('
'+G(a.$f)+"
"),A:a.Ma,qa:xd("lc_"),Za:a.Dg}))+"
"),Ea:I(c),Z:a.Fe,ga:a.xc}));return F(b+"
")},Mh=function(a){return ud(".hc_ {background: white; margin-right: "+ +P(a.yc)+"px; margin-bottom: "+P(a.yc)+"px;"+(a.og?P(Rd({value:yd("1px 2px 1px rgba(0, 0, 0, 0.1)")}))+"border: 1px solid #E0E0E0; box-sizing: border-box; border-radius: 3px;":P(Rd({value:yd("0 2px 1px rgba(0, 0, 0, 0.1), 0 0 1px rgba(0, 0, 0, 0.1)")}))+"border-radius: 2px;")+"width: "+P(a.hi)+"px; height: "+P(a.gi)+"px;"+P(Qd())+"}.ic_ {"+(a.og?"padding: "+P(a.xc-1)+"px;":"padding: "+P(a.xc)+"px;")+"position: relative;}.lc_ {text-decoration: none;}.jc_ {width: "+P(a.Fe)+"px; height: "+P(a.bj)+"px; background-repeat: no-repeat; background-position: center; background-size: contain; cursor: pointer; position: relative;}.mc_ {position: relative; height: "+ +P(a.Bi)+"px;}.oc_ {color: "+P(a.nk)+"; font-size: "+P(a.qk)+"px; text-decoration: none;}.nc_ {width: "+P(a.jd)+"px; word-wrap: break-word;}.mb_ {font-size: "+P(a.Ij)+"px; font-weight: bold; color: "+P(a.Xg)+";}.pc_ {color: "+P(a.Xg)+"; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; width: "+P(a.jd)+"px;}.sc_ {color: "+P(a.Lg)+"; text-decoration: none;}.rc_ {font-size: "+P(a.tj)+"px; padding-bottom: 2px; color: "+P(a.Lg)+"; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; width: "+ +P(a.jd)+"px;}.bb_ {font-size: 13px;"+P(Qd())+"text-decoration: none; background-color: #555555; position: absolute; bottom: 1px; left: 1px; padding: 0 3px; color: white; border-radius: 2px;}.qc_ {font-size: 12px; color: #777777; padding-bottom: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; width: "+P(a.jd)+"px;}")};var Nh=function(a){var b='
'+K(Sd({href:a.Ja,content:I('
'+G(a.$f)+"
"),A:a.Ma,qa:xd("lc_"),Za:a.Dg}))+'
'+K(Sd({href:a.Ja,content:a.title,A:a.Ma,qa:xd("oc_"),Za:a.Oc}))+'
',b=b+('
'+G(a.Wb)+"
"+(a.Id?(a.ma?'
'+G(a.ma)+"
":"")+(a.ha?'
'+G(a.ha)+"
":"")+(a.ua?'
'+G(a.ua)+"
":""):"")+'
'+K(Sd({href:a.Ja,content:a.Ed,A:a.Ma,qa:xd("sc_"),Za:a.Dd}))+"
");return F(b)},Oh=function(a){return ud(P(Mh(a))+".jc_ {margin-bottom: "+ +P(a.xc)+"px;}")};if(window.IS_GOOGLE_AFS_IFRAME_){var Ph=function(a,b,c,d,e,f,g,h,l,r,u,y,C){this.mi=c;this.Me=d;this.P=a.t;this.Qe=a.m;this.cf=a.pr;this.Ee=a.i;this.Nd=a.s;this.Qd=a.ppu;this.pe=a.er;this.Pj=u;this.Yi=b.h;this.yk=b.w;this.Ie=e;this.Hg=f;this.cj=b.ih;this.Eg=b.iw;this.jg=g;this.Ci=h;this.rk=b.ts;this.uj=b.ms;this.Jj=b.ps;this.pk=b.tc;this.sj=b.mc;this.Hj=b.pc;this.Xe=l;this.Ki=r;this.fk=y;this.D=C;this.Ag=R();this.Cg=R();this.vf=R();this.Cd=R();this.Wg=R()};k=Ph.prototype;k.j=function(){return this.D({Ug:this.Ag, +$f:this.mi,Ja:this.Me,xb:this.Ee,Dg:this.Cg,title:this.P,Oc:this.vf,Wb:this.cf,Ed:this.Qe,Dd:this.Cd,Vg:this.Wg,Fe:this.Eg,xc:this.Hg,Yg:this.Ai(),Ma:this.Xe,ma:this.Nd,ua:this.Qd,ha:this.pe,Id:this.Pj})};k.Ui=function(){return this.fk({hi:this.yk,gi:this.Yi,yc:this.Ie,xc:this.Hg,bj:this.cj,Fe:this.Eg,Bi:this.jg,jd:this.Ci,qk:this.rk,tj:this.uj,Ij:this.Jj,nk:this.pk,Lg:this.sj,Xg:this.Hj,og:this.Ki})};k.Ai=function(){return hc([this.Qd,this.Nd],ca).join("\n")};k.Bh=function(a){var b=a.document.getElementById(this.Wg); +b&&mg(a.document.getElementById(this.vf),this.jg-(b.offsetHeight+4));this.ic&&this.ic.Bh(a)};k.Xf=function(a){this.ic&&this.ic.Xf(a)};k.vg=function(a){return T(a,this.Ag)};k.wg=function(a){var b=this.ic?this.ic.wg(a):[];return[new Ze(T(a,this.vf),"&nb=0"),new Ze(T(a,this.Cd),"&nb=1"),new Ze(T(a,this.Cg),"&nb=9")].concat(b)};var Qh=function(a,b,c,d,e,f,g){var h=db(a.u),l=new Wc(b.w,b.h),r=new Wc(b.iw,b.ih),u=Math.floor((l.height-r.height)/2);return new Ph(a,b,c,h,d,u,r.height,l.width-(3*u+r.width), +e,f,g,Mh,Lh)},Rh=function(a,b,c,d,e,f,g){var h=db(a.u),l=new Wc(b.w,b.h),r=new Wc(b.iw,b.ih),u=Math.floor((l.width-r.width)/2);return new Ph(a,b,c,h,d,u,l.height-(3*u+r.height),r.width,e,f,g,Oh,Nh)}};var Sh=function(a){var b='
';a=a.Sj;for(var c=a.length,d=0;d
")};if(window.IS_GOOGLE_AFS_IFRAME_){var Th=function(a,b,c,d,e,f,g){this.Vb=a;this.kh=b;this.Ie=c;this.ni=d;this.Mi=e;this.ej=f;this.D=g};Th.prototype.j=function(){for(var a=[],b=0;b
';for(var d=a.ads,e=d.length,f=0;f"}return b+"
'+(1==a.ads.length?'  ': +''+K(++c)+". ")+' '+Q(g.cleanTitle)+' opens new browser window'+ +Q(g.l1)+" "+Q(g.l2)+' '+Q(g.v)+"
"}, +Vh=function(a){for(var b='
',c=a.ads,d=c.length,e=0;e");return b+="
  -  
'+ +Q(f.l1)+" "+Q(f.l2)+'
"};var Wh=function(a){var b,c=0;b='';for(var d=a.ads,e=d.length,f=0;f"}b+="
'+K(++c)+'.  '+G(g.t)+'
'+ +G(g.l1)+" "+G(g.l2)+' '+G(g.v)+"
";return F(b)},Xh=function(a){for(var b='',c=a.ads,d=c.length,e=0;e");b+="
'+G(f.l1)+" "+G(f.l2)+'
";return F(b)},Yh=function(a){var b;b='';for(var c=a.ads,d=c.length,e=0;e"}b+="
'+ +G(f.l1)+" "+G(f.l2)+' '+G(f.v)+"
";return F(b)},Zh=function(a){for(var b='',c=a.ads,d=c.length,e=0;e");b+="
  -  
'+G(f.l1)+" "+G(f.l2)+'
";return F(b)},$h=function(a){var b,c=0;b='";return F(b)};if(window.IS_GOOGLE_AFS_IFRAME_)var ai=function(a,b){b=b||130;var c=b+Math.max(1.5*b,160),d=a.document.getElementById("wideSfbl"),e=a.document.getElementById("narrowSfbl");d&&e&&(Ie(a.document.body,!1)Ie(f,!1)){for(g=0;h=c[g];g++)h.style.display="none";for(g=0;h=d[g];g++)h.style.display="block"}else{for(g=0;h=c[g];g++)h.style.display="block";for(g=0;h=d[g];g++)h.style.display="none"}};var bi=function(a){return'"+(a.B.pn?Hf({Hd:a.B.pn,f:a.C.isRtl,Ng:!1})+"
":"")+(a.Gg?'
'+Wf({Mc:a.B.sr})+"
":"")},ci=function(a){return""+(a.C.disableSellerFirstFavicon?bi({B:a.B,C:a.C,A:a.A,Gg:a.wd}):nf({Da:'',Ea:""+ +bi({B:a.B,C:a.C,A:a.A,Gg:a.wd}),Z:18,ga:3,rb:a.C.isRtl}))+(a.wd?"":'
'+Wf({Mc:a.B.sr})+"
")},di=function(a){var b='
',c=a.B.l1r,d=a.B.l2r,e=a.C.isRtl,f="";if(d&&d.c)var g=c.rtl||d.rtl,f=f+Jf({Ia:g,f:e,text:Kf({text:c,f:g})+" "+Kf({text:d,f:g})});else f+=Kf({text:c,f:e});b=b+f+"
"+ig({be:a.B.cos, +f:a.C.isRtl})+Xg({Kd:a.B.ar,tb:a.B.gt&&"ar"==a.B.gt.r?a.B.gt.t:null,f:a.C.isRtl})+Rf({$e:a.B.plus_ones,A:a.A})+Lf({Ne:a.B.location,f:a.C.isRtl})+Of({Gd:a.B.oh,tb:a.B.gt&&"oh"==a.B.gt.r?a.B.gt.t:null,Hh:a.C.offerHighlightWithIcon});a=a.B.sls&&0g?e?(e.style.display="none",c?c.style.display="":e.parentNode.style.display="none"):(d.style.display="none",c||(d.parentNode.style.display="none")):e?(e.style.display="",e.parentNode.style.display="",c&&(c.style.display="none")):(d.style.display="",d.parentNode.style.display="")}},Fi=m(Fi,"aH"),Oi=function(a){var b="master-"+Ai(a);a=Di(b,a);b="";if(a)try{b= +a.document.documentElement.lang}catch(c){}return b},Oi=m(Oi,"gMIHL"),Pi=function(a,b){try{if(a&&a.document.getElementsByTagName("html")){var c;(c=a.document.getElementsByTagName("html")[0])&&!c.lang&&(c.lang=b)}}catch(d){}},Pi=m(Pi,"sSIHL"),Ri=function(a,b,c){a=a.document.getElementsByTagName("table");for(var d=a.length,e=0;eMe(a).height},Si=m(Si,"iW"),Ti=function(a){for(;0e.length?e.push(h):"sl-right"==h.className&&3>f.length&&f.push(h);for(d=[];0e){c=Le(d)-15;125>c&&(c=125);for(var f=d.getElementsByTagName("div"),g=0,h=0,l;l=f[h];h++)Me(l).width<=c&&3>g?g++:l.style.display="none";g>e?(Wi(d,"visibility","visible"),a.style.display="none"):d.style.display="none"}else d.style.display="none"}},Vi=m(Vi,"uS"),Ui=function(a,b){var c=b.shift();if(c){for(;0< +b.length;)Ti(b.pop());c[1]&&(Si(c)||(Yd(c[0].firstChild,"l"),Yd(c[1].firstChild,"r"),c[0].innerHTML+=" - "+c[1].innerHTML),c[1].parentNode.removeChild(c[1]),c.pop());a.className="sl-table-ol";c[0].className="sl-left-ol";Si(c[0])&&Ti(c)}},Ui=m(Ui,"hSLS"),Xi=function(a,b){return Le(a)b||"number"==typeof c&&16>c)&&(a=a.document.getElementById("adBlock"))&&""!=a.innerHTML?!0:!1},lj=m(lj,"iCSI"),Ji=function(a,b){for(var c=!1,d=[],e=0;erb)for(a=0;a=f)a=g;else{a=[];for(var h= +0,l=0;l';e=g.length;for(b=0;b'+K(pe({text:a.t,f:f})),d+='
';c=F(d+"")}else{d=""+('");e=g.length;for(b=0;bf||2<=f&&b":"")+'";c=d+"
",l=g.length%f||f,d+='
=g.length-l?" lr":"")+'">'+Og({B:a,kc:!1,qj:"_top"})+ +'
'+Ng({B:a,kc:!1,qj:"_top"})+'
"}return c},uj=m(uj,"cRSN"),gj=function(a,b,c,d,e,f,g,h,l,r,u){if(0>=a.length)return null;var y=Ub(e),C="";c=null;if(u.customAdIcons){var H="https"==window.location.protocol;null!=e.adIconUrl&&0
'+nf({Da:""+ci(vd(a,{B:g,wd:!0})),Ea:""+di(vd(a,{B:g})),Z:null==(qa=a.Zj)?130:qa,ga:10,rb:a.C.isRtl})+"
";y+='";C=y+""}else{c=[];qa=g.ac?Rg:yg;for(y=0;y