From a1b38fadb836f768af6a2cb348d1687715381b25 Mon Sep 17 00:00:00 2001 From: Joakim Erdfelt Date: Tue, 5 Jun 2018 12:47:14 -0500 Subject: [PATCH 01/48] Issue #1905 - Deprecate jetty-runner Signed-off-by: Joakim Erdfelt --- .../src/main/java/org/eclipse/jetty/runner/Runner.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/jetty-runner/src/main/java/org/eclipse/jetty/runner/Runner.java b/jetty-runner/src/main/java/org/eclipse/jetty/runner/Runner.java index 41e803cbbe7..12fe3a27ca6 100644 --- a/jetty-runner/src/main/java/org/eclipse/jetty/runner/Runner.java +++ b/jetty-runner/src/main/java/org/eclipse/jetty/runner/Runner.java @@ -63,7 +63,9 @@ import org.eclipse.jetty.xml.XmlConfiguration; * Runner *

* Combine jetty classes into a single executable jar and run webapps based on the args to it. + * @deprecated No replacement provided or available. Migrate to jetty-home (and use {@code ${jetty.base}} directory). */ +@Deprecated public class Runner { private static final Logger LOG = Log.getLogger(Runner.class); @@ -553,6 +555,10 @@ public class Runner public static void main(String[] args) { + System.err.println("WARNING: jetty-runner is deprecated."); + System.err.println(" See Jetty Documentation for startup options"); + System.err.println(" https://www.eclipse.org/jetty/documentation/"); + Runner runner = new Runner(); try From b42017b942aefec505860c854406896b7a5c6fa8 Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Sun, 8 Jul 2018 14:44:38 +0000 Subject: [PATCH 02/48] WIP Signed-off-by: Greg Wilkins --- jetty-home/src/main/resources/bin/jetty.sh | 618 ------------------ .../jetty/http2/hpack/HpackDecoder.java | 6 +- .../jetty/http2/hpack/MetaDataBuilder.java | 120 +++- .../src/main/webapp/META-INF/MANIFEST.MF | 21 - .../src/main/webapp/stylesheet.css~ | 7 - .../src/main/webapp/META-INF/MANIFEST.MF | 3 - 6 files changed, 104 insertions(+), 671 deletions(-) delete mode 100755 jetty-home/src/main/resources/bin/jetty.sh delete mode 100644 tests/test-webapps/test-proxy-webapp/src/main/webapp/META-INF/MANIFEST.MF delete mode 100644 tests/test-webapps/test-servlet-spec/test-spec-webapp/src/main/webapp/stylesheet.css~ delete mode 100644 tests/test-webapps/test-webapp-rfc2616/src/main/webapp/META-INF/MANIFEST.MF diff --git a/jetty-home/src/main/resources/bin/jetty.sh b/jetty-home/src/main/resources/bin/jetty.sh deleted file mode 100755 index b2b69a3d75c..00000000000 --- a/jetty-home/src/main/resources/bin/jetty.sh +++ /dev/null @@ -1,618 +0,0 @@ -#!/usr/bin/env bash - -# LSB Tags -### BEGIN INIT INFO -# Provides: jetty -# Required-Start: $local_fs $network -# Required-Stop: $local_fs $network -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: Jetty start script. -# Description: Start Jetty web server. -### END INIT INFO - -# Startup script for jetty under *nix systems (it works under NT/cygwin too). - -################################################## -# Set the name which is used by other variables. -# Defaults to the file name without extension. -################################################## -NAME=$(echo $(basename $0) | sed -e 's/^[SK][0-9]*//' -e 's/\.sh$//') - -# To get the service to restart correctly on reboot, uncomment below (3 lines): -# ======================== -# chkconfig: 3 99 99 -# description: Jetty 9 webserver -# processname: jetty -# ======================== - -# Configuration files -# -# /etc/default/$NAME -# If it exists, this is read at the start of script. It may perform any -# sequence of shell commands, like setting relevant environment variables. -# -# $HOME/.$NAMErc (e.g. $HOME/.jettyrc) -# If it exists, this is read at the start of script. It may perform any -# sequence of shell commands, like setting relevant environment variables. -# -# /etc/$NAME.conf -# If found, and no configurations were given on the command line, -# the file will be used as this script's configuration. -# Each line in the file may contain: -# - A comment denoted by the pound (#) sign as first non-blank character. -# - The path to a regular file, which will be passed to jetty as a -# config.xml file. -# - The path to a directory. Each *.xml file in the directory will be -# passed to jetty as a config.xml file. -# - All other lines will be passed, as-is to the start.jar -# -# The files will be checked for existence before being passed to jetty. -# -# Configuration variables -# -# JAVA -# Command to invoke Java. If not set, java (from the PATH) will be used. -# -# JAVA_OPTIONS -# Extra options to pass to the JVM -# -# JETTY_HOME -# Where Jetty is installed. If not set, the script will try go -# guess it by looking at the invocation path for the script -# The java system property "jetty.home" will be -# set to this value for use by configure.xml files, f.e.: -# -# /webapps/jetty.war -# -# JETTY_BASE -# Where your Jetty base directory is. If not set, the value from -# $JETTY_HOME will be used. -# -# JETTY_RUN -# Where the $NAME.pid file should be stored. It defaults to the -# first available of /var/run, /usr/var/run, JETTY_BASE and /tmp -# if not set. -# -# JETTY_PID -# The Jetty PID file, defaults to $JETTY_RUN/$NAME.pid -# -# JETTY_ARGS -# The default arguments to pass to jetty. -# For example -# JETTY_ARGS=jetty.http.port=8080 jetty.ssl.port=8443 -# -# JETTY_USER -# if set, then used as a username to run the server as -# -# JETTY_SHELL -# If set, then used as the shell by su when starting the server. Will have -# no effect if start-stop-daemon exists. Useful when JETTY_USER does not -# have shell access, e.g. /bin/false -# -# JETTY_START_TIMEOUT -# Time spent waiting to see if startup was successful/failed. Defaults to 60 seconds -# - -usage() -{ - echo "Usage: ${0##*/} [-d] {start|stop|run|restart|check|supervise} [ CONFIGS ... ] " - exit 1 -} - -[ $# -gt 0 ] || usage - - -################################################## -# Some utility functions -################################################## -findDirectory() -{ - local L OP=$1 - shift - for L in "$@"; do - [ "$OP" "$L" ] || continue - printf %s "$L" - break - done -} - -running() -{ - if [ -f "$1" ] - then - local PID=$(cat "$1" 2>/dev/null) || return 1 - kill -0 "$PID" 2>/dev/null - return - fi - rm -f "$1" - return 1 -} - -started() -{ - # wait for 60s to see "STARTED" in PID file, needs jetty-started.xml as argument - for ((T = 0; T < $(($3 / 4)); T++)) - do - sleep 4 - [ -z "$(grep STARTED $1 2>/dev/null)" ] || return 0 - [ -z "$(grep STOPPED $1 2>/dev/null)" ] || return 1 - [ -z "$(grep FAILED $1 2>/dev/null)" ] || return 1 - local PID=$(cat "$2" 2>/dev/null) || return 1 - kill -0 "$PID" 2>/dev/null || return 1 - echo -n ". " - done - - return 1; -} - - -readConfig() -{ - (( DEBUG )) && echo "Reading $1.." - source "$1" -} - -dumpEnv() -{ - echo "JAVA = $JAVA" - echo "JAVA_OPTIONS = ${JAVA_OPTIONS[*]}" - echo "JETTY_HOME = $JETTY_HOME" - echo "JETTY_BASE = $JETTY_BASE" - echo "START_D = $START_D" - echo "START_INI = $START_INI" - echo "JETTY_START = $JETTY_START" - echo "JETTY_CONF = $JETTY_CONF" - echo "JETTY_ARGS = ${JETTY_ARGS[*]}" - echo "JETTY_RUN = $JETTY_RUN" - echo "JETTY_PID = $JETTY_PID" - echo "JETTY_START_LOG = $JETTY_START_LOG" - echo "JETTY_STATE = $JETTY_STATE" - echo "JETTY_START_TIMEOUT = $JETTY_START_TIMEOUT" - echo "RUN_CMD = ${RUN_CMD[*]}" -} - - - -################################################## -# Get the action & configs -################################################## -CONFIGS=() -NO_START=0 -DEBUG=0 - -while [[ $1 = -* ]]; do - case $1 in - -d) DEBUG=1 ;; - esac - shift -done -ACTION=$1 -shift - -################################################## -# Read any configuration files -################################################## -ETC=/etc -if [ $UID != 0 ] -then - ETC=$HOME/etc -fi - -for CONFIG in {/etc,~/etc}/default/${NAME}{,9} $HOME/.${NAME}rc; do - if [ -f "$CONFIG" ] ; then - readConfig "$CONFIG" - fi -done - - -################################################## -# Set tmp if not already set. -################################################## -TMPDIR=${TMPDIR:-/tmp} - -################################################## -# Jetty's hallmark -################################################## -JETTY_INSTALL_TRACE_FILE="start.jar" - - -################################################## -# Try to determine JETTY_HOME if not set -################################################## -if [ -z "$JETTY_HOME" ] -then - JETTY_SH=$0 - case "$JETTY_SH" in - /*) JETTY_HOME=${JETTY_SH%/*/*} ;; - ./*/*) JETTY_HOME=${JETTY_SH%/*/*} ;; - ./*) JETTY_HOME=.. ;; - */*/*) JETTY_HOME=./${JETTY_SH%/*/*} ;; - */*) JETTY_HOME=. ;; - *) JETTY_HOME=.. ;; - esac - - if [ ! -f "$JETTY_HOME/$JETTY_INSTALL_TRACE_FILE" ] - then - JETTY_HOME= - fi -fi - - -################################################## -# No JETTY_HOME yet? We're out of luck! -################################################## -if [ -z "$JETTY_HOME" ]; then - echo "** ERROR: JETTY_HOME not set, you need to set it or install in a standard location" - exit 1 -fi - -cd "$JETTY_HOME" -JETTY_HOME=$PWD - - -################################################## -# Set JETTY_BASE -################################################## -if [ -z "$JETTY_BASE" ]; then - JETTY_BASE=$JETTY_HOME -fi - -cd "$JETTY_BASE" -JETTY_BASE=$PWD - - -##################################################### -# Check that jetty is where we think it is -##################################################### -if [ ! -r "$JETTY_HOME/$JETTY_INSTALL_TRACE_FILE" ] -then - echo "** ERROR: Oops! Jetty doesn't appear to be installed in $JETTY_HOME" - echo "** ERROR: $JETTY_HOME/$JETTY_INSTALL_TRACE_FILE is not readable!" - exit 1 -fi - -################################################## -# Try to find this script's configuration file, -# but only if no configurations were given on the -# command line. -################################################## -if [ -z "$JETTY_CONF" ] -then - if [ -f $ETC/${NAME}.conf ] - then - JETTY_CONF=$ETC/${NAME}.conf - elif [ -f "$JETTY_BASE/etc/jetty.conf" ] - then - JETTY_CONF=$JETTY_BASE/etc/jetty.conf - elif [ -f "$JETTY_HOME/etc/jetty.conf" ] - then - JETTY_CONF=$JETTY_HOME/etc/jetty.conf - fi -fi - -##################################################### -# Find a location for the pid file -##################################################### -if [ -z "$JETTY_RUN" ] -then - JETTY_RUN=$(findDirectory -w /var/run /usr/var/run $JETTY_BASE /tmp)/jetty - [ -d "$JETTY_RUN" ] || mkdir $JETTY_RUN -fi - -##################################################### -# define start log location -##################################################### -if [ -z "$JETTY_START_LOG" ] -then - JETTY_START_LOG="$JETTY_RUN/$NAME-start.log" -fi - -##################################################### -# Find a pid and state file -##################################################### -if [ -z "$JETTY_PID" ] -then - JETTY_PID="$JETTY_RUN/${NAME}.pid" -fi - -if [ -z "$JETTY_STATE" ] -then - JETTY_STATE=$JETTY_BASE/${NAME}.state -fi - -case "`uname`" in -CYGWIN*) JETTY_STATE="`cygpath -w $JETTY_STATE`";; -esac - - -JETTY_ARGS=(${JETTY_ARGS[*]} "jetty.state=$JETTY_STATE") - -################################################## -# Get the list of config.xml files from jetty.conf -################################################## -if [ -f "$JETTY_CONF" ] && [ -r "$JETTY_CONF" ] -then - while read -r CONF - do - if expr "$CONF" : '#' >/dev/null ; then - continue - fi - - if [ -d "$CONF" ] - then - # assume it's a directory with configure.xml files - # for example: /etc/jetty.d/ - # sort the files before adding them to the list of JETTY_ARGS - for XMLFILE in "$CONF/"*.xml - do - if [ -r "$XMLFILE" ] && [ -f "$XMLFILE" ] - then - JETTY_ARGS=(${JETTY_ARGS[*]} "$XMLFILE") - else - echo "** WARNING: Cannot read '$XMLFILE' specified in '$JETTY_CONF'" - fi - done - else - # assume it's a command line parameter (let start.jar deal with its validity) - JETTY_ARGS=(${JETTY_ARGS[*]} "$CONF") - fi - done < "$JETTY_CONF" -fi - -################################################## -# Setup JAVA if unset -################################################## -if [ -z "$JAVA" ] -then - JAVA=$(which java) -fi - -if [ -z "$JAVA" ] -then - echo "Cannot find a Java JDK. Please set either set JAVA or put java (>=1.5) in your PATH." >&2 - exit 1 -fi - -##################################################### -# See if Deprecated JETTY_LOGS is defined -##################################################### -if [ "$JETTY_LOGS" ] -then - echo "** WARNING: JETTY_LOGS is Deprecated. Please configure logging within the jetty base." >&2 -fi - -##################################################### -# Set STARTED timeout -##################################################### -if [ -z "$JETTY_START_TIMEOUT"] -then - JETTY_START_TIMEOUT=60 -fi - -##################################################### -# Are we running on Windows? Could be, with Cygwin/NT. -##################################################### -case "`uname`" in -CYGWIN*) PATH_SEPARATOR=";";; -*) PATH_SEPARATOR=":";; -esac - - -##################################################### -# Add jetty properties to Java VM options. -##################################################### - -case "`uname`" in -CYGWIN*) -JETTY_HOME="`cygpath -w $JETTY_HOME`" -JETTY_BASE="`cygpath -w $JETTY_BASE`" -TMPDIR="`cygpath -w $TMPDIR`" -;; -esac - -JAVA_OPTIONS=(${JAVA_OPTIONS[*]} "-Djetty.home=$JETTY_HOME" "-Djetty.base=$JETTY_BASE" "-Djava.io.tmpdir=$TMPDIR") - -##################################################### -# This is how the Jetty server will be started -##################################################### - -JETTY_START=$JETTY_HOME/start.jar -START_INI=$JETTY_BASE/start.ini -START_D=$JETTY_BASE/start.d -if [ ! -f "$START_INI" -a ! -d "$START_D" ] -then - echo "Cannot find a start.ini file or a start.d directory in your JETTY_BASE directory: $JETTY_BASE" >&2 - exit 1 -fi - -case "`uname`" in -CYGWIN*) JETTY_START="`cygpath -w $JETTY_START`";; -esac - -RUN_ARGS=(${JAVA_OPTIONS[@]} -jar "$JETTY_START" ${JETTY_ARGS[*]}) -RUN_CMD=("$JAVA" ${RUN_ARGS[@]}) - -##################################################### -# Comment these out after you're happy with what -# the script is doing. -##################################################### -if (( DEBUG )) -then - dumpEnv -fi - -################################################## -# Do the action -################################################## -case "$ACTION" in - start) - echo -n "Starting Jetty: " - - if (( NO_START )); then - echo "Not starting ${NAME} - NO_START=1"; - exit - fi - - if [ $UID -eq 0 ] && type start-stop-daemon > /dev/null 2>&1 - then - unset CH_USER - if [ -n "$JETTY_USER" ] - then - CH_USER="-c$JETTY_USER" - fi - - start-stop-daemon -S -p"$JETTY_PID" $CH_USER -d"$JETTY_BASE" -b -m -a "$JAVA" -- "${RUN_ARGS[@]}" start-log-file="$JETTY_START_LOG" - - else - - if running $JETTY_PID - then - echo "Already Running $(cat $JETTY_PID)!" - exit 1 - fi - - if [ -n "$JETTY_USER" ] && [ `whoami` != "$JETTY_USER" ] - then - unset SU_SHELL - if [ "$JETTY_SHELL" ] - then - SU_SHELL="-s $JETTY_SHELL" - fi - - touch "$JETTY_PID" - chown "$JETTY_USER" "$JETTY_PID" - # FIXME: Broken solution: wordsplitting, pathname expansion, arbitrary command execution, etc. - su - "$JETTY_USER" $SU_SHELL -c " - cd \"$JETTY_BASE\" - exec ${RUN_CMD[*]} start-log-file=\"$JETTY_START_LOG\" > /dev/null & - disown \$! - echo \$! > \"$JETTY_PID\"" - else - "${RUN_CMD[@]}" > /dev/null & - disown $! - echo $! > "$JETTY_PID" - fi - - fi - - if expr "${JETTY_ARGS[*]}" : '.*jetty-started.xml.*' >/dev/null - then - if started "$JETTY_STATE" "$JETTY_PID" "$JETTY_START_TIMEOUT" - then - echo "OK `date`" - else - echo "FAILED `date`" - exit 1 - fi - else - echo "ok `date`" - fi - - ;; - - stop) - echo -n "Stopping Jetty: " - if [ $UID -eq 0 ] && type start-stop-daemon > /dev/null 2>&1; then - start-stop-daemon -K -p"$JETTY_PID" -d"$JETTY_HOME" -a "$JAVA" -s HUP - - TIMEOUT=30 - while running "$JETTY_PID"; do - if (( TIMEOUT-- == 0 )); then - start-stop-daemon -K -p"$JETTY_PID" -d"$JETTY_HOME" -a "$JAVA" -s KILL - fi - - sleep 1 - done - else - if [ ! -f "$JETTY_PID" ] ; then - echo "ERROR: no pid found at $JETTY_PID" - exit 1 - fi - - PID=$(cat "$JETTY_PID" 2>/dev/null) - if [ -z "$PID" ] ; then - echo "ERROR: no pid id found in $JETTY_PID" - exit 1 - fi - kill "$PID" 2>/dev/null - - TIMEOUT=30 - while running $JETTY_PID; do - if (( TIMEOUT-- == 0 )); then - kill -KILL "$PID" 2>/dev/null - fi - - sleep 1 - done - fi - - rm -f "$JETTY_PID" - rm -f "$JETTY_STATE" - echo OK - - ;; - - restart) - JETTY_SH=$0 - > "$JETTY_STATE" - if [ ! -f $JETTY_SH ]; then - if [ ! -f $JETTY_HOME/bin/jetty.sh ]; then - echo "$JETTY_HOME/bin/jetty.sh does not exist." - exit 1 - fi - JETTY_SH=$JETTY_HOME/bin/jetty.sh - fi - - "$JETTY_SH" stop "$@" - "$JETTY_SH" start "$@" - - ;; - - supervise) - # - # Under control of daemontools supervise monitor which - # handles restarts and shutdowns via the svc program. - # - exec "${RUN_CMD[@]}" - - ;; - - run|demo) - echo "Running Jetty: " - - if running "$JETTY_PID" - then - echo Already Running $(cat "$JETTY_PID")! - exit 1 - fi - - exec "${RUN_CMD[@]}" - ;; - - check|status) - if running "$JETTY_PID" - then - echo "Jetty running pid=$(< "$JETTY_PID")" - else - echo "Jetty NOT running" - fi - echo - dumpEnv - echo - - if running "$JETTY_PID" - then - exit 0 - fi - exit 1 - - ;; - - *) - usage - - ;; -esac - -exit 0 diff --git a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackDecoder.java b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackDecoder.java index 28cb913c34f..e730718c643 100644 --- a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackDecoder.java +++ b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackDecoder.java @@ -27,6 +27,7 @@ import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpStatus; import org.eclipse.jetty.http.MetaData; import org.eclipse.jetty.http2.hpack.HpackContext.Entry; + import org.eclipse.jetty.util.TypeUtil; import org.eclipse.jetty.util.log.Log; import org.eclipse.jetty.util.log.Logger; @@ -66,14 +67,15 @@ public class HpackDecoder _localMaxDynamicTableSize=localMaxdynamciTableSize; } - public MetaData decode(ByteBuffer buffer) + public MetaData decode(ByteBuffer buffer) throws HpackException { if (LOG.isDebugEnabled()) LOG.debug(String.format("CtxTbl[%x] decoding %d octets",_context.hashCode(),buffer.remaining())); // If the buffer is big, don't even think about decoding it if (buffer.remaining()>_builder.getMaxSize()) - throw new BadMessageException(HttpStatus.REQUEST_HEADER_FIELDS_TOO_LARGE_431,"Header frame size "+buffer.remaining()+">"+_builder.getMaxSize()); + throw new HpackException.Session("431 Request Header Fields too large",6); + //throw new BadMessageException(HttpStatus.REQUEST_HEADER_FIELDS_TOO_LARGE_431,"Header frame size "+buffer.remaining()+">"+_builder.getMaxSize()); while(buffer.hasRemaining()) { diff --git a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java index b9e72e7352f..c0f5266473e 100644 --- a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java +++ b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java @@ -29,18 +29,22 @@ import org.eclipse.jetty.http.HttpScheme; import org.eclipse.jetty.http.HttpStatus; import org.eclipse.jetty.http.HttpVersion; import org.eclipse.jetty.http.MetaData; +import org.eclipse.jetty.http2.hpack.HpackException.Session; public class MetaDataBuilder { private final int _maxSize; private int _size; - private int _status; + private int _status=-1; private String _method; private HttpScheme _scheme; private HostPortHttpField _authority; private String _path; private long _contentLength=Long.MIN_VALUE; private HttpFields _fields = new HttpFields(10); + private HpackException.Stream _streamException; + private boolean _request; + private boolean _response; /** * @param maxHeadersSize The maximum size of the headers, expressed as total name and value characters. @@ -66,7 +70,7 @@ public class MetaDataBuilder return _size; } - public void emit(HttpField field) + public void emit(HttpField field) throws HpackException.Session { HttpHeader header = field.getHeader(); String name = field.getName(); @@ -74,7 +78,7 @@ public class MetaDataBuilder int field_size = name.length() + (value == null ? 0 : value.length()); _size+=field_size+32; if (_size>_maxSize) - throw new BadMessageException(HttpStatus.REQUEST_HEADER_FIELDS_TOO_LARGE_431,"Header size "+_size+">"+_maxSize); + throw new HpackException.Session("Header Size %d > %d",_size,_maxSize); if (field instanceof StaticTableHttpField) { @@ -82,15 +86,21 @@ public class MetaDataBuilder switch(header) { case C_STATUS: - _status=(Integer)staticField.getStaticValue(); + if(checkHeader(header, _status)) + _status = (Integer)staticField.getStaticValue(); + _response = true; break; case C_METHOD: - _method=value; + if(checkPseudoHeader(header, _method)) + _method = value; + _request = true; break; case C_SCHEME: - _scheme = (HttpScheme)staticField.getStaticValue(); + if(checkPseudoHeader(header, _scheme)) + _scheme = (HttpScheme)staticField.getStaticValue(); + _request = true; break; default: @@ -102,23 +112,32 @@ public class MetaDataBuilder switch(header) { case C_STATUS: - _status=field.getIntValue(); + if(checkHeader(header, _status)) + _status = field.getIntValue(); + _response = true; break; case C_METHOD: - _method=value; + if(checkPseudoHeader(header, _method)) + _method = value; + _request = true; break; case C_SCHEME: - if (value != null) + if(checkPseudoHeader(header, _scheme) && value != null) _scheme = HttpScheme.CACHE.get(value); + _request = true; break; case C_AUTHORITY: - if (field instanceof HostPortHttpField) - _authority = (HostPortHttpField)field; - else if (value != null) - _authority = new AuthorityHttpField(value); + if(checkPseudoHeader(header, _authority)) + { + if (field instanceof HostPortHttpField) + _authority = (HostPortHttpField)field; + else if (value != null) + _authority = new AuthorityHttpField(value); + } + _request = true; break; case HOST: @@ -134,29 +153,89 @@ public class MetaDataBuilder break; case C_PATH: - _path = value; + if(checkPseudoHeader(header, _path)) + _path = value; + _request = true; break; case CONTENT_LENGTH: _contentLength = field.getLongValue(); _fields.add(field); break; + + case TE: + if ("trailors".equalsIgnoreCase(value)) + _fields.add(field); + else + streamException("unsupported TE value %s", value); + break; + + case CONNECTION: + // TODO should other connection specific fields be listed here? + streamException("Connection specific field %s", header); + break; - default: - if (name.charAt(0)!=':') + default: + if (name.charAt(0)==':') + streamException("Unknown psuodo header %s", name); + else _fields.add(field); break; } } else { - if (name.charAt(0)!=':') + if (name.charAt(0)==':') + streamException("Unknown psuedo header %s",name); + else _fields.add(field); } } - public MetaData build() + private void streamException(String messageFormat, Object... args) { + HpackException.Stream stream = new HpackException.Stream(messageFormat, args); + if (_streamException==null) + _streamException = stream; + else + _streamException.addSuppressed(stream); + } + + private boolean checkHeader(HttpHeader header, int value) + { + if (_fields.size()>0) + { + streamException("Psuedo header %s after fields", header.asString()); + return false; + } + if (value==-1) + return true; + streamException("Duplicate psuedo header %s", header.asString()); + return false; + } + + private boolean checkPseudoHeader(HttpHeader header, Object value) + { + if (_fields.size()>0) + { + streamException("Psuedo header %s after fields", header.asString()); + return false; + } + if (value==null) + return true; + streamException("Duplicate psuedo header %s", header.asString()); + return false; + } + + + public MetaData build() throws HpackException.Stream + { + if (_streamException!=null) + throw _streamException; + + if (_request && _response) + throw new HpackException.Stream("Request and Response headers"); + try { HttpFields fields = _fields; @@ -189,13 +268,14 @@ public class MetaDataBuilder * Check that the max size will not be exceeded. * @param length the length * @param huffman the huffman name + * @throws Session */ - public void checkSize(int length, boolean huffman) + public void checkSize(int length, boolean huffman) throws Session { // Apply a huffman fudge factor if (huffman) length=(length*4)/3; if ((_size+length)>_maxSize) - throw new BadMessageException(HttpStatus.REQUEST_HEADER_FIELDS_TOO_LARGE_431,"Header size "+(_size+length)+">"+_maxSize); + throw new HpackException.Session("Header too large %d > %d", _size+length, _maxSize); } } diff --git a/tests/test-webapps/test-proxy-webapp/src/main/webapp/META-INF/MANIFEST.MF b/tests/test-webapps/test-proxy-webapp/src/main/webapp/META-INF/MANIFEST.MF deleted file mode 100644 index 886d243c096..00000000000 --- a/tests/test-webapps/test-proxy-webapp/src/main/webapp/META-INF/MANIFEST.MF +++ /dev/null @@ -1,21 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: TestIt -Bundle-SymbolicName: TestIt -Bundle-Version: 1.0.0.qualifier -Bundle-Activator: testit.Activator -Import-Package: javax.servlet;version="2.6", - javax.servlet.http;version="2.6", - javax.servlet.jsp, - javax.servlet.jsp.tagext -Require-Bundle: org.eclipse.jetty.client, - org.eclipse.jetty.proxy, - org.eclipse.jetty.http, - org.eclipse.jetty.io, - org.eclipse.jetty.util -Bundle-ClassPath: WEB-INF/classes -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 -Bundle-ActivationPolicy: lazy -Web-ContextPath: / -Class-Path: - diff --git a/tests/test-webapps/test-servlet-spec/test-spec-webapp/src/main/webapp/stylesheet.css~ b/tests/test-webapps/test-servlet-spec/test-spec-webapp/src/main/webapp/stylesheet.css~ deleted file mode 100644 index def6847d14c..00000000000 --- a/tests/test-webapps/test-servlet-spec/test-spec-webapp/src/main/webapp/stylesheet.css~ +++ /dev/null @@ -1,7 +0,0 @@ -body {color: #2E2E2E; font-family:sans-serif; font-size:90%;} -h1 {font-variant: small-caps; font-size:130%; letter-spacing: 0.1em;} -h2 {font-variant: small-caps; font-size:100%; letter-spacing: 0.1em; margin-top:2em} -h3 {font-size:100%; letter-spacing: 0.1em;} - -span.pass { color: green; } -span.fail { color:red; } diff --git a/tests/test-webapps/test-webapp-rfc2616/src/main/webapp/META-INF/MANIFEST.MF b/tests/test-webapps/test-webapp-rfc2616/src/main/webapp/META-INF/MANIFEST.MF deleted file mode 100644 index 5e9495128c0..00000000000 --- a/tests/test-webapps/test-webapp-rfc2616/src/main/webapp/META-INF/MANIFEST.MF +++ /dev/null @@ -1,3 +0,0 @@ -Manifest-Version: 1.0 -Class-Path: - From 10ec53319ab4c2b10471eb142365b6a02423f626 Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Sun, 8 Jul 2018 14:56:42 +0000 Subject: [PATCH 03/48] WIP Signed-off-by: Greg Wilkins --- .../jetty/http2/hpack/MetaDataBuilder.java | 2 - .../jetty/http2/hpack/HpackDecoderTest.java | 46 +++++++++---------- .../eclipse/jetty/http2/hpack/HpackTest.java | 6 +-- 3 files changed, 24 insertions(+), 30 deletions(-) diff --git a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java index c0f5266473e..7a5d7e158e3 100644 --- a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java +++ b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java @@ -20,13 +20,11 @@ package org.eclipse.jetty.http2.hpack; -import org.eclipse.jetty.http.BadMessageException; import org.eclipse.jetty.http.HostPortHttpField; import org.eclipse.jetty.http.HttpField; import org.eclipse.jetty.http.HttpFields; import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpScheme; -import org.eclipse.jetty.http.HttpStatus; import org.eclipse.jetty.http.HttpVersion; import org.eclipse.jetty.http.MetaData; import org.eclipse.jetty.http2.hpack.HpackException.Session; diff --git a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java index d6cb341aca9..1b3acc7338f 100644 --- a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java +++ b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java @@ -19,24 +19,6 @@ package org.eclipse.jetty.http2.hpack; -import java.nio.ByteBuffer; -import java.util.Iterator; - -import org.eclipse.jetty.http.BadMessageException; -import org.eclipse.jetty.http.HttpField; -import org.eclipse.jetty.http.HttpFields; -import org.eclipse.jetty.http.HttpHeader; -import org.eclipse.jetty.http.HttpScheme; -import org.eclipse.jetty.http.HttpStatus; -import org.eclipse.jetty.http.HttpVersion; -import org.eclipse.jetty.http.MetaData; -import org.eclipse.jetty.util.BufferUtil; -import org.eclipse.jetty.util.TypeUtil; -import org.eclipse.jetty.util.log.Log; -import org.hamcrest.Matchers; -import org.junit.Assert; -import org.junit.Test; - import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertEquals; @@ -44,10 +26,24 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; +import java.nio.ByteBuffer; +import java.util.Iterator; + +import org.eclipse.jetty.http.BadMessageException; +import org.eclipse.jetty.http.HttpField; +import org.eclipse.jetty.http.HttpHeader; +import org.eclipse.jetty.http.HttpScheme; +import org.eclipse.jetty.http.HttpStatus; +import org.eclipse.jetty.http.MetaData; +import org.eclipse.jetty.util.TypeUtil; +import org.hamcrest.Matchers; +import org.junit.Assert; +import org.junit.Test; + public class HpackDecoderTest { @Test - public void testDecodeD_3() + public void testDecodeD_3() throws Exception { HpackDecoder decoder = new HpackDecoder(4096,8192); @@ -95,7 +91,7 @@ public class HpackDecoderTest } @Test - public void testDecodeD_4() + public void testDecodeD_4() throws Exception { HpackDecoder decoder = new HpackDecoder(4096,8192); @@ -128,7 +124,7 @@ public class HpackDecoderTest } @Test - public void testDecodeWithArrayOffset() + public void testDecodeWithArrayOffset() throws Exception { String value = "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=="; @@ -152,7 +148,7 @@ public class HpackDecoderTest } @Test - public void testDecodeHuffmanWithArrayOffset() + public void testDecodeHuffmanWithArrayOffset() throws Exception { HpackDecoder decoder = new HpackDecoder(4096,8192); @@ -172,7 +168,7 @@ public class HpackDecoderTest } @Test - public void testNghttpx() + public void testNghttpx() throws Exception { // Response encoded by nghttpx String encoded="886196C361Be940b6a65B6850400B8A00571972e080a62D1Bf5f87497cA589D34d1f9a0f0d0234327690Aa69D29aFcA954D3A5358980Ae112e0f7c880aE152A9A74a6bF3"; @@ -204,7 +200,7 @@ public class HpackDecoderTest } @Test - public void testTooBigToIndex() + public void testTooBigToIndex() throws Exception { String encoded = "44FfEc02Df3990A190A0D4Ee5b3d2940Ec98Aa4a62D127D29e273a0aA20dEcAa190a503b262d8a2671D4A2672a927aA874988a2471D05510750c951139EdA2452a3a548cAa1aA90bE4B228342864A9E0D450A5474a92992a1aA513395448E3A0Aa17B96cFe3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f14E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F353F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F54f"; ByteBuffer buffer = ByteBuffer.wrap(TypeUtil.fromHexString(encoded)); @@ -217,7 +213,7 @@ public class HpackDecoderTest } @Test - public void testUnknownIndex() + public void testUnknownIndex() throws Exception { String encoded = "BE"; ByteBuffer buffer = ByteBuffer.wrap(TypeUtil.fromHexString(encoded)); diff --git a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackTest.java b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackTest.java index 31c1ee21d8f..9c7d2a24eb5 100644 --- a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackTest.java +++ b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackTest.java @@ -46,7 +46,7 @@ public class HpackTest final static HttpField Date = new PreEncodedHttpField(HttpHeader.DATE,DateGenerator.formatDate(TimeUnit.NANOSECONDS.toMillis(System.nanoTime()))); @Test - public void encodeDecodeResponseTest() + public void encodeDecodeResponseTest() throws Exception { HpackEncoder encoder = new HpackEncoder(); HpackDecoder decoder = new HpackDecoder(4096,8192); @@ -99,7 +99,7 @@ public class HpackTest } @Test - public void encodeDecodeTooLargeTest() + public void encodeDecodeTooLargeTest() throws Exception { HpackEncoder encoder = new HpackEncoder(); HpackDecoder decoder = new HpackDecoder(4096,164); @@ -138,7 +138,7 @@ public class HpackTest } @Test - public void evictReferencedFieldTest() + public void evictReferencedFieldTest() throws Exception { HpackEncoder encoder = new HpackEncoder(200,200); HpackDecoder decoder = new HpackDecoder(200,1024); From 9fd80e8524d62ec2ebf8f8235b50fbf49e571752 Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Sun, 8 Jul 2018 15:17:39 +0000 Subject: [PATCH 04/48] WIP Signed-off-by: Greg Wilkins --- .../jetty/http2/hpack/HpackException.java | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackException.java diff --git a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackException.java b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackException.java new file mode 100644 index 00000000000..6eebf27c92b --- /dev/null +++ b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackException.java @@ -0,0 +1,54 @@ +// +// ======================================================================== +// Copyright (c) 1995-2018 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.http2.hpack; + +import java.io.IOException; + +public abstract class HpackException extends IOException +{ + HpackException(String messageFormat, Object... args) + { + super(String.format(messageFormat, args)); + } + + public static class Stream extends HpackException + { + Stream(String messageFormat, Object... args) + { + super(messageFormat,args); + } + } + + + public static class Session extends HpackException + { + Session(String messageFormat, Object... args) + { + super(messageFormat,args); + } + } + + public static class Compression extends Session + { + public Compression(String messageFormat, Object... args) + { + super(messageFormat,args); + } + } +} From cb6c582333fbb7a3645033f45325f92a6add56e2 Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Sun, 8 Jul 2018 15:24:55 +0000 Subject: [PATCH 05/48] WIP Signed-off-by: Greg Wilkins --- jetty-home/src/main/resources/bin/jetty.sh | 618 ++++++++++++++++++ .../src/main/webapp/META-INF/MANIFEST.MF | 3 + 2 files changed, 621 insertions(+) create mode 100755 jetty-home/src/main/resources/bin/jetty.sh create mode 100644 tests/test-webapps/test-webapp-rfc2616/src/main/webapp/META-INF/MANIFEST.MF diff --git a/jetty-home/src/main/resources/bin/jetty.sh b/jetty-home/src/main/resources/bin/jetty.sh new file mode 100755 index 00000000000..b2b69a3d75c --- /dev/null +++ b/jetty-home/src/main/resources/bin/jetty.sh @@ -0,0 +1,618 @@ +#!/usr/bin/env bash + +# LSB Tags +### BEGIN INIT INFO +# Provides: jetty +# Required-Start: $local_fs $network +# Required-Stop: $local_fs $network +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Jetty start script. +# Description: Start Jetty web server. +### END INIT INFO + +# Startup script for jetty under *nix systems (it works under NT/cygwin too). + +################################################## +# Set the name which is used by other variables. +# Defaults to the file name without extension. +################################################## +NAME=$(echo $(basename $0) | sed -e 's/^[SK][0-9]*//' -e 's/\.sh$//') + +# To get the service to restart correctly on reboot, uncomment below (3 lines): +# ======================== +# chkconfig: 3 99 99 +# description: Jetty 9 webserver +# processname: jetty +# ======================== + +# Configuration files +# +# /etc/default/$NAME +# If it exists, this is read at the start of script. It may perform any +# sequence of shell commands, like setting relevant environment variables. +# +# $HOME/.$NAMErc (e.g. $HOME/.jettyrc) +# If it exists, this is read at the start of script. It may perform any +# sequence of shell commands, like setting relevant environment variables. +# +# /etc/$NAME.conf +# If found, and no configurations were given on the command line, +# the file will be used as this script's configuration. +# Each line in the file may contain: +# - A comment denoted by the pound (#) sign as first non-blank character. +# - The path to a regular file, which will be passed to jetty as a +# config.xml file. +# - The path to a directory. Each *.xml file in the directory will be +# passed to jetty as a config.xml file. +# - All other lines will be passed, as-is to the start.jar +# +# The files will be checked for existence before being passed to jetty. +# +# Configuration variables +# +# JAVA +# Command to invoke Java. If not set, java (from the PATH) will be used. +# +# JAVA_OPTIONS +# Extra options to pass to the JVM +# +# JETTY_HOME +# Where Jetty is installed. If not set, the script will try go +# guess it by looking at the invocation path for the script +# The java system property "jetty.home" will be +# set to this value for use by configure.xml files, f.e.: +# +# /webapps/jetty.war +# +# JETTY_BASE +# Where your Jetty base directory is. If not set, the value from +# $JETTY_HOME will be used. +# +# JETTY_RUN +# Where the $NAME.pid file should be stored. It defaults to the +# first available of /var/run, /usr/var/run, JETTY_BASE and /tmp +# if not set. +# +# JETTY_PID +# The Jetty PID file, defaults to $JETTY_RUN/$NAME.pid +# +# JETTY_ARGS +# The default arguments to pass to jetty. +# For example +# JETTY_ARGS=jetty.http.port=8080 jetty.ssl.port=8443 +# +# JETTY_USER +# if set, then used as a username to run the server as +# +# JETTY_SHELL +# If set, then used as the shell by su when starting the server. Will have +# no effect if start-stop-daemon exists. Useful when JETTY_USER does not +# have shell access, e.g. /bin/false +# +# JETTY_START_TIMEOUT +# Time spent waiting to see if startup was successful/failed. Defaults to 60 seconds +# + +usage() +{ + echo "Usage: ${0##*/} [-d] {start|stop|run|restart|check|supervise} [ CONFIGS ... ] " + exit 1 +} + +[ $# -gt 0 ] || usage + + +################################################## +# Some utility functions +################################################## +findDirectory() +{ + local L OP=$1 + shift + for L in "$@"; do + [ "$OP" "$L" ] || continue + printf %s "$L" + break + done +} + +running() +{ + if [ -f "$1" ] + then + local PID=$(cat "$1" 2>/dev/null) || return 1 + kill -0 "$PID" 2>/dev/null + return + fi + rm -f "$1" + return 1 +} + +started() +{ + # wait for 60s to see "STARTED" in PID file, needs jetty-started.xml as argument + for ((T = 0; T < $(($3 / 4)); T++)) + do + sleep 4 + [ -z "$(grep STARTED $1 2>/dev/null)" ] || return 0 + [ -z "$(grep STOPPED $1 2>/dev/null)" ] || return 1 + [ -z "$(grep FAILED $1 2>/dev/null)" ] || return 1 + local PID=$(cat "$2" 2>/dev/null) || return 1 + kill -0 "$PID" 2>/dev/null || return 1 + echo -n ". " + done + + return 1; +} + + +readConfig() +{ + (( DEBUG )) && echo "Reading $1.." + source "$1" +} + +dumpEnv() +{ + echo "JAVA = $JAVA" + echo "JAVA_OPTIONS = ${JAVA_OPTIONS[*]}" + echo "JETTY_HOME = $JETTY_HOME" + echo "JETTY_BASE = $JETTY_BASE" + echo "START_D = $START_D" + echo "START_INI = $START_INI" + echo "JETTY_START = $JETTY_START" + echo "JETTY_CONF = $JETTY_CONF" + echo "JETTY_ARGS = ${JETTY_ARGS[*]}" + echo "JETTY_RUN = $JETTY_RUN" + echo "JETTY_PID = $JETTY_PID" + echo "JETTY_START_LOG = $JETTY_START_LOG" + echo "JETTY_STATE = $JETTY_STATE" + echo "JETTY_START_TIMEOUT = $JETTY_START_TIMEOUT" + echo "RUN_CMD = ${RUN_CMD[*]}" +} + + + +################################################## +# Get the action & configs +################################################## +CONFIGS=() +NO_START=0 +DEBUG=0 + +while [[ $1 = -* ]]; do + case $1 in + -d) DEBUG=1 ;; + esac + shift +done +ACTION=$1 +shift + +################################################## +# Read any configuration files +################################################## +ETC=/etc +if [ $UID != 0 ] +then + ETC=$HOME/etc +fi + +for CONFIG in {/etc,~/etc}/default/${NAME}{,9} $HOME/.${NAME}rc; do + if [ -f "$CONFIG" ] ; then + readConfig "$CONFIG" + fi +done + + +################################################## +# Set tmp if not already set. +################################################## +TMPDIR=${TMPDIR:-/tmp} + +################################################## +# Jetty's hallmark +################################################## +JETTY_INSTALL_TRACE_FILE="start.jar" + + +################################################## +# Try to determine JETTY_HOME if not set +################################################## +if [ -z "$JETTY_HOME" ] +then + JETTY_SH=$0 + case "$JETTY_SH" in + /*) JETTY_HOME=${JETTY_SH%/*/*} ;; + ./*/*) JETTY_HOME=${JETTY_SH%/*/*} ;; + ./*) JETTY_HOME=.. ;; + */*/*) JETTY_HOME=./${JETTY_SH%/*/*} ;; + */*) JETTY_HOME=. ;; + *) JETTY_HOME=.. ;; + esac + + if [ ! -f "$JETTY_HOME/$JETTY_INSTALL_TRACE_FILE" ] + then + JETTY_HOME= + fi +fi + + +################################################## +# No JETTY_HOME yet? We're out of luck! +################################################## +if [ -z "$JETTY_HOME" ]; then + echo "** ERROR: JETTY_HOME not set, you need to set it or install in a standard location" + exit 1 +fi + +cd "$JETTY_HOME" +JETTY_HOME=$PWD + + +################################################## +# Set JETTY_BASE +################################################## +if [ -z "$JETTY_BASE" ]; then + JETTY_BASE=$JETTY_HOME +fi + +cd "$JETTY_BASE" +JETTY_BASE=$PWD + + +##################################################### +# Check that jetty is where we think it is +##################################################### +if [ ! -r "$JETTY_HOME/$JETTY_INSTALL_TRACE_FILE" ] +then + echo "** ERROR: Oops! Jetty doesn't appear to be installed in $JETTY_HOME" + echo "** ERROR: $JETTY_HOME/$JETTY_INSTALL_TRACE_FILE is not readable!" + exit 1 +fi + +################################################## +# Try to find this script's configuration file, +# but only if no configurations were given on the +# command line. +################################################## +if [ -z "$JETTY_CONF" ] +then + if [ -f $ETC/${NAME}.conf ] + then + JETTY_CONF=$ETC/${NAME}.conf + elif [ -f "$JETTY_BASE/etc/jetty.conf" ] + then + JETTY_CONF=$JETTY_BASE/etc/jetty.conf + elif [ -f "$JETTY_HOME/etc/jetty.conf" ] + then + JETTY_CONF=$JETTY_HOME/etc/jetty.conf + fi +fi + +##################################################### +# Find a location for the pid file +##################################################### +if [ -z "$JETTY_RUN" ] +then + JETTY_RUN=$(findDirectory -w /var/run /usr/var/run $JETTY_BASE /tmp)/jetty + [ -d "$JETTY_RUN" ] || mkdir $JETTY_RUN +fi + +##################################################### +# define start log location +##################################################### +if [ -z "$JETTY_START_LOG" ] +then + JETTY_START_LOG="$JETTY_RUN/$NAME-start.log" +fi + +##################################################### +# Find a pid and state file +##################################################### +if [ -z "$JETTY_PID" ] +then + JETTY_PID="$JETTY_RUN/${NAME}.pid" +fi + +if [ -z "$JETTY_STATE" ] +then + JETTY_STATE=$JETTY_BASE/${NAME}.state +fi + +case "`uname`" in +CYGWIN*) JETTY_STATE="`cygpath -w $JETTY_STATE`";; +esac + + +JETTY_ARGS=(${JETTY_ARGS[*]} "jetty.state=$JETTY_STATE") + +################################################## +# Get the list of config.xml files from jetty.conf +################################################## +if [ -f "$JETTY_CONF" ] && [ -r "$JETTY_CONF" ] +then + while read -r CONF + do + if expr "$CONF" : '#' >/dev/null ; then + continue + fi + + if [ -d "$CONF" ] + then + # assume it's a directory with configure.xml files + # for example: /etc/jetty.d/ + # sort the files before adding them to the list of JETTY_ARGS + for XMLFILE in "$CONF/"*.xml + do + if [ -r "$XMLFILE" ] && [ -f "$XMLFILE" ] + then + JETTY_ARGS=(${JETTY_ARGS[*]} "$XMLFILE") + else + echo "** WARNING: Cannot read '$XMLFILE' specified in '$JETTY_CONF'" + fi + done + else + # assume it's a command line parameter (let start.jar deal with its validity) + JETTY_ARGS=(${JETTY_ARGS[*]} "$CONF") + fi + done < "$JETTY_CONF" +fi + +################################################## +# Setup JAVA if unset +################################################## +if [ -z "$JAVA" ] +then + JAVA=$(which java) +fi + +if [ -z "$JAVA" ] +then + echo "Cannot find a Java JDK. Please set either set JAVA or put java (>=1.5) in your PATH." >&2 + exit 1 +fi + +##################################################### +# See if Deprecated JETTY_LOGS is defined +##################################################### +if [ "$JETTY_LOGS" ] +then + echo "** WARNING: JETTY_LOGS is Deprecated. Please configure logging within the jetty base." >&2 +fi + +##################################################### +# Set STARTED timeout +##################################################### +if [ -z "$JETTY_START_TIMEOUT"] +then + JETTY_START_TIMEOUT=60 +fi + +##################################################### +# Are we running on Windows? Could be, with Cygwin/NT. +##################################################### +case "`uname`" in +CYGWIN*) PATH_SEPARATOR=";";; +*) PATH_SEPARATOR=":";; +esac + + +##################################################### +# Add jetty properties to Java VM options. +##################################################### + +case "`uname`" in +CYGWIN*) +JETTY_HOME="`cygpath -w $JETTY_HOME`" +JETTY_BASE="`cygpath -w $JETTY_BASE`" +TMPDIR="`cygpath -w $TMPDIR`" +;; +esac + +JAVA_OPTIONS=(${JAVA_OPTIONS[*]} "-Djetty.home=$JETTY_HOME" "-Djetty.base=$JETTY_BASE" "-Djava.io.tmpdir=$TMPDIR") + +##################################################### +# This is how the Jetty server will be started +##################################################### + +JETTY_START=$JETTY_HOME/start.jar +START_INI=$JETTY_BASE/start.ini +START_D=$JETTY_BASE/start.d +if [ ! -f "$START_INI" -a ! -d "$START_D" ] +then + echo "Cannot find a start.ini file or a start.d directory in your JETTY_BASE directory: $JETTY_BASE" >&2 + exit 1 +fi + +case "`uname`" in +CYGWIN*) JETTY_START="`cygpath -w $JETTY_START`";; +esac + +RUN_ARGS=(${JAVA_OPTIONS[@]} -jar "$JETTY_START" ${JETTY_ARGS[*]}) +RUN_CMD=("$JAVA" ${RUN_ARGS[@]}) + +##################################################### +# Comment these out after you're happy with what +# the script is doing. +##################################################### +if (( DEBUG )) +then + dumpEnv +fi + +################################################## +# Do the action +################################################## +case "$ACTION" in + start) + echo -n "Starting Jetty: " + + if (( NO_START )); then + echo "Not starting ${NAME} - NO_START=1"; + exit + fi + + if [ $UID -eq 0 ] && type start-stop-daemon > /dev/null 2>&1 + then + unset CH_USER + if [ -n "$JETTY_USER" ] + then + CH_USER="-c$JETTY_USER" + fi + + start-stop-daemon -S -p"$JETTY_PID" $CH_USER -d"$JETTY_BASE" -b -m -a "$JAVA" -- "${RUN_ARGS[@]}" start-log-file="$JETTY_START_LOG" + + else + + if running $JETTY_PID + then + echo "Already Running $(cat $JETTY_PID)!" + exit 1 + fi + + if [ -n "$JETTY_USER" ] && [ `whoami` != "$JETTY_USER" ] + then + unset SU_SHELL + if [ "$JETTY_SHELL" ] + then + SU_SHELL="-s $JETTY_SHELL" + fi + + touch "$JETTY_PID" + chown "$JETTY_USER" "$JETTY_PID" + # FIXME: Broken solution: wordsplitting, pathname expansion, arbitrary command execution, etc. + su - "$JETTY_USER" $SU_SHELL -c " + cd \"$JETTY_BASE\" + exec ${RUN_CMD[*]} start-log-file=\"$JETTY_START_LOG\" > /dev/null & + disown \$! + echo \$! > \"$JETTY_PID\"" + else + "${RUN_CMD[@]}" > /dev/null & + disown $! + echo $! > "$JETTY_PID" + fi + + fi + + if expr "${JETTY_ARGS[*]}" : '.*jetty-started.xml.*' >/dev/null + then + if started "$JETTY_STATE" "$JETTY_PID" "$JETTY_START_TIMEOUT" + then + echo "OK `date`" + else + echo "FAILED `date`" + exit 1 + fi + else + echo "ok `date`" + fi + + ;; + + stop) + echo -n "Stopping Jetty: " + if [ $UID -eq 0 ] && type start-stop-daemon > /dev/null 2>&1; then + start-stop-daemon -K -p"$JETTY_PID" -d"$JETTY_HOME" -a "$JAVA" -s HUP + + TIMEOUT=30 + while running "$JETTY_PID"; do + if (( TIMEOUT-- == 0 )); then + start-stop-daemon -K -p"$JETTY_PID" -d"$JETTY_HOME" -a "$JAVA" -s KILL + fi + + sleep 1 + done + else + if [ ! -f "$JETTY_PID" ] ; then + echo "ERROR: no pid found at $JETTY_PID" + exit 1 + fi + + PID=$(cat "$JETTY_PID" 2>/dev/null) + if [ -z "$PID" ] ; then + echo "ERROR: no pid id found in $JETTY_PID" + exit 1 + fi + kill "$PID" 2>/dev/null + + TIMEOUT=30 + while running $JETTY_PID; do + if (( TIMEOUT-- == 0 )); then + kill -KILL "$PID" 2>/dev/null + fi + + sleep 1 + done + fi + + rm -f "$JETTY_PID" + rm -f "$JETTY_STATE" + echo OK + + ;; + + restart) + JETTY_SH=$0 + > "$JETTY_STATE" + if [ ! -f $JETTY_SH ]; then + if [ ! -f $JETTY_HOME/bin/jetty.sh ]; then + echo "$JETTY_HOME/bin/jetty.sh does not exist." + exit 1 + fi + JETTY_SH=$JETTY_HOME/bin/jetty.sh + fi + + "$JETTY_SH" stop "$@" + "$JETTY_SH" start "$@" + + ;; + + supervise) + # + # Under control of daemontools supervise monitor which + # handles restarts and shutdowns via the svc program. + # + exec "${RUN_CMD[@]}" + + ;; + + run|demo) + echo "Running Jetty: " + + if running "$JETTY_PID" + then + echo Already Running $(cat "$JETTY_PID")! + exit 1 + fi + + exec "${RUN_CMD[@]}" + ;; + + check|status) + if running "$JETTY_PID" + then + echo "Jetty running pid=$(< "$JETTY_PID")" + else + echo "Jetty NOT running" + fi + echo + dumpEnv + echo + + if running "$JETTY_PID" + then + exit 0 + fi + exit 1 + + ;; + + *) + usage + + ;; +esac + +exit 0 diff --git a/tests/test-webapps/test-webapp-rfc2616/src/main/webapp/META-INF/MANIFEST.MF b/tests/test-webapps/test-webapp-rfc2616/src/main/webapp/META-INF/MANIFEST.MF new file mode 100644 index 00000000000..5e9495128c0 --- /dev/null +++ b/tests/test-webapps/test-webapp-rfc2616/src/main/webapp/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Class-Path: + From 09eb303d2bf8ea3d81e84b86db6d633097a9f26a Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Sun, 8 Jul 2018 15:28:05 +0000 Subject: [PATCH 06/48] WIP Signed-off-by: Greg Wilkins --- .../src/main/webapp/META-INF/MANIFEST.MF | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 tests/test-webapps/test-proxy-webapp/src/main/webapp/META-INF/MANIFEST.MF diff --git a/tests/test-webapps/test-proxy-webapp/src/main/webapp/META-INF/MANIFEST.MF b/tests/test-webapps/test-proxy-webapp/src/main/webapp/META-INF/MANIFEST.MF new file mode 100644 index 00000000000..886d243c096 --- /dev/null +++ b/tests/test-webapps/test-proxy-webapp/src/main/webapp/META-INF/MANIFEST.MF @@ -0,0 +1,21 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: TestIt +Bundle-SymbolicName: TestIt +Bundle-Version: 1.0.0.qualifier +Bundle-Activator: testit.Activator +Import-Package: javax.servlet;version="2.6", + javax.servlet.http;version="2.6", + javax.servlet.jsp, + javax.servlet.jsp.tagext +Require-Bundle: org.eclipse.jetty.client, + org.eclipse.jetty.proxy, + org.eclipse.jetty.http, + org.eclipse.jetty.io, + org.eclipse.jetty.util +Bundle-ClassPath: WEB-INF/classes +Bundle-RequiredExecutionEnvironment: JavaSE-1.7 +Bundle-ActivationPolicy: lazy +Web-ContextPath: / +Class-Path: + From 44801d8ff3130250e784126086c7f13bd177d9e9 Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Sun, 8 Jul 2018 18:08:36 +0000 Subject: [PATCH 07/48] WIP Signed-off-by: Greg Wilkins --- .../org/eclipse/jetty/http2/hpack/HpackDecoder.java | 12 +++++------- .../eclipse/jetty/http2/hpack/HpackException.java | 2 +- .../eclipse/jetty/http2/hpack/MetaDataBuilder.java | 2 +- .../eclipse/jetty/http2/hpack/HpackDecoderTest.java | 5 ++--- 4 files changed, 9 insertions(+), 12 deletions(-) diff --git a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackDecoder.java b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackDecoder.java index e730718c643..0f6ff926361 100644 --- a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackDecoder.java +++ b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackDecoder.java @@ -21,7 +21,6 @@ package org.eclipse.jetty.http2.hpack; import java.nio.ByteBuffer; -import org.eclipse.jetty.http.BadMessageException; import org.eclipse.jetty.http.HttpField; import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpStatus; @@ -75,7 +74,6 @@ public class HpackDecoder // If the buffer is big, don't even think about decoding it if (buffer.remaining()>_builder.getMaxSize()) throw new HpackException.Session("431 Request Header Fields too large",6); - //throw new BadMessageException(HttpStatus.REQUEST_HEADER_FIELDS_TOO_LARGE_431,"Header frame size "+buffer.remaining()+">"+_builder.getMaxSize()); while(buffer.hasRemaining()) { @@ -94,10 +92,9 @@ public class HpackDecoder int index = NBitInteger.decode(buffer,7); Entry entry=_context.get(index); if (entry==null) - { - throw new BadMessageException(HttpStatus.BAD_REQUEST_400, "Unknown index "+index); - } - else if (entry.isStatic()) + throw new HpackException.Session("Unknown index %d",index); + + if (entry.isStatic()) { if (LOG.isDebugEnabled()) LOG.debug("decode IdxStatic {}",entry); @@ -180,7 +177,8 @@ public class HpackDecoder char c=name.charAt(i); if (c>='A'&&c<='Z') { - throw new BadMessageException(400,"Uppercase header name"); + _builder.streamException("Uppercase header name %s",name); + break; } } header=HttpHeader.CACHE.get(name); diff --git a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackException.java b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackException.java index 6eebf27c92b..6e3655c2b70 100644 --- a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackException.java +++ b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackException.java @@ -20,7 +20,7 @@ package org.eclipse.jetty.http2.hpack; import java.io.IOException; -public abstract class HpackException extends IOException +public abstract class HpackException extends RuntimeException { HpackException(String messageFormat, Object... args) { diff --git a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java index 7a5d7e158e3..dbfb698beba 100644 --- a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java +++ b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java @@ -190,7 +190,7 @@ public class MetaDataBuilder } } - private void streamException(String messageFormat, Object... args) + void streamException(String messageFormat, Object... args) { HpackException.Stream stream = new HpackException.Stream(messageFormat, args); if (_streamException==null) diff --git a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java index 1b3acc7338f..1fb9d4ced9c 100644 --- a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java +++ b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java @@ -224,10 +224,9 @@ public class HpackDecoderTest decoder.decode(buffer); Assert.fail(); } - catch (BadMessageException e) + catch (HpackException.Session e) { - assertThat(e.getCode(),equalTo(HttpStatus.BAD_REQUEST_400)); - assertThat(e.getReason(),Matchers.startsWith("Unknown index")); + assertThat(e.getMessage(),Matchers.startsWith("Unknown index")); } } From d8fcd874eef1a9a0096a6aef24d1598620dd3fc3 Mon Sep 17 00:00:00 2001 From: Simone Bordet Date: Tue, 3 Jul 2018 09:43:52 +0200 Subject: [PATCH 08/48] Issue #2679 - HTTP/2 Spec Compliance. Fixed unknown frame type behavior to follow the spec, i.e. ignore it. Signed-off-by: Simone Bordet --- .../eclipse/jetty/http2/parser/Parser.java | 12 +++- .../jetty/http2/parser/UnknownBodyParser.java | 54 ++++++++++++++ .../jetty/http2/frames/UnknownParseTest.java | 72 +++++++++++++++++++ 3 files changed, 135 insertions(+), 3 deletions(-) create mode 100644 jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/UnknownBodyParser.java create mode 100644 jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/UnknownParseTest.java diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/Parser.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/Parser.java index 41872115124..60ffd501313 100644 --- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/Parser.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/Parser.java @@ -52,6 +52,7 @@ public class Parser private final HeaderParser headerParser; private final HeaderBlockParser headerBlockParser; private final BodyParser[] bodyParsers; + private final UnknownBodyParser unknownBodyParser; private boolean continuation; private State state = State.HEADER; @@ -60,6 +61,7 @@ public class Parser this.listener = listener; this.headerParser = new HeaderParser(); this.headerBlockParser = new HeaderBlockParser(byteBufferPool, new HpackDecoder(maxDynamicTableSize, maxHeaderSize)); + this.unknownBodyParser = new UnknownBodyParser(headerParser, listener); this.bodyParsers = new BodyParser[FrameType.values().length]; } @@ -172,9 +174,13 @@ public class Parser int type = getFrameType(); if (type < 0 || type >= bodyParsers.length) { - BufferUtil.clear(buffer); - notifyConnectionFailure(ErrorCode.PROTOCOL_ERROR.code, "unknown_frame_type_" + type); - return false; + // Unknown frame types must be ignored. + if (LOG.isDebugEnabled()) + LOG.debug("Ignoring unknown frame type {}", Integer.toHexString(type)); + if (!unknownBodyParser.parse(buffer)) + return false; + reset(); + return true; } BodyParser bodyParser = bodyParsers[type]; diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/UnknownBodyParser.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/UnknownBodyParser.java new file mode 100644 index 00000000000..97a418c2ec4 --- /dev/null +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/UnknownBodyParser.java @@ -0,0 +1,54 @@ +// +// ======================================================================== +// Copyright (c) 1995-2018 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.http2.parser; + +import java.nio.ByteBuffer; + +public class UnknownBodyParser extends BodyParser +{ + private int cursor; + + public UnknownBodyParser(HeaderParser headerParser, Parser.Listener listener) + { + super(headerParser, listener); + } + + @Override + public boolean parse(ByteBuffer buffer) + { + int length = cursor == 0 ? getBodyLength() : cursor; + cursor = consume(buffer, length); + return cursor == 0; + } + + private int consume(ByteBuffer buffer, int length) + { + int remaining = buffer.remaining(); + if (remaining >= length) + { + buffer.position(buffer.position() + length); + return 0; + } + else + { + buffer.position(buffer.limit()); + return length - remaining; + } + } +} diff --git a/jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/UnknownParseTest.java b/jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/UnknownParseTest.java new file mode 100644 index 00000000000..bbaa6c43347 --- /dev/null +++ b/jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/UnknownParseTest.java @@ -0,0 +1,72 @@ +// +// ======================================================================== +// Copyright (c) 1995-2018 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.http2.frames; + +import java.nio.ByteBuffer; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.function.Function; +import java.util.function.UnaryOperator; + +import org.eclipse.jetty.http2.parser.Parser; +import org.eclipse.jetty.io.ByteBufferPool; +import org.eclipse.jetty.io.MappedByteBufferPool; +import org.junit.Assert; +import org.junit.Test; + +public class UnknownParseTest +{ + private final ByteBufferPool byteBufferPool = new MappedByteBufferPool(); + + @Test + public void testParse() + { + testParse(Function.identity()); + } + + @Test + public void testParseOneByteAtATime() + { + testParse(buffer -> ByteBuffer.wrap(new byte[]{buffer.get()})); + } + + private void testParse(Function fn) + { + AtomicBoolean failure = new AtomicBoolean(); + Parser parser = new Parser(byteBufferPool, new Parser.Listener.Adapter() + { + @Override + public void onConnectionFailure(int error, String reason) + { + failure.set(true); + } + }, 4096, 8192); + parser.init(UnaryOperator.identity()); + + // Iterate a few times to be sure the parser is properly reset. + for (int i = 0; i < 2; ++i) + { + byte[] bytes = new byte[]{0, 0, 4, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + ByteBuffer buffer = ByteBuffer.wrap(bytes); + while (buffer.hasRemaining()) + parser.parse(fn.apply(buffer)); + } + + Assert.assertFalse(failure.get()); + } +} From 5836c50a20f813a1346bdd5c83bebc7ba68e0f2c Mon Sep 17 00:00:00 2001 From: Simone Bordet Date: Tue, 3 Jul 2018 10:39:43 +0200 Subject: [PATCH 09/48] Issue #2679 - HTTP/2 Spec Compliance. Fixed max frame length handling. Signed-off-by: Simone Bordet --- .../jetty/http2/client/HTTP2Client.java | 13 ++++ .../client/HTTP2ClientConnectionFactory.java | 5 ++ .../jetty/http2/parser/HeaderParser.java | 7 ++ .../eclipse/jetty/http2/parser/Parser.java | 27 +++++++- .../http2/frames/MaxFrameSizeParseTest.java | 66 +++++++++++++++++++ .../AbstractHTTP2ServerConnectionFactory.java | 13 ++++ 6 files changed, 129 insertions(+), 2 deletions(-) create mode 100644 jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/MaxFrameSizeParseTest.java diff --git a/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2Client.java b/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2Client.java index 83ff1c487e7..da00dc0094c 100644 --- a/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2Client.java +++ b/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2Client.java @@ -34,6 +34,7 @@ import org.eclipse.jetty.alpn.client.ALPNClientConnectionFactory; import org.eclipse.jetty.http2.BufferingFlowControlStrategy; import org.eclipse.jetty.http2.FlowControlStrategy; import org.eclipse.jetty.http2.api.Session; +import org.eclipse.jetty.http2.frames.Frame; import org.eclipse.jetty.io.ByteBufferPool; import org.eclipse.jetty.io.ClientConnectionFactory; import org.eclipse.jetty.io.Connection; @@ -129,6 +130,7 @@ public class HTTP2Client extends ContainerLifeCycle private List protocols = Arrays.asList("h2", "h2-17", "h2-16", "h2-15", "h2-14"); private int initialSessionRecvWindow = 16 * 1024 * 1024; private int initialStreamRecvWindow = 8 * 1024 * 1024; + private int maxFrameLength = Frame.DEFAULT_MAX_LENGTH; private FlowControlStrategy.Factory flowControlStrategyFactory = () -> new BufferingFlowControlStrategy(0.5F); @Override @@ -334,6 +336,17 @@ public class HTTP2Client extends ContainerLifeCycle this.initialStreamRecvWindow = initialStreamRecvWindow; } + @ManagedAttribute("The max frame length in bytes") + public int getMaxFrameLength() + { + return maxFrameLength; + } + + public void setMaxFrameLength(int maxFrameLength) + { + this.maxFrameLength = maxFrameLength; + } + public void connect(InetSocketAddress address, Session.Listener listener, Promise promise) { connect(null, address, listener, promise); diff --git a/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2ClientConnectionFactory.java b/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2ClientConnectionFactory.java index 9875d602526..9d5ec06954b 100644 --- a/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2ClientConnectionFactory.java +++ b/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2ClientConnectionFactory.java @@ -67,6 +67,7 @@ public class HTTP2ClientConnectionFactory implements ClientConnectionFactory FlowControlStrategy flowControl = client.getFlowControlStrategyFactory().newFlowControlStrategy(); HTTP2ClientSession session = new HTTP2ClientSession(scheduler, endPoint, generator, listener, flowControl); Parser parser = new Parser(byteBufferPool, session, 4096, 8192); + parser.setMaxFrameLength(client.getMaxFrameLength()); HTTP2ClientConnection connection = new HTTP2ClientConnection(client, byteBufferPool, executor, endPoint, parser, session, client.getInputBufferSize(), promise, listener); @@ -110,6 +111,10 @@ public class HTTP2ClientConnectionFactory implements ClientConnectionFactory settings = new HashMap<>(); settings.computeIfAbsent(SettingsFrame.INITIAL_WINDOW_SIZE, k -> client.getInitialStreamRecvWindow()); + Integer maxFrameLength = settings.get(SettingsFrame.MAX_FRAME_SIZE); + if (maxFrameLength != null) + getParser().setMaxFrameLength(maxFrameLength); + PrefaceFrame prefaceFrame = new PrefaceFrame(); SettingsFrame settingsFrame = new SettingsFrame(settings, false); diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/HeaderParser.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/HeaderParser.java index a9d3b9e2771..df717084674 100644 --- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/HeaderParser.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/HeaderParser.java @@ -21,6 +21,7 @@ package org.eclipse.jetty.http2.parser; import java.nio.ByteBuffer; import org.eclipse.jetty.http2.frames.Frame; +import org.eclipse.jetty.http2.frames.FrameType; /** *

The parser for the frame header of HTTP/2 frames.

@@ -144,6 +145,12 @@ public class HeaderParser return streamId; } + @Override + public String toString() + { + return String.format("[%s|%d|%d|%d]", FrameType.from(getFrameType()), getLength(), flags, getStreamId()); + } + private enum State { LENGTH, TYPE, FLAGS, STREAM_ID, STREAM_ID_BYTES diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/Parser.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/Parser.java index 60ffd501313..029e1170574 100644 --- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/Parser.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/Parser.java @@ -24,6 +24,7 @@ import java.util.function.UnaryOperator; import org.eclipse.jetty.http2.ErrorCode; import org.eclipse.jetty.http2.Flags; import org.eclipse.jetty.http2.frames.DataFrame; +import org.eclipse.jetty.http2.frames.Frame; import org.eclipse.jetty.http2.frames.FrameType; import org.eclipse.jetty.http2.frames.GoAwayFrame; import org.eclipse.jetty.http2.frames.HeadersFrame; @@ -53,6 +54,7 @@ public class Parser private final HeaderBlockParser headerBlockParser; private final BodyParser[] bodyParsers; private final UnknownBodyParser unknownBodyParser; + private int maxFrameLength; private boolean continuation; private State state = State.HEADER; @@ -62,6 +64,7 @@ public class Parser this.headerParser = new HeaderParser(); this.headerBlockParser = new HeaderBlockParser(byteBufferPool, new HpackDecoder(maxDynamicTableSize, maxHeaderSize)); this.unknownBodyParser = new UnknownBodyParser(headerParser, listener); + this.maxFrameLength = Frame.DEFAULT_MAX_LENGTH; this.bodyParsers = new BodyParser[FrameType.values().length]; } @@ -139,10 +142,13 @@ public class Parser if (!headerParser.parse(buffer)) return false; - FrameType frameType = FrameType.from(getFrameType()); if (LOG.isDebugEnabled()) - LOG.debug("Parsed {} frame header from {}", frameType, buffer); + LOG.debug("Parsed {} frame header from {}", headerParser, buffer); + if (headerParser.getLength() > getMaxFrameLength()) + return handleFrameTooLarge(buffer); + + FrameType frameType = FrameType.from(getFrameType()); if (continuation) { if (frameType != FrameType.CONTINUATION) @@ -169,6 +175,13 @@ public class Parser return true; } + private boolean handleFrameTooLarge(ByteBuffer buffer) + { + BufferUtil.clear(buffer); + notifyConnectionFailure(ErrorCode.FRAME_SIZE_ERROR.code, "invalid_frame_length"); + return false; + } + protected boolean parseBody(ByteBuffer buffer) { int type = getFrameType(); @@ -209,6 +222,16 @@ public class Parser return headerParser.hasFlag(bit); } + public int getMaxFrameLength() + { + return maxFrameLength; + } + + public void setMaxFrameLength(int maxFrameLength) + { + this.maxFrameLength = maxFrameLength; + } + protected void notifyConnectionFailure(int error, String reason) { try diff --git a/jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/MaxFrameSizeParseTest.java b/jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/MaxFrameSizeParseTest.java new file mode 100644 index 00000000000..b902c1d925c --- /dev/null +++ b/jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/MaxFrameSizeParseTest.java @@ -0,0 +1,66 @@ +// +// ======================================================================== +// Copyright (c) 1995-2018 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.http2.frames; + +import java.nio.ByteBuffer; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.UnaryOperator; + +import org.eclipse.jetty.http2.ErrorCode; +import org.eclipse.jetty.http2.parser.Parser; +import org.eclipse.jetty.io.ByteBufferPool; +import org.eclipse.jetty.io.MappedByteBufferPool; +import org.junit.Assert; +import org.junit.Test; + +public class MaxFrameSizeParseTest +{ + private final ByteBufferPool byteBufferPool = new MappedByteBufferPool(); + + @Test + public void testMaxFrameSize() + { + int maxFrameLength = Frame.DEFAULT_MAX_LENGTH + 16; + + AtomicInteger failure = new AtomicInteger(); + Parser parser = new Parser(byteBufferPool, new Parser.Listener.Adapter() + { + @Override + public void onConnectionFailure(int error, String reason) + { + failure.set(error); + } + }, 4096, 8192); + parser.setMaxFrameLength(maxFrameLength); + parser.init(UnaryOperator.identity()); + + // Iterate a few times to be sure the parser is properly reset. + for (int i = 0; i < 2; ++i) + { + byte[] bytes = new byte[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}; + ByteBuffer buffer = ByteBuffer.wrap(bytes); + buffer.putInt(0, maxFrameLength + 1); + buffer.position(1); + while (buffer.hasRemaining()) + parser.parse(buffer); + } + + Assert.assertEquals(ErrorCode.FRAME_SIZE_ERROR.code, failure.get()); + } +} diff --git a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/AbstractHTTP2ServerConnectionFactory.java b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/AbstractHTTP2ServerConnectionFactory.java index b2cc1ad504e..753da94ef57 100644 --- a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/AbstractHTTP2ServerConnectionFactory.java +++ b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/AbstractHTTP2ServerConnectionFactory.java @@ -50,6 +50,7 @@ public abstract class AbstractHTTP2ServerConnectionFactory extends AbstractConne private int initialStreamRecvWindow = 512 * 1024; private int maxConcurrentStreams = 128; private int maxHeaderBlockFragment = 0; + private int maxFrameLength = Frame.DEFAULT_MAX_LENGTH; private FlowControlStrategy.Factory flowControlStrategyFactory = () -> new BufferingFlowControlStrategy(0.5F); private long streamIdleTimeout; @@ -145,6 +146,17 @@ public abstract class AbstractHTTP2ServerConnectionFactory extends AbstractConne this.streamIdleTimeout = streamIdleTimeout; } + @ManagedAttribute("The max frame length in bytes") + public int getMaxFrameLength() + { + return maxFrameLength; + } + + public void setMaxFrameLength(int maxFrameLength) + { + this.maxFrameLength = maxFrameLength; + } + /** * @return -1 * @deprecated feature removed, no replacement @@ -205,6 +217,7 @@ public abstract class AbstractHTTP2ServerConnectionFactory extends AbstractConne session.setWriteThreshold(getHttpConfiguration().getOutputBufferSize()); ServerParser parser = newServerParser(connector, session); + parser.setMaxFrameLength(getMaxFrameLength()); HTTP2Connection connection = new HTTP2ServerConnection(connector.getByteBufferPool(), connector.getExecutor(), endPoint, httpConfiguration, parser, session, getInputBufferSize(), listener); connection.addListener(connectionListener); From d06d5f5a71cb5e72004b35cc83564a7acbd67a9b Mon Sep 17 00:00:00 2001 From: Simone Bordet Date: Tue, 3 Jul 2018 16:35:37 +0200 Subject: [PATCH 10/48] Issue #2679 - HTTP/2 Spec Compliance. Fixed PRIORITY self-dependency. Signed-off-by: Simone Bordet --- .../org/eclipse/jetty/http2/frames/HeadersFrame.java | 3 ++- .../eclipse/jetty/http2/parser/HeadersBodyParser.java | 9 +++------ .../eclipse/jetty/http2/parser/PriorityBodyParser.java | 1 - 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/HeadersFrame.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/HeadersFrame.java index 709e28f0f44..478dae889e9 100644 --- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/HeadersFrame.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/HeadersFrame.java @@ -83,6 +83,7 @@ public class HeadersFrame extends Frame @Override public String toString() { - return String.format("%s#%d{end=%b}", super.toString(), streamId, endStream); + return String.format("%s#%d{end=%b}%s", super.toString(), streamId, endStream, + priority == null ? "" : String.format("+%s", priority)); } } diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/HeadersBodyParser.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/HeadersBodyParser.java index 784c2369d71..f31c937b33b 100644 --- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/HeadersBodyParser.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/HeadersBodyParser.java @@ -92,17 +92,11 @@ public class HeadersBodyParser extends BodyParser length = getBodyLength(); if (isPadding()) - { state = State.PADDING_LENGTH; - } else if (hasFlag(Flags.PRIORITY)) - { state = State.EXCLUSIVE; - } else - { state = State.HEADERS; - } break; } case PADDING_LENGTH: @@ -162,6 +156,9 @@ public class HeadersBodyParser extends BodyParser } case WEIGHT: { + // SPEC: stream cannot depend on itself. + if (getStreamId() == parentStreamId) + return connectionFailure(buffer, ErrorCode.PROTOCOL_ERROR.code, "invalid_priority_frame"); weight = (buffer.get() & 0xFF) + 1; --length; state = State.HEADERS; diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/PriorityBodyParser.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/PriorityBodyParser.java index daa76602e20..6c1f94d956c 100644 --- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/PriorityBodyParser.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/PriorityBodyParser.java @@ -102,7 +102,6 @@ public class PriorityBodyParser extends BodyParser // SPEC: stream cannot depend on itself. if (getStreamId() == parentStreamId) return connectionFailure(buffer, ErrorCode.PROTOCOL_ERROR.code, "invalid_priority_frame"); - int weight = (buffer.get() & 0xFF) + 1; return onPriority(parentStreamId, weight, exclusive); } From 47506250c8c66ff567f0dee81a3f8d9aaa764b77 Mon Sep 17 00:00:00 2001 From: Simone Bordet Date: Wed, 4 Jul 2018 16:07:31 +0200 Subject: [PATCH 11/48] Issue #2679 - HTTP/2 Spec Compliance. Fixed sanity checks for SETTINGS values. Signed-off-by: Simone Bordet --- .../org/eclipse/jetty/http2/HTTP2Session.java | 28 ++++++------------- .../http2/parser/SettingsBodyParser.java | 24 ++++++++++++---- 2 files changed, 27 insertions(+), 25 deletions(-) diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Session.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Session.java index 600c96b1c66..ff085915340 100644 --- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Session.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Session.java @@ -306,54 +306,42 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio case SettingsFrame.HEADER_TABLE_SIZE: { if (LOG.isDebugEnabled()) - LOG.debug("Update HPACK header table size to {} for {}", value, this); + LOG.debug("Updating HPACK header table size to {} for {}", value, this); generator.setHeaderTableSize(value); break; } case SettingsFrame.ENABLE_PUSH: { - // SPEC: check the value is sane. - if (value != 0 && value != 1) - { - onConnectionFailure(ErrorCode.PROTOCOL_ERROR.code, "invalid_settings_enable_push"); - return; - } - pushEnabled = value == 1; if (LOG.isDebugEnabled()) - LOG.debug("{} push for {}", pushEnabled ? "Enable" : "Disable", this); + LOG.debug("{} push for {}", pushEnabled ? "Enabling" : "Disabling", this); + pushEnabled = value == 1; break; } case SettingsFrame.MAX_CONCURRENT_STREAMS: { - maxLocalStreams = value; if (LOG.isDebugEnabled()) - LOG.debug("Update max local concurrent streams to {} for {}", maxLocalStreams, this); + LOG.debug("Updating max local concurrent streams to {} for {}", maxLocalStreams, this); + maxLocalStreams = value; break; } case SettingsFrame.INITIAL_WINDOW_SIZE: { if (LOG.isDebugEnabled()) - LOG.debug("Update initial window size to {} for {}", value, this); + LOG.debug("Updating initial window size to {} for {}", value, this); flowControl.updateInitialStreamWindow(this, value, false); break; } case SettingsFrame.MAX_FRAME_SIZE: { if (LOG.isDebugEnabled()) - LOG.debug("Update max frame size to {} for {}", value, this); - // SPEC: check the max frame size is sane. - if (value < Frame.DEFAULT_MAX_LENGTH || value > Frame.MAX_MAX_LENGTH) - { - onConnectionFailure(ErrorCode.PROTOCOL_ERROR.code, "invalid_settings_max_frame_size"); - return; - } + LOG.debug("Updating max frame size to {} for {}", value, this); generator.setMaxFrameSize(value); break; } case SettingsFrame.MAX_HEADER_LIST_SIZE: { if (LOG.isDebugEnabled()) - LOG.debug("Update max header list size to {} for {}", value, this); + LOG.debug("Updating max header list size to {} for {}", value, this); generator.setMaxHeaderListSize(value); break; } diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/SettingsBodyParser.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/SettingsBodyParser.java index 7452f2bd17a..6a89ec51e32 100644 --- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/SettingsBodyParser.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/SettingsBodyParser.java @@ -25,6 +25,7 @@ import java.util.concurrent.atomic.AtomicReference; import org.eclipse.jetty.http2.ErrorCode; import org.eclipse.jetty.http2.Flags; +import org.eclipse.jetty.http2.frames.Frame; import org.eclipse.jetty.http2.frames.SettingsFrame; import org.eclipse.jetty.util.log.Log; import org.eclipse.jetty.util.log.Logger; @@ -57,7 +58,7 @@ public class SettingsBodyParser extends BodyParser @Override protected void emptyBody(ByteBuffer buffer) { - onSettings(new HashMap<>()); + onSettings(buffer, new HashMap<>()); } @Override @@ -120,7 +121,7 @@ public class SettingsBodyParser extends BodyParser state = State.SETTING_ID; length -= 4; if (length == 0) - return onSettings(settings); + return onSettings(buffer, settings); } else { @@ -145,7 +146,7 @@ public class SettingsBodyParser extends BodyParser settings.put(settingId, settingValue); state = State.SETTING_ID; if (length == 0) - return onSettings(settings); + return onSettings(buffer, settings); } break; } @@ -158,8 +159,21 @@ public class SettingsBodyParser extends BodyParser return false; } - protected boolean onSettings(Map settings) + protected boolean onSettings(ByteBuffer buffer, Map settings) { + Integer enablePush = settings.get(SettingsFrame.ENABLE_PUSH); + if (enablePush != null && enablePush != 0 && enablePush != 1) + return connectionFailure(buffer, ErrorCode.PROTOCOL_ERROR.code, "invalid_settings_enable_push"); + + Integer initialWindowSize = settings.get(SettingsFrame.INITIAL_WINDOW_SIZE); + // Values greater than Integer.MAX_VALUE will overflow to negative. + if (initialWindowSize != null && initialWindowSize < 0) + return connectionFailure(buffer, ErrorCode.FLOW_CONTROL_ERROR.code, "invalid_settings_initial_window_size"); + + Integer maxFrameLength = settings.get(SettingsFrame.MAX_FRAME_SIZE); + if (maxFrameLength != null && (maxFrameLength < Frame.DEFAULT_MAX_LENGTH || maxFrameLength > Frame.MAX_MAX_LENGTH)) + return connectionFailure(buffer, ErrorCode.PROTOCOL_ERROR.code, "invalid_settings_max_frame_size"); + SettingsFrame frame = new SettingsFrame(settings, hasFlag(Flags.ACK)); reset(); notifySettings(frame); @@ -185,7 +199,7 @@ public class SettingsBodyParser extends BodyParser } @Override - protected boolean onSettings(Map settings) + protected boolean onSettings(ByteBuffer buffer, Map settings) { frameRef.set(new SettingsFrame(settings, false)); return true; From 7aa7dceb894f4d0456c88b7766657fb175f37b83 Mon Sep 17 00:00:00 2001 From: Simone Bordet Date: Wed, 4 Jul 2018 16:20:21 +0200 Subject: [PATCH 12/48] Issue #2679 - HTTP/2 Spec Compliance. Fixed sanity checks for the WINDOW_UPDATE delta. Signed-off-by: Simone Bordet --- .../org/eclipse/jetty/http2/HTTP2Session.java | 50 +++++++++++++++++-- 1 file changed, 45 insertions(+), 5 deletions(-) diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Session.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Session.java index ff085915340..bbf951f6eb8 100644 --- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Session.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Session.java @@ -436,18 +436,58 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio LOG.debug("Received {}", frame); int streamId = frame.getStreamId(); + int windowDelta = frame.getWindowDelta(); if (streamId > 0) { - IStream stream = getStream(streamId); - if (stream != null) + if (windowDelta == 0) { - stream.process(frame, Callback.NOOP); - onWindowUpdate(stream, frame); + reset(new ResetFrame(streamId, ErrorCode.PROTOCOL_ERROR.code), Callback.NOOP); + } + else + { + IStream stream = getStream(streamId); + if (stream != null) + { + int streamSendWindow = stream.updateSendWindow(0); + if (overflows(streamSendWindow, windowDelta)) + { + reset(new ResetFrame(streamId, ErrorCode.FLOW_CONTROL_ERROR.code), Callback.NOOP); + } + else + { + stream.process(frame, Callback.NOOP); + onWindowUpdate(stream, frame); + } + } } } else { - onWindowUpdate(null, frame); + if (windowDelta == 0) + { + onConnectionFailure(ErrorCode.PROTOCOL_ERROR.code, "invalid_window_update_frame"); + } + else + { + int sessionSendWindow = updateSendWindow(0); + if (overflows(sessionSendWindow, windowDelta)) + onConnectionFailure(ErrorCode.FLOW_CONTROL_ERROR.code, "invalid_flow_control_window"); + else + onWindowUpdate(null, frame); + } + } + } + + private boolean overflows(int a, int b) + { + try + { + Math.addExact(a, b); + return false; + } + catch (ArithmeticException x) + { + return true; } } From d35fa69e1fdc0142d07bf2ee64d6caa289e13f78 Mon Sep 17 00:00:00 2001 From: Simone Bordet Date: Wed, 4 Jul 2018 17:47:35 +0200 Subject: [PATCH 13/48] Issue #2679 - HTTP/2 Spec Compliance. Fixed handling of CONTINUATION frames. Signed-off-by: Simone Bordet --- .../eclipse/jetty/http2/parser/Parser.java | 37 +++++++------------ 1 file changed, 13 insertions(+), 24 deletions(-) diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/Parser.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/Parser.java index 029e1170574..912669d101a 100644 --- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/Parser.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/Parser.java @@ -36,7 +36,6 @@ import org.eclipse.jetty.http2.frames.SettingsFrame; import org.eclipse.jetty.http2.frames.WindowUpdateFrame; import org.eclipse.jetty.http2.hpack.HpackDecoder; import org.eclipse.jetty.io.ByteBufferPool; -import org.eclipse.jetty.util.BufferUtil; import org.eclipse.jetty.util.log.Log; import org.eclipse.jetty.util.log.Logger; @@ -132,8 +131,7 @@ public class Parser { if (LOG.isDebugEnabled()) LOG.debug(x); - BufferUtil.clear(buffer); - notifyConnectionFailure(ErrorCode.PROTOCOL_ERROR.code, "parser_error"); + connectionFailure(buffer, ErrorCode.PROTOCOL_ERROR, "parser_error"); } } @@ -146,42 +144,28 @@ public class Parser LOG.debug("Parsed {} frame header from {}", headerParser, buffer); if (headerParser.getLength() > getMaxFrameLength()) - return handleFrameTooLarge(buffer); + return connectionFailure(buffer, ErrorCode.FRAME_SIZE_ERROR, "invalid_frame_length"); FrameType frameType = FrameType.from(getFrameType()); if (continuation) { + // SPEC: CONTINUATION frames must be consecutive. if (frameType != FrameType.CONTINUATION) - { - // SPEC: CONTINUATION frames must be consecutive. - BufferUtil.clear(buffer); - notifyConnectionFailure(ErrorCode.PROTOCOL_ERROR.code, "continuation_frame_expected"); - return false; - } + return connectionFailure(buffer, ErrorCode.PROTOCOL_ERROR, "expected_continuation_frame"); if (headerParser.hasFlag(Flags.END_HEADERS)) - { continuation = false; - } } else { - if (frameType == FrameType.HEADERS && - !headerParser.hasFlag(Flags.END_HEADERS)) - { - continuation = true; - } + if (frameType == FrameType.HEADERS) + continuation = !headerParser.hasFlag(Flags.END_HEADERS); + else if (frameType == FrameType.CONTINUATION) + return connectionFailure(buffer, ErrorCode.PROTOCOL_ERROR, "unexpected_continuation_frame"); } state = State.BODY; return true; } - private boolean handleFrameTooLarge(ByteBuffer buffer) - { - BufferUtil.clear(buffer); - notifyConnectionFailure(ErrorCode.FRAME_SIZE_ERROR.code, "invalid_frame_length"); - return false; - } - protected boolean parseBody(ByteBuffer buffer) { int type = getFrameType(); @@ -212,6 +196,11 @@ public class Parser return true; } + private boolean connectionFailure(ByteBuffer buffer, ErrorCode error, String reason) + { + return unknownBodyParser.connectionFailure(buffer, error.code, reason); + } + protected int getFrameType() { return headerParser.getFrameType(); From 0ec8f312f6c89aa836d645624b468243832dcea3 Mon Sep 17 00:00:00 2001 From: Simone Bordet Date: Tue, 3 Jul 2018 15:51:14 +0200 Subject: [PATCH 14/48] Issue #2679 - HTTP/2 Spec Compliance. Fixed stream ID validation and stream state handling. Signed-off-by: Simone Bordet --- .../http2/client/HTTP2ClientSession.java | 19 +++- .../org/eclipse/jetty/http2/HTTP2Session.java | 91 +++++++++++++------ .../http2/generator/GoAwayGenerator.java | 2 +- .../http2/server/HTTP2ServerSession.java | 40 ++++++-- 4 files changed, 113 insertions(+), 39 deletions(-) diff --git a/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2ClientSession.java b/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2ClientSession.java index 617a13fbba4..0fbaf32fd81 100644 --- a/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2ClientSession.java +++ b/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2ClientSession.java @@ -78,6 +78,7 @@ public class HTTP2ClientSession extends HTTP2Session if (LOG.isDebugEnabled()) LOG.debug("Received {}", frame); + // HEADERS can be received for normal and pushed responses. int streamId = frame.getStreamId(); IStream stream = getStream(streamId); if (stream != null) @@ -96,7 +97,23 @@ public class HTTP2ClientSession extends HTTP2Session else { if (LOG.isDebugEnabled()) - LOG.debug("Ignoring {}, stream #{} not found", frame, streamId); + LOG.debug("Stream #{} not found", streamId); + if ((streamId & 1) == 1) + { + // Normal stream. + // Headers or trailers arriving after + // the stream has been reset are ignored. + if (!isLocalStreamClosed(streamId)) + onConnectionFailure(ErrorCode.PROTOCOL_ERROR.code, "unexpected_headers_frame"); + } + else + { + // Pushed stream. + // Headers or trailers arriving after + // the stream has been reset are ignored. + if (!isRemoteStreamClosed(streamId)) + onConnectionFailure(ErrorCode.PROTOCOL_ERROR.code, "unexpected_headers_frame"); + } } } diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Session.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Session.java index bbf951f6eb8..53fdda5a4b7 100644 --- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Session.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Session.java @@ -72,8 +72,8 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio private static final Logger LOG = Log.getLogger(HTTP2Session.class); private final ConcurrentMap streams = new ConcurrentHashMap<>(); - private final AtomicInteger streamIds = new AtomicInteger(); - private final AtomicInteger lastStreamId = new AtomicInteger(); + private final AtomicInteger localStreamIds = new AtomicInteger(); + private final AtomicInteger lastRemoteStreamId = new AtomicInteger(); private final AtomicInteger localStreamCount = new AtomicInteger(); private final AtomicBiInteger remoteStreamCount = new AtomicBiInteger(); private final AtomicInteger sendWindow = new AtomicInteger(); @@ -105,7 +105,8 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio this.flusher = new HTTP2Flusher(this); this.maxLocalStreams = -1; this.maxRemoteStreams = -1; - this.streamIds.set(initialStreamId); + this.localStreamIds.set(initialStreamId); + this.lastRemoteStreamId.set((initialStreamId & 0x01) == 0x01 ? 0 : -1); this.streamIdleTimeout = endPoint.getIdleTimeout(); this.sendWindow.set(FlowControlStrategy.DEFAULT_WINDOW_SIZE); this.recvWindow.set(FlowControlStrategy.DEFAULT_WINDOW_SIZE); @@ -229,35 +230,44 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio LOG.debug("Received {}", frame); int streamId = frame.getStreamId(); - final IStream stream = getStream(streamId); + IStream stream = getStream(streamId); // SPEC: the session window must be updated even if the stream is null. // The flow control length includes the padding bytes. - final int flowControlLength = frame.remaining() + frame.padding(); + int flowControlLength = frame.remaining() + frame.padding(); flowControl.onDataReceived(this, stream, flowControlLength); if (stream != null) { if (getRecvWindow() < 0) - { - close(ErrorCode.FLOW_CONTROL_ERROR.code, "session_window_exceeded", callback); - } + onConnectionFailure(ErrorCode.FLOW_CONTROL_ERROR.code, "session_window_exceeded", callback); else - { stream.process(frame, new DataCallback(callback, stream, flowControlLength)); - } } else { if (LOG.isDebugEnabled()) - LOG.debug("Ignoring {}, stream #{} not found", frame, streamId); + LOG.debug("Stream #{} not found", streamId); // We must enlarge the session flow control window, // otherwise other requests will be stalled. flowControl.onDataConsumed(this, null, flowControlLength); - callback.succeeded(); + if (isRemoteStreamClosed(streamId)) + reset(new ResetFrame(streamId, ErrorCode.STREAM_CLOSED_ERROR.code), callback); + else + onConnectionFailure(ErrorCode.PROTOCOL_ERROR.code, "unexpected_data_frame", callback); } } + protected boolean isLocalStreamClosed(int streamId) + { + return streamId <= localStreamIds.get(); + } + + protected boolean isRemoteStreamClosed(int streamId) + { + return streamId <= getLastRemoteStreamId(); + } + @Override public abstract void onHeaders(HeadersFrame frame); @@ -274,11 +284,19 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio if (LOG.isDebugEnabled()) LOG.debug("Received {}", frame); - IStream stream = getStream(frame.getStreamId()); + int streamId = frame.getStreamId(); + IStream stream = getStream(streamId); if (stream != null) + { stream.process(frame, new ResetCallback()); + } else - notifyReset(this, frame); + { + if (isRemoteStreamClosed(streamId)) + notifyReset(this, frame); + else + onConnectionFailure(ErrorCode.PROTOCOL_ERROR.code, "unexpected_rst_stream_frame"); + } } @Override @@ -449,7 +467,7 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio if (stream != null) { int streamSendWindow = stream.updateSendWindow(0); - if (overflows(streamSendWindow, windowDelta)) + if (sumOverflows(streamSendWindow, windowDelta)) { reset(new ResetFrame(streamId, ErrorCode.FLOW_CONTROL_ERROR.code), Callback.NOOP); } @@ -459,6 +477,11 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio onWindowUpdate(stream, frame); } } + else + { + if (!isRemoteStreamClosed(streamId)) + onConnectionFailure(ErrorCode.PROTOCOL_ERROR.code, "unexpected_window_update_frame"); + } } } else @@ -470,7 +493,7 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio else { int sessionSendWindow = updateSendWindow(0); - if (overflows(sessionSendWindow, windowDelta)) + if (sumOverflows(sessionSendWindow, windowDelta)) onConnectionFailure(ErrorCode.FLOW_CONTROL_ERROR.code, "invalid_flow_control_window"); else onWindowUpdate(null, frame); @@ -478,7 +501,7 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio } } - private boolean overflows(int a, int b) + private boolean sumOverflows(int a, int b) { try { @@ -494,7 +517,12 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio @Override public void onConnectionFailure(int error, String reason) { - notifyFailure(this, new IOException(String.format("%d/%s", error, reason)), new CloseCallback(error, reason)); + onConnectionFailure(error, reason, Callback.NOOP); + } + + private void onConnectionFailure(int error, String reason, Callback callback) + { + notifyFailure(this, new IOException(String.format("%d/%s", error, reason)), new CloseCallback(error, reason, callback)); } @Override @@ -510,7 +538,7 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio int streamId = frame.getStreamId(); if (streamId <= 0) { - streamId = streamIds.getAndAdd(2); + streamId = localStreamIds.getAndAdd(2); PriorityFrame priority = frame.getPriority(); priority = priority == null ? null : new PriorityFrame(streamId, priority.getParentStreamId(), priority.getWeight(), priority.isExclusive()); @@ -539,7 +567,7 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio IStream stream = streams.get(streamId); if (stream == null) { - streamId = streamIds.getAndAdd(2); + streamId = localStreamIds.getAndAdd(2); frame = new PriorityFrame(streamId, frame.getParentStreamId(), frame.getWeight(), frame.isExclusive()); } @@ -557,7 +585,7 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio boolean queued; synchronized (this) { - int streamId = streamIds.getAndAdd(2); + int streamId = localStreamIds.getAndAdd(2); frame = new PushPromiseFrame(frame.getStreamId(), streamId, frame.getMetaData()); IStream pushStream = createLocalStream(streamId); @@ -657,7 +685,7 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio reason = reason.substring(0, Math.min(reason.length(), 32)); payload = reason.getBytes(StandardCharsets.UTF_8); } - return new GoAwayFrame(closeState, lastStreamId.get(), error, payload); + return new GoAwayFrame(closeState, getLastRemoteStreamId(), error, payload); } @Override @@ -764,7 +792,7 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio // SPEC: duplicate stream is treated as connection error. if (streams.putIfAbsent(streamId, stream) == null) { - updateLastStreamId(streamId); + updateLastRemoteStreamId(streamId); stream.setIdleTimeout(getStreamIdleTimeout()); flowControl.onStreamCreated(stream); if (LOG.isDebugEnabled()) @@ -773,7 +801,7 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio } else { - close(ErrorCode.PROTOCOL_ERROR.code, "duplicate_stream", Callback.NOOP); + onConnectionFailure(ErrorCode.PROTOCOL_ERROR.code, "duplicate_stream"); return null; } } @@ -1042,9 +1070,14 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio return !endPoint.isOpen(); } - private void updateLastStreamId(int streamId) + protected int getLastRemoteStreamId() { - Atomics.updateMax(lastStreamId, streamId); + return lastRemoteStreamId.get(); + } + + private void updateLastRemoteStreamId(int streamId) + { + Atomics.updateMax(lastRemoteStreamId, streamId); } protected Stream.Listener notifyNewStream(Stream stream, HeadersFrame frame) @@ -1506,11 +1539,13 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio { private final int error; private final String reason; + private final Callback callback; - private CloseCallback(int error, String reason) + private CloseCallback(int error, String reason, Callback callback) { this.error = error; this.reason = reason; + this.callback = callback; } @Override @@ -1533,7 +1568,7 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio private void complete() { - close(error, reason, Callback.NOOP); + close(error, reason, callback); } } diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/generator/GoAwayGenerator.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/generator/GoAwayGenerator.java index 73f211d81c2..1b6e1735358 100644 --- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/generator/GoAwayGenerator.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/generator/GoAwayGenerator.java @@ -45,7 +45,7 @@ public class GoAwayGenerator extends FrameGenerator public int generateGoAway(ByteBufferPool.Lease lease, int lastStreamId, int error, byte[] payload) { if (lastStreamId < 0) - throw new IllegalArgumentException("Invalid last stream id: " + lastStreamId); + lastStreamId = 0; // The last streamId + the error code. int fixedLength = 4 + 4; diff --git a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2ServerSession.java b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2ServerSession.java index dfe5c828039..37882e3650f 100644 --- a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2ServerSession.java +++ b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2ServerSession.java @@ -83,16 +83,39 @@ public class HTTP2ServerSession extends HTTP2Session implements ServerParser.Lis if (LOG.isDebugEnabled()) LOG.debug("Received {}", frame); + int streamId = frame.getStreamId(); + if ((streamId & 1) != 1) + { + onConnectionFailure(ErrorCode.PROTOCOL_ERROR.code, "invalid_stream_id"); + return; + } + + IStream stream = getStream(streamId); + MetaData metaData = frame.getMetaData(); if (metaData.isRequest()) { - IStream stream = createRemoteStream(frame.getStreamId()); - if (stream != null) + if (stream == null) { - onStreamOpened(stream); - stream.process(frame, Callback.NOOP); - Stream.Listener listener = notifyNewStream(stream, frame); - stream.setListener(listener); + if (isRemoteStreamClosed(streamId)) + { + onConnectionFailure(ErrorCode.STREAM_CLOSED_ERROR.code, "unexpected_headers_frame"); + } + else + { + stream = createRemoteStream(streamId); + if (stream != null) + { + onStreamOpened(stream); + stream.process(frame, Callback.NOOP); + Stream.Listener listener = notifyNewStream(stream, frame); + stream.setListener(listener); + } + } + } + else + { + onConnectionFailure(ErrorCode.PROTOCOL_ERROR.code, "duplicate_stream"); } } else if (metaData.isResponse()) @@ -102,8 +125,6 @@ public class HTTP2ServerSession extends HTTP2Session implements ServerParser.Lis else { // Trailers. - int streamId = frame.getStreamId(); - IStream stream = getStream(streamId); if (stream != null) { stream.process(frame, Callback.NOOP); @@ -112,7 +133,8 @@ public class HTTP2ServerSession extends HTTP2Session implements ServerParser.Lis else { if (LOG.isDebugEnabled()) - LOG.debug("Ignoring {}, stream #{} not found", frame, streamId); + LOG.debug("Stream #{} not found", streamId); + onConnectionFailure(ErrorCode.PROTOCOL_ERROR.code, "unexpected_headers_frame"); } } } From a9819ebb01f89a8d62b425152a72e8210bf6e8ae Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Thu, 12 Jul 2018 11:50:53 +0200 Subject: [PATCH 15/48] review fixes Signed-off-by: Greg Wilkins --- .../jetty/http2/hpack/HpackDecoder.java | 4 +-- .../jetty/http2/hpack/HpackException.java | 17 ++++++----- .../jetty/http2/hpack/MetaDataBuilder.java | 28 +++++++++---------- .../jetty/http2/hpack/HpackDecoderTest.java | 2 +- 4 files changed, 25 insertions(+), 26 deletions(-) diff --git a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackDecoder.java b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackDecoder.java index 0f6ff926361..5526eb44772 100644 --- a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackDecoder.java +++ b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackDecoder.java @@ -73,7 +73,7 @@ public class HpackDecoder // If the buffer is big, don't even think about decoding it if (buffer.remaining()>_builder.getMaxSize()) - throw new HpackException.Session("431 Request Header Fields too large",6); + throw new HpackException.SessionException("431 Request Header Fields too large"); while(buffer.hasRemaining()) { @@ -92,7 +92,7 @@ public class HpackDecoder int index = NBitInteger.decode(buffer,7); Entry entry=_context.get(index); if (entry==null) - throw new HpackException.Session("Unknown index %d",index); + throw new HpackException.SessionException("Unknown index %d",index); if (entry.isStatic()) { diff --git a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackException.java b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackException.java index 6e3655c2b70..287e02f2e13 100644 --- a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackException.java +++ b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackException.java @@ -27,26 +27,25 @@ public abstract class HpackException extends RuntimeException super(String.format(messageFormat, args)); } - public static class Stream extends HpackException + public static class StreamException extends HpackException { - Stream(String messageFormat, Object... args) + StreamException(String messageFormat, Object... args) { super(messageFormat,args); } } - - - public static class Session extends HpackException + + public static class SessionException extends HpackException { - Session(String messageFormat, Object... args) + SessionException(String messageFormat, Object... args) { super(messageFormat,args); } } - - public static class Compression extends Session + + public static class CompressionException extends SessionException { - public Compression(String messageFormat, Object... args) + public CompressionException(String messageFormat, Object... args) { super(messageFormat,args); } diff --git a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java index dbfb698beba..de15f936716 100644 --- a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java +++ b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java @@ -27,7 +27,7 @@ import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpScheme; import org.eclipse.jetty.http.HttpVersion; import org.eclipse.jetty.http.MetaData; -import org.eclipse.jetty.http2.hpack.HpackException.Session; +import org.eclipse.jetty.http2.hpack.HpackException.SessionException; public class MetaDataBuilder { @@ -40,7 +40,7 @@ public class MetaDataBuilder private String _path; private long _contentLength=Long.MIN_VALUE; private HttpFields _fields = new HttpFields(10); - private HpackException.Stream _streamException; + private HpackException.StreamException _streamException; private boolean _request; private boolean _response; @@ -68,7 +68,7 @@ public class MetaDataBuilder return _size; } - public void emit(HttpField field) throws HpackException.Session + public void emit(HttpField field) throws HpackException.SessionException { HttpHeader header = field.getHeader(); String name = field.getName(); @@ -76,7 +76,7 @@ public class MetaDataBuilder int field_size = name.length() + (value == null ? 0 : value.length()); _size+=field_size+32; if (_size>_maxSize) - throw new HpackException.Session("Header Size %d > %d",_size,_maxSize); + throw new HpackException.SessionException("Header Size %d > %d",_size,_maxSize); if (field instanceof StaticTableHttpField) { @@ -162,10 +162,10 @@ public class MetaDataBuilder break; case TE: - if ("trailors".equalsIgnoreCase(value)) + if ("trailers".equalsIgnoreCase(value)) _fields.add(field); else - streamException("unsupported TE value %s", value); + streamException("Unsupported TE value %s", value); break; case CONNECTION: @@ -175,7 +175,7 @@ public class MetaDataBuilder default: if (name.charAt(0)==':') - streamException("Unknown psuodo header %s", name); + streamException("Unknown pseudo header %s", name); else _fields.add(field); break; @@ -184,7 +184,7 @@ public class MetaDataBuilder else { if (name.charAt(0)==':') - streamException("Unknown psuedo header %s",name); + streamException("Unknown pseudo header %s",name); else _fields.add(field); } @@ -192,7 +192,7 @@ public class MetaDataBuilder void streamException(String messageFormat, Object... args) { - HpackException.Stream stream = new HpackException.Stream(messageFormat, args); + HpackException.StreamException stream = new HpackException.StreamException(messageFormat, args); if (_streamException==null) _streamException = stream; else @@ -226,13 +226,13 @@ public class MetaDataBuilder } - public MetaData build() throws HpackException.Stream + public MetaData build() throws HpackException.StreamException { if (_streamException!=null) throw _streamException; if (_request && _response) - throw new HpackException.Stream("Request and Response headers"); + throw new HpackException.StreamException("Request and Response headers"); try { @@ -266,14 +266,14 @@ public class MetaDataBuilder * Check that the max size will not be exceeded. * @param length the length * @param huffman the huffman name - * @throws Session + * @throws SessionException */ - public void checkSize(int length, boolean huffman) throws Session + public void checkSize(int length, boolean huffman) throws SessionException { // Apply a huffman fudge factor if (huffman) length=(length*4)/3; if ((_size+length)>_maxSize) - throw new HpackException.Session("Header too large %d > %d", _size+length, _maxSize); + throw new HpackException.SessionException("Header too large %d > %d", _size+length, _maxSize); } } diff --git a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java index 1fb9d4ced9c..6d98a68ed00 100644 --- a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java +++ b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java @@ -224,7 +224,7 @@ public class HpackDecoderTest decoder.decode(buffer); Assert.fail(); } - catch (HpackException.Session e) + catch (HpackException.SessionException e) { assertThat(e.getMessage(),Matchers.startsWith("Unknown index")); } From 0ad4b4483b986a8d1027eba599a633ea8667d889 Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Sun, 15 Jul 2018 19:22:31 +0200 Subject: [PATCH 16/48] WIP Signed-off-by: Greg Wilkins --- .../java/org/eclipse/jetty/http/HttpURI.java | 3 +- .../java/org/eclipse/jetty/http/MetaData.java | 15 +- .../jetty/http2/hpack/MetaDataBuilder.java | 20 +- .../jetty/http2/hpack/HpackDecoderTest.java | 321 +++++++++++++++++- .../test/resources/jetty-logging.properties | 2 +- 5 files changed, 341 insertions(+), 20 deletions(-) diff --git a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpURI.java b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpURI.java index b09accbb18e..af3e12e678e 100644 --- a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpURI.java +++ b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpURI.java @@ -164,7 +164,8 @@ public class HttpURI _host=host; _port=port; - parse(State.PATH,pathQuery,0,pathQuery.length()); + if (pathQuery!=null) + parse(State.PATH,pathQuery,0,pathQuery.length()); } diff --git a/jetty-http/src/main/java/org/eclipse/jetty/http/MetaData.java b/jetty-http/src/main/java/org/eclipse/jetty/http/MetaData.java index 75551f76ede..decab4d73bd 100644 --- a/jetty-http/src/main/java/org/eclipse/jetty/http/MetaData.java +++ b/jetty-http/src/main/java/org/eclipse/jetty/http/MetaData.java @@ -163,17 +163,26 @@ public class MetaData implements Iterable public Request(String method, HttpScheme scheme, HostPortHttpField hostPort, String uri, HttpVersion version, HttpFields fields) { - this(method, new HttpURI(scheme == null ? null : scheme.asString(), hostPort.getHost(), hostPort.getPort(), uri), version, fields); + this(method, new HttpURI(scheme == null ? null : scheme.asString(), + hostPort==null?null:hostPort.getHost(), + hostPort==null?-1:hostPort.getPort(), + uri), version, fields); } public Request(String method, HttpScheme scheme, HostPortHttpField hostPort, String uri, HttpVersion version, HttpFields fields, long contentLength) { - this(method, new HttpURI(scheme == null ? null : scheme.asString(), hostPort.getHost(), hostPort.getPort(), uri), version, fields, contentLength); + this(method, new HttpURI(scheme==null?null:scheme.asString(), + hostPort==null?null:hostPort.getHost(), + hostPort==null?-1:hostPort.getPort(), + uri), version, fields, contentLength); } public Request(String method, String scheme, HostPortHttpField hostPort, String uri, HttpVersion version, HttpFields fields, long contentLength) { - this(method, new HttpURI(scheme, hostPort.getHost(), hostPort.getPort(), uri), version, fields, contentLength); + this(method, new HttpURI(scheme, + hostPort==null?null:hostPort.getHost(), + hostPort==null?-1:hostPort.getPort(), + uri), version, fields, contentLength); } public Request(Request request) diff --git a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java index de15f936716..a53b70de97c 100644 --- a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java +++ b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java @@ -203,12 +203,12 @@ public class MetaDataBuilder { if (_fields.size()>0) { - streamException("Psuedo header %s after fields", header.asString()); + streamException("Pseudo header %s after fields", header.asString()); return false; } if (value==-1) return true; - streamException("Duplicate psuedo header %s", header.asString()); + streamException("Duplicate pseudo header %s", header.asString()); return false; } @@ -216,20 +216,22 @@ public class MetaDataBuilder { if (_fields.size()>0) { - streamException("Psuedo header %s after fields", header.asString()); + streamException("Pseudo header %s after fields", header.asString()); return false; } if (value==null) return true; - streamException("Duplicate psuedo header %s", header.asString()); + streamException("Duplicate pseudo header %s", header.asString()); return false; } - public MetaData build() throws HpackException.StreamException { if (_streamException!=null) + { + _streamException.addSuppressed(new Throwable()); throw _streamException; + } if (_request && _response) throw new HpackException.StreamException("Request and Response headers"); @@ -239,14 +241,10 @@ public class MetaDataBuilder HttpFields fields = _fields; _fields = new HttpFields(Math.max(10,fields.size()+5)); - if (_method!=null) + if (_method!=null || _path!=null || _authority!=null || _scheme!=null) return new MetaData.Request(_method,_scheme,_authority,_path,HttpVersion.HTTP_2,fields,_contentLength); - if (_status!=0) + if (_status>0) return new MetaData.Response(HttpVersion.HTTP_2,_status,fields,_contentLength); - if (_path!=null) - fields.put(HttpHeader.C_PATH,_path); - if (_authority!=null) - fields.put(HttpHeader.HOST,_authority.getValue()); return new MetaData(HttpVersion.HTTP_2,fields,_contentLength); } diff --git a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java index 6d98a68ed00..dd861890d7e 100644 --- a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java +++ b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java @@ -19,7 +19,6 @@ package org.eclipse.jetty.http2.hpack; -import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -29,12 +28,11 @@ import static org.junit.Assert.assertTrue; import java.nio.ByteBuffer; import java.util.Iterator; -import org.eclipse.jetty.http.BadMessageException; import org.eclipse.jetty.http.HttpField; import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpScheme; -import org.eclipse.jetty.http.HttpStatus; import org.eclipse.jetty.http.MetaData; +import org.eclipse.jetty.http2.hpack.HpackException.StreamException; import org.eclipse.jetty.util.TypeUtil; import org.hamcrest.Matchers; import org.junit.Assert; @@ -209,7 +207,7 @@ public class HpackDecoderTest MetaData metaData = decoder.decode(buffer); assertThat(decoder.getHpackContext().getDynamicTableSize(),is(0)); - assertThat(metaData.getFields().get(HttpHeader.C_PATH),Matchers.startsWith("This is a very large field")); + assertThat(((MetaData.Request)metaData).getURI().toString(),Matchers.startsWith("This is a very large field")); } @Test @@ -230,4 +228,319 @@ public class HpackDecoderTest } } + + /* 8.1.2.1. Pseudo-Header Fields */ + @Test() + public void test8_1_2_1_PsuedoHeaderFields() + { + // 1:Sends a HEADERS frame that contains a unknown pseudo-header field + MetaDataBuilder mdb = new MetaDataBuilder(4096); + mdb.emit(new HttpField(":unknown","value")); + try + { + mdb.build(); + Assert.fail(); + } + catch(StreamException ex) + { + Assert.assertThat(ex.getMessage(),Matchers.containsString("Unknown pseudo header")); + } + + // 2: Sends a HEADERS frame that contains the pseudo-header field defined for response + mdb = new MetaDataBuilder(4096); + mdb.emit(new HttpField(HttpHeader.C_SCHEME,"http")); + mdb.emit(new HttpField(HttpHeader.C_METHOD,"GET")); + mdb.emit(new HttpField(HttpHeader.C_PATH,"/path")); + mdb.emit(new HttpField(HttpHeader.C_STATUS,"100")); + try + { + mdb.build(); + Assert.fail(); + } + catch(StreamException ex) + { + Assert.assertThat(ex.getMessage(),Matchers.containsString("Request and Response headers")); + } + + // 3: Sends a HEADERS frame that contains a pseudo-header field as trailers + + // 4: Sends a HEADERS frame that contains a pseudo-header field that appears in a header block after a regular header field + mdb = new MetaDataBuilder(4096); + mdb.emit(new HttpField(HttpHeader.C_SCHEME,"http")); + mdb.emit(new HttpField(HttpHeader.C_METHOD,"GET")); + mdb.emit(new HttpField(HttpHeader.C_PATH,"/path")); + mdb.emit(new HttpField("Accept","No Compromise")); + mdb.emit(new HttpField(HttpHeader.C_AUTHORITY,"localhost")); + try + { + mdb.build(); + Assert.fail(); + } + catch(StreamException ex) + { + Assert.assertThat(ex.getMessage(),Matchers.containsString("Pseudo header :authority after fields")); + } + } + + /* + * + -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR. + ✔ 3: Sends a HEADERS frame that contains a pseudo-header field as trailers + + × 4: Sends a HEADERS frame that contains a pseudo-header field that appears in a header block after a regular header field + -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR. + + */ + + + + /* + 8.1.2.2. Connection-Specific Header Fields + [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) + [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [send] HEADERS Frame (length:33, flags:0x05, stream_id:1) + [recv] HEADERS Frame (length:101, flags:0x04, stream_id:1) + [recv] DATA Frame (length:687, flags:0x01, stream_id:1) + [recv] Timeout + × 1: Sends a HEADERS frame that contains the connection-specific header field + -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR. + Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR) + RST_STREAM Frame (Error Code: PROTOCOL_ERROR) + Connection closed + Actual: DATA Frame (length:687, flags:0x01, stream_id:1) + [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) + [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [send] HEADERS Frame (length:44, flags:0x05, stream_id:1) + [recv] HEADERS Frame (length:101, flags:0x04, stream_id:1) + [recv] DATA Frame (length:687, flags:0x01, stream_id:1) + [recv] Timeout + × 2: Sends a HEADERS frame that contains the TE header field with any value other than "trailers" + -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR. + Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR) + RST_STREAM Frame (Error Code: PROTOCOL_ERROR) + Connection closed + Actual: DATA Frame (length:687, flags:0x01, stream_id:1) + + 8.1.2.3. Request Pseudo-Header Fields + [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) + [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [send] HEADERS Frame (length:16, flags:0x05, stream_id:1) + [recv] HEADERS Frame (length:23, flags:0x04, stream_id:1) + [recv] DATA Frame (length:50, flags:0x01, stream_id:1) + [recv] RST_STREAM Frame (length:4, flags:0x00, stream_id:1) + [recv] Timeout + × 1: Sends a HEADERS frame with empty ":path" pseudo-header field + -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR. + Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR) + RST_STREAM Frame (Error Code: PROTOCOL_ERROR) + Connection closed + Actual: DATA Frame (length:50, flags:0x01, stream_id:1) + [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) + [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [send] HEADERS Frame (length:13, flags:0x05, stream_id:1) + [recv] Timeout + × 2: Sends a HEADERS frame that omits ":method" pseudo-header field + -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR. + Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR) + RST_STREAM Frame (Error Code: PROTOCOL_ERROR) + Connection closed + Actual: Timeout + [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) + [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [send] HEADERS Frame (length:14, flags:0x05, stream_id:1) + [recv] HEADERS Frame (length:100, flags:0x04, stream_id:1) + [recv] DATA Frame (length:687, flags:0x01, stream_id:1) + [recv] Timeout + × 3: Sends a HEADERS frame that omits ":scheme" pseudo-header field + -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR. + Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR) + RST_STREAM Frame (Error Code: PROTOCOL_ERROR) + Connection closed + Actual: DATA Frame (length:687, flags:0x01, stream_id:1) + [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) + [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [send] HEADERS Frame (length:14, flags:0x05, stream_id:1) + [recv] GOAWAY Frame (length:20, flags:0x00, stream_id:0) + ✔ 4: Sends a HEADERS frame that omits ":path" pseudo-header field + [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) + [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [send] HEADERS Frame (length:16, flags:0x05, stream_id:1) + [recv] HEADERS Frame (length:101, flags:0x04, stream_id:1) + [recv] DATA Frame (length:687, flags:0x01, stream_id:1) + [recv] Timeout + × 5: Sends a HEADERS frame with duplicated ":method" pseudo-header field + -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR. + Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR) + RST_STREAM Frame (Error Code: PROTOCOL_ERROR) + Connection closed + Actual: DATA Frame (length:687, flags:0x01, stream_id:1) + [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) + [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [send] HEADERS Frame (length:16, flags:0x05, stream_id:1) + [recv] HEADERS Frame (length:101, flags:0x04, stream_id:1) + [recv] DATA Frame (length:687, flags:0x01, stream_id:1) + [recv] Timeout + × 6: Sends a HEADERS frame with duplicated ":scheme" pseudo-header field + -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR. + Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR) + RST_STREAM Frame (Error Code: PROTOCOL_ERROR) + Connection closed + Actual: DATA Frame (length:687, flags:0x01, stream_id:1) + [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) + [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [send] HEADERS Frame (length:18, flags:0x05, stream_id:1) + [recv] HEADERS Frame (length:79, flags:0x05, stream_id:1) + [recv] Timeout + × 7: Sends a HEADERS frame with duplicated ":method" pseudo-header field + -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR. + Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR) + RST_STREAM Frame (Error Code: PROTOCOL_ERROR) + Connection closed + Actual: HEADERS Frame (length:79, flags:0x05, stream_id:1) + + 8.1.2.6. Malformed Requests and Responses + [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) + [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [send] HEADERS Frame (length:18, flags:0x04, stream_id:1) + [send] DATA Frame (length:4, flags:0x01, stream_id:1) + [recv] HEADERS Frame (length:100, flags:0x04, stream_id:1) + [recv] DATA Frame (length:687, flags:0x01, stream_id:1) + [recv] Timeout + × 1: Sends a HEADERS frame with the "content-length" header field which does not equal the DATA frame payload length + -> The endpoint MUST treat this as a stream error of type PROTOCOL_ERROR. + Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR) + RST_STREAM Frame (Error Code: PROTOCOL_ERROR) + Connection closed + Actual: DATA Frame (length:687, flags:0x01, stream_id:1) + [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) + [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [send] HEADERS Frame (length:18, flags:0x04, stream_id:1) + [send] DATA Frame (length:4, flags:0x00, stream_id:1) + [send] DATA Frame (length:4, flags:0x01, stream_id:1) + [recv] HEADERS Frame (length:100, flags:0x04, stream_id:1) + [recv] DATA Frame (length:687, flags:0x01, stream_id:1) + [recv] Timeout + × 2: Sends a HEADERS frame with the "content-length" header field which does not equal the sum of the multiple DATA frames payload length + -> The endpoint MUST treat this as a stream error of type PROTOCOL_ERROR. + Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR) + RST_STREAM Frame (Error Code: PROTOCOL_ERROR) + Connection closed + Actual: DATA Frame (length:687, flags:0x01, stream_id:1) + + 8.2. Server Push + [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) + [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [send] PUSH_PROMISE Frame (length:19, flags:0x04, stream_id:1) + [recv] GOAWAY Frame (length:20, flags:0x00, stream_id:0) + ✔ 1: Sends a PUSH_PROMISE frame + + HPACK: Header Compression for HTTP/2 + 2. Compression Process Overview + 2.3. Indexing Tables + 2.3.3. Index Address Space + [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) + [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [send] HEADERS Frame (length:16, flags:0x05, stream_id:1) + [recv] GOAWAY Frame (length:20, flags:0x00, stream_id:0) + [recv] Connection closed + ✔ 1: Sends a header field representation with invalid index + + 4. Dynamic Table Management + 4.2. Maximum Table Size + [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) + [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [send] HEADERS Frame (length:16, flags:0x05, stream_id:1) + [recv] HEADERS Frame (length:101, flags:0x04, stream_id:1) + [recv] DATA Frame (length:687, flags:0x01, stream_id:1) + [recv] Timeout + × 1: Sends a dynamic table size update at the end of header block + -> The endpoint MUST treat this as a decoding error. + Expected: GOAWAY Frame (Error Code: COMPRESSION_ERROR) + Connection closed + Actual: DATA Frame (length:687, flags:0x01, stream_id:1) + + 5. Primitive Type Representations + 5.2. String Literal Representation + [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) + [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [send] HEADERS Frame (length:27, flags:0x05, stream_id:1) + [recv] HEADERS Frame (length:101, flags:0x04, stream_id:1) + [recv] DATA Frame (length:687, flags:0x01, stream_id:1) + [recv] Timeout + × 1: Sends a Huffman-encoded string literal representation with padding longer than 7 bits + -> The endpoint MUST treat this as a decoding error. + Expected: GOAWAY Frame (Error Code: COMPRESSION_ERROR) + Connection closed + Actual: DATA Frame (length:687, flags:0x01, stream_id:1) + [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) + [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [send] HEADERS Frame (length:26, flags:0x05, stream_id:1) + [recv] HEADERS Frame (length:101, flags:0x04, stream_id:1) + [recv] DATA Frame (length:687, flags:0x01, stream_id:1) + [recv] Timeout + × 2: Sends a Huffman-encoded string literal representation padded by zero + -> The endpoint MUST treat this as a decoding error. + Expected: GOAWAY Frame (Error Code: COMPRESSION_ERROR) + Connection closed + Actual: DATA Frame (length:687, flags:0x01, stream_id:1) + [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) + [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) + [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) + [send] HEADERS Frame (length:28, flags:0x05, stream_id:1) + [recv] GOAWAY Frame (length:20, flags:0x00, stream_id:0) + [recv] Connection closed + ✔ 3: Sends a Huffman-encoded string literal representation containing the EOS symbol + + */ + } diff --git a/jetty-http2/http2-hpack/src/test/resources/jetty-logging.properties b/jetty-http2/http2-hpack/src/test/resources/jetty-logging.properties index e40e8e43ce1..d33a7c32778 100644 --- a/jetty-http2/http2-hpack/src/test/resources/jetty-logging.properties +++ b/jetty-http2/http2-hpack/src/test/resources/jetty-logging.properties @@ -1,3 +1,3 @@ org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.StdErrLog org.eclipse.jetty.http2.LEVEL=INFO -org.eclipse.jetty.http2.hpack.LEVEL=INFO +org.eclipse.jetty.http2.hpack.LEVEL=DEBUG From 6de77d26e2f2e61e227e2e3d02ef19711e74dbe4 Mon Sep 17 00:00:00 2001 From: Lachlan Roberts Date: Wed, 18 Jul 2018 11:27:19 +1000 Subject: [PATCH 17/48] Issue #2706 - Resource Service Incorrectly Returning 404 Flush response buffer in places where the response needs to be committed. Removed if statement preventing HEAD requests processing conditional headers. Added two new test cases which failed before the changes and should now pass. Signed-off-by: Lachlan Roberts --- .../eclipse/jetty/server/ResourceService.java | 140 +++++++++--------- .../jetty/server/handler/ResourceHandler.java | 11 +- .../server/handler/ResourceHandlerTest.java | 30 ++++ 3 files changed, 107 insertions(+), 74 deletions(-) diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/ResourceService.java b/jetty-server/src/main/java/org/eclipse/jetty/server/ResourceService.java index 73c6b1be12e..92363e9eb0b 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/ResourceService.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/ResourceService.java @@ -245,14 +245,14 @@ public class ResourceService notFound(request,response); return; } - + // Directory? if (content.getResource().isDirectory()) { sendWelcome(content,pathInContext,endsWithSlash,included,request,response); return; } - + // Strip slash? if (!included && endsWithSlash && pathInContext.length()>1) { @@ -510,95 +510,95 @@ public class ResourceService ifms=request.getHeader(HttpHeader.IF_MODIFIED_SINCE.asString()); ifums=request.getDateHeader(HttpHeader.IF_UNMODIFIED_SINCE.asString()); } - - if (!HttpMethod.HEAD.is(request.getMethod())) - { - if (_etags) - { - String etag=content.getETagValue(); - if (ifm!=null) - { - boolean match=false; - if (etag!=null) - { - QuotedCSV quoted = new QuotedCSV(true,ifm); - for (String tag : quoted) - { - if (CompressedContentFormat.tagEquals(etag, tag)) - { - match=true; - break; - } - } - } - if (!match) - { - response.setStatus(HttpServletResponse.SC_PRECONDITION_FAILED); - return false; - } - } - - if (ifnm!=null && etag!=null) + if (_etags) + { + String etag=content.getETagValue(); + if (ifm!=null) + { + boolean match=false; + if (etag!=null) { - // Handle special case of exact match OR gzip exact match - if (CompressedContentFormat.tagEquals(etag, ifnm) && ifnm.indexOf(',')<0) - { - response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); - response.setHeader(HttpHeader.ETAG.asString(),ifnm); - return false; - } - - // Handle list of tags - QuotedCSV quoted = new QuotedCSV(true,ifnm); + QuotedCSV quoted = new QuotedCSV(true,ifm); for (String tag : quoted) { if (CompressedContentFormat.tagEquals(etag, tag)) { - response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); - response.setHeader(HttpHeader.ETAG.asString(),tag); - return false; + match=true; + break; } } - - // If etag requires content to be served, then do not check if-modified-since - return true; + } + + if (!match) + { + response.setStatus(HttpServletResponse.SC_PRECONDITION_FAILED); + response.flushBuffer(); + return false; } } - - // Handle if modified since - if (ifms!=null) + + if (ifnm!=null && etag!=null) { - //Get jetty's Response impl - String mdlm=content.getLastModifiedValue(); - if (mdlm!=null && ifms.equals(mdlm)) + // Handle special case of exact match OR gzip exact match + if (CompressedContentFormat.tagEquals(etag, ifnm) && ifnm.indexOf(',')<0) { response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); - if (_etags) - response.setHeader(HttpHeader.ETAG.asString(),content.getETagValue()); + response.setHeader(HttpHeader.ETAG.asString(),ifnm); response.flushBuffer(); return false; } - long ifmsl=request.getDateHeader(HttpHeader.IF_MODIFIED_SINCE.asString()); - if (ifmsl!=-1 && content.getResource().lastModified()/1000 <= ifmsl/1000) - { - response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); - if (_etags) - response.setHeader(HttpHeader.ETAG.asString(),content.getETagValue()); - response.flushBuffer(); - return false; + // Handle list of tags + QuotedCSV quoted = new QuotedCSV(true,ifnm); + for (String tag : quoted) + { + if (CompressedContentFormat.tagEquals(etag, tag)) + { + response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); + response.setHeader(HttpHeader.ETAG.asString(),tag); + response.flushBuffer(); + return false; + } } + + // If etag requires content to be served, then do not check if-modified-since + return true; } + } - // Parse the if[un]modified dates and compare to resource - if (ifums!=-1 && content.getResource().lastModified()/1000 > ifums/1000) + // Handle if modified since + if (ifms!=null) + { + //Get jetty's Response impl + String mdlm=content.getLastModifiedValue(); + if (mdlm!=null && ifms.equals(mdlm)) { - response.sendError(HttpServletResponse.SC_PRECONDITION_FAILED); + response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); + if (_etags) + response.setHeader(HttpHeader.ETAG.asString(),content.getETagValue()); + response.flushBuffer(); return false; } + long ifmsl=request.getDateHeader(HttpHeader.IF_MODIFIED_SINCE.asString()); + if (ifmsl!=-1 && content.getResource().lastModified()/1000 <= ifmsl/1000) + { + response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); + if (_etags) + response.setHeader(HttpHeader.ETAG.asString(),content.getETagValue()); + response.flushBuffer(); + return false; + } } + + // Parse the if[un]modified dates and compare to resource + if (ifums!=-1 && content.getResource().lastModified()/1000 > ifums/1000) + { + response.sendError(HttpServletResponse.SC_PRECONDITION_FAILED); + return false; + } + } catch(IllegalArgumentException iae) { @@ -606,6 +606,7 @@ public class ResourceService response.sendError(400, iae.getMessage()); throw iae; } + return true; } @@ -649,7 +650,7 @@ public class ResourceService final long content_length = content.getContentLengthValue(); // Get the output stream (or writer) - OutputStream out =null; + OutputStream out; boolean written; try { @@ -687,6 +688,8 @@ public class ResourceService BufferUtil.writeTo(buffer,out); else content.getResource().writeTo(out,0,content_length); + + response.flushBuffer(); } // else do a bypass write else @@ -745,6 +748,7 @@ public class ResourceService response.setHeader(HttpHeader.CONTENT_RANGE.asString(), InclusiveByteRange.to416HeaderRangeString(content_length)); content.getResource().writeTo(out,0,content_length); + response.flushBuffer(); return true; } @@ -761,6 +765,7 @@ public class ResourceService response.setHeader(HttpHeader.CONTENT_RANGE.asString(), singleSatisfiableRange.toHeaderRangeString(content_length)); content.getResource().writeTo(out,singleSatisfiableRange.getFirst(),singleLength); + response.flushBuffer(); return true; } @@ -843,6 +848,7 @@ public class ResourceService if (in!=null) in.close(); multi.close(); + response.flushBuffer(); } return true; } diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ResourceHandler.java b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ResourceHandler.java index 3b82750588b..da6592c76dc 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ResourceHandler.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ResourceHandler.java @@ -269,14 +269,11 @@ public class ResourceHandler extends HandlerWrapper implements ResourceFactory,W if (baseRequest.isHandled()) return; - if (!HttpMethod.GET.is(request.getMethod())) + if (!HttpMethod.GET.is(request.getMethod()) && !HttpMethod.HEAD.is(request.getMethod())) { - if (!HttpMethod.HEAD.is(request.getMethod())) - { - // try another handler - super.handle(target,baseRequest,request,response); - return; - } + // try another handler + super.handle(target,baseRequest,request,response); + return; } _resourceService.doGet(request,response); diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/handler/ResourceHandlerTest.java b/jetty-server/src/test/java/org/eclipse/jetty/server/handler/ResourceHandlerTest.java index 91d0ededdd1..59156ca3a26 100644 --- a/jetty-server/src/test/java/org/eclipse/jetty/server/handler/ResourceHandlerTest.java +++ b/jetty-server/src/test/java/org/eclipse/jetty/server/handler/ResourceHandlerTest.java @@ -40,6 +40,7 @@ import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.nio.file.Files; +import org.eclipse.jetty.http.HttpStatus; import org.eclipse.jetty.http.HttpTester; import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.HttpConfiguration; @@ -305,4 +306,33 @@ public class ResourceHandlerTest } } + + + + @Test + public void testConditionalGetResponseCommitted() throws Exception + { + _config.setOutputBufferSize(8); + _resourceHandler.setEtags(true); + + HttpTester.Response response = HttpTester.parseResponse(_local.getResponse("GET /resource/big.txt HTTP/1.0\r\n" + + "If-Match: \"NO_MATCH\"\r\n" + + "\r\n")); + + assertThat(response.getStatus(),equalTo(HttpStatus.PRECONDITION_FAILED_412)); + } + + + @Test + public void testConditionalHeadResponseCommitted() throws Exception + { + _config.setOutputBufferSize(8); + _resourceHandler.setEtags(true); + + HttpTester.Response response = HttpTester.parseResponse(_local.getResponse("HEAD /resource/big.txt HTTP/1.0\r\n" + + "If-Match: \"NO_MATCH\"\r\n" + + "\r\n")); + + assertThat(response.getStatus(),equalTo(HttpStatus.PRECONDITION_FAILED_412)); + } } From 42844f2c5fd70d69645763b69c15db55785421f1 Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Wed, 18 Jul 2018 11:08:05 +0200 Subject: [PATCH 18/48] WIP Signed-off-by: Greg Wilkins --- .../jetty/http2/hpack/MetaDataBuilder.java | 16 +++++++++------- .../org/eclipse/jetty/http2/hpack/HpackTest.java | 15 +++++++-------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java index a53b70de97c..dc65c4fcc9e 100644 --- a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java +++ b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java @@ -236,27 +236,29 @@ public class MetaDataBuilder if (_request && _response) throw new HpackException.StreamException("Request and Response headers"); + + HttpFields fields = _fields; try { - HttpFields fields = _fields; - _fields = new HttpFields(Math.max(10,fields.size()+5)); - - if (_method!=null || _path!=null || _authority!=null || _scheme!=null) + if (_request) return new MetaData.Request(_method,_scheme,_authority,_path,HttpVersion.HTTP_2,fields,_contentLength); - if (_status>0) + if (_response) return new MetaData.Response(HttpVersion.HTTP_2,_status,fields,_contentLength); return new MetaData(HttpVersion.HTTP_2,fields,_contentLength); } finally { - _status=0; + _fields = new HttpFields(Math.max(10,fields.size()+5)); + _request=false; + _response=false; + _status=-1; _method=null; _scheme=null; _authority=null; _path=null; _size=0; - _contentLength=Long.MIN_VALUE; + _contentLength=Long.MIN_VALUE; } } diff --git a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackTest.java b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackTest.java index 9c7d2a24eb5..2f3f461de31 100644 --- a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackTest.java +++ b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackTest.java @@ -18,15 +18,18 @@ package org.eclipse.jetty.http2.hpack; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.Matchers.containsString; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; + import java.nio.ByteBuffer; import java.util.concurrent.TimeUnit; -import org.eclipse.jetty.http.BadMessageException; import org.eclipse.jetty.http.DateGenerator; import org.eclipse.jetty.http.HttpField; import org.eclipse.jetty.http.HttpFields; import org.eclipse.jetty.http.HttpHeader; -import org.eclipse.jetty.http.HttpStatus; import org.eclipse.jetty.http.HttpVersion; import org.eclipse.jetty.http.MetaData; import org.eclipse.jetty.http.MetaData.Response; @@ -35,10 +38,6 @@ import org.eclipse.jetty.util.BufferUtil; import org.junit.Assert; import org.junit.Test; -import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; - public class HpackTest { final static HttpField ServerJetty = new PreEncodedHttpField(HttpHeader.SERVER,"jetty"); @@ -131,9 +130,9 @@ public class HpackTest decoder.decode(buffer); Assert.fail(); } - catch(BadMessageException e) + catch(HpackException.SessionException e) { - assertEquals(HttpStatus.REQUEST_HEADER_FIELDS_TOO_LARGE_431,e.getCode()); + assertThat(e.getMessage(),containsString("Header too large")); } } From 9f5a7d33b0613d2602ab9056d22a3038c7bb5916 Mon Sep 17 00:00:00 2001 From: Simone Bordet Date: Wed, 18 Jul 2018 12:15:14 +0200 Subject: [PATCH 19/48] Fixes #2730 - Limit concurrent HTTP/2 pushed resources. Using the same mechanism we use to limit max concurrent streams. Signed-off-by: Simone Bordet --- .../jetty/http2/client/HTTP2Client.java | 12 ++ .../client/HTTP2ClientConnectionFactory.java | 5 +- .../http2/client/MaxPushedStreamsTest.java | 130 ++++++++++++++++++ 3 files changed, 145 insertions(+), 2 deletions(-) create mode 100644 jetty-http2/http2-client/src/test/java/org/eclipse/jetty/http2/client/MaxPushedStreamsTest.java diff --git a/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2Client.java b/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2Client.java index 865379c68ac..195b836ca07 100644 --- a/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2Client.java +++ b/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2Client.java @@ -130,6 +130,7 @@ public class HTTP2Client extends ContainerLifeCycle private List protocols = Arrays.asList("h2", "h2-17", "h2-16", "h2-15", "h2-14"); private int initialSessionRecvWindow = 16 * 1024 * 1024; private int initialStreamRecvWindow = 8 * 1024 * 1024; + private int maxConcurrentPushedStreams = 32; private int maxSettingsKeys = SettingsFrame.DEFAULT_MAX_KEYS; private FlowControlStrategy.Factory flowControlStrategyFactory = () -> new BufferingFlowControlStrategy(0.5F); @@ -336,6 +337,17 @@ public class HTTP2Client extends ContainerLifeCycle this.initialStreamRecvWindow = initialStreamRecvWindow; } + @ManagedAttribute("The max number of concurrent pushed streams") + public int getMaxConcurrentPushedStreams() + { + return maxConcurrentPushedStreams; + } + + public void setMaxConcurrentPushedStreams(int maxConcurrentPushedStreams) + { + this.maxConcurrentPushedStreams = maxConcurrentPushedStreams; + } + @ManagedAttribute("The max number of keys in all SETTINGS frames") public int getMaxSettingsKeys() { diff --git a/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2ClientConnectionFactory.java b/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2ClientConnectionFactory.java index 87aaee0d837..23b7e2256b4 100644 --- a/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2ClientConnectionFactory.java +++ b/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2ClientConnectionFactory.java @@ -18,7 +18,6 @@ package org.eclipse.jetty.http2.client; -import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.concurrent.Executor; @@ -53,7 +52,7 @@ public class HTTP2ClientConnectionFactory implements ClientConnectionFactory private final Connection.Listener connectionListener = new ConnectionListener(); @Override - public Connection newConnection(EndPoint endPoint, Map context) throws IOException + public Connection newConnection(EndPoint endPoint, Map context) { HTTP2Client client = (HTTP2Client)context.get(CLIENT_CONTEXT_KEY); ByteBufferPool byteBufferPool = (ByteBufferPool)context.get(BYTE_BUFFER_POOL_CONTEXT_KEY); @@ -66,6 +65,7 @@ public class HTTP2ClientConnectionFactory implements ClientConnectionFactory Generator generator = new Generator(byteBufferPool); FlowControlStrategy flowControl = client.getFlowControlStrategyFactory().newFlowControlStrategy(); HTTP2ClientSession session = new HTTP2ClientSession(scheduler, endPoint, generator, listener, flowControl); + session.setMaxRemoteStreams(client.getMaxConcurrentPushedStreams()); Parser parser = new Parser(byteBufferPool, session, 4096, 8192); parser.setMaxSettingsKeys(client.getMaxSettingsKeys()); @@ -111,6 +111,7 @@ public class HTTP2ClientConnectionFactory implements ClientConnectionFactory if (settings == null) settings = new HashMap<>(); settings.computeIfAbsent(SettingsFrame.INITIAL_WINDOW_SIZE, k -> client.getInitialStreamRecvWindow()); + settings.computeIfAbsent(SettingsFrame.MAX_CONCURRENT_STREAMS, k -> client.getMaxConcurrentPushedStreams()); PrefaceFrame prefaceFrame = new PrefaceFrame(); SettingsFrame settingsFrame = new SettingsFrame(settings, false); diff --git a/jetty-http2/http2-client/src/test/java/org/eclipse/jetty/http2/client/MaxPushedStreamsTest.java b/jetty-http2/http2-client/src/test/java/org/eclipse/jetty/http2/client/MaxPushedStreamsTest.java new file mode 100644 index 00000000000..be26c7a8955 --- /dev/null +++ b/jetty-http2/http2-client/src/test/java/org/eclipse/jetty/http2/client/MaxPushedStreamsTest.java @@ -0,0 +1,130 @@ +// +// ======================================================================== +// Copyright (c) 1995-2018 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.http2.client; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.function.BiFunction; +import java.util.function.BinaryOperator; +import java.util.stream.IntStream; + +import org.eclipse.jetty.http.HttpFields; +import org.eclipse.jetty.http.HttpStatus; +import org.eclipse.jetty.http.HttpVersion; +import org.eclipse.jetty.http.MetaData; +import org.eclipse.jetty.http2.ErrorCode; +import org.eclipse.jetty.http2.HTTP2Session; +import org.eclipse.jetty.http2.api.Session; +import org.eclipse.jetty.http2.api.Stream; +import org.eclipse.jetty.http2.api.server.ServerSessionListener; +import org.eclipse.jetty.http2.frames.DataFrame; +import org.eclipse.jetty.http2.frames.HeadersFrame; +import org.eclipse.jetty.http2.frames.PushPromiseFrame; +import org.eclipse.jetty.http2.frames.ResetFrame; +import org.eclipse.jetty.util.BufferUtil; +import org.eclipse.jetty.util.Callback; +import org.eclipse.jetty.util.FuturePromise; +import org.eclipse.jetty.util.Promise; +import org.junit.Assert; +import org.junit.Test; + +public class MaxPushedStreamsTest extends AbstractTest +{ + @Test + public void testMaxPushedStreams() throws Exception + { + int maxPushed = 2; + + CountDownLatch resetLatch = new CountDownLatch(1); + start(new ServerSessionListener.Adapter() + { + @Override + public Stream.Listener onNewStream(Stream stream, HeadersFrame frame) + { + // Trick the server into thinking it can push unlimited streams. + ((HTTP2Session)stream.getSession()).setMaxLocalStreams(-1); + + BiFunction, Stream, List> add = (l, s) -> { l.add(s); return l; }; + BinaryOperator> addAll = (l1, l2) -> { l1.addAll(l2); return l1; }; + CompletableFuture> result = CompletableFuture.completedFuture(new ArrayList<>()); + // Push maxPushed resources... + IntStream.range(0, maxPushed) + .mapToObj(i -> new PushPromiseFrame(stream.getId(), 0, newRequest("GET", "/push_" + i, new HttpFields()))) + .map(pushFrame -> + { + Promise.Completable promise = new Promise.Completable<>(); + stream.push(pushFrame, promise, new Stream.Listener.Adapter()); + return promise; + }) + // ... wait for the pushed streams... + .reduce(result, (cfList, cfStream) -> cfList.thenCombine(cfStream, add), + (cfList1, cfList2) -> cfList1.thenCombine(cfList2, addAll)) + // ... then push one extra stream, the client must reject it... + .thenApply(streams -> + { + PushPromiseFrame extraPushFrame = new PushPromiseFrame(stream.getId(), 0, newRequest("GET", "/push_extra", new HttpFields())); + FuturePromise extraPromise = new FuturePromise<>(); + stream.push(extraPushFrame, extraPromise, new Stream.Listener.Adapter() + { + @Override + public void onReset(Stream stream, ResetFrame frame) + { + Assert.assertEquals(ErrorCode.REFUSED_STREAM_ERROR.code, frame.getError()); + resetLatch.countDown(); + } + }); + return streams; + }) + // ... then send the data for the valid pushed streams... + .thenAccept(streams -> streams.forEach(pushedStream -> + { + DataFrame data = new DataFrame(pushedStream.getId(), BufferUtil.EMPTY_BUFFER, true); + pushedStream.data(data, Callback.NOOP); + })) + // ... then send the response. + .thenRun(() -> + { + MetaData.Response response = new MetaData.Response(HttpVersion.HTTP_2, HttpStatus.OK_200, new HttpFields()); + stream.headers(new HeadersFrame(stream.getId(), response, null, true), Callback.NOOP); + }); + return null; + } + }); + client.setMaxConcurrentPushedStreams(maxPushed); + + Session session = newClient(new Session.Listener.Adapter()); + MetaData.Request request = newRequest("GET", new HttpFields()); + CountDownLatch responseLatch = new CountDownLatch(1); + session.newStream(new HeadersFrame(request, null, true), new Promise.Adapter<>(), new Stream.Listener.Adapter() + { + @Override + public void onHeaders(Stream stream, HeadersFrame frame) + { + if (frame.isEndStream()) + responseLatch.countDown(); + } + }); + + Assert.assertTrue(resetLatch.await(5, TimeUnit.SECONDS)); + Assert.assertTrue(responseLatch.await(5, TimeUnit.SECONDS)); + } +} From 98ea112fd38155797acda7698be6bf5f26ac7dde Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Wed, 18 Jul 2018 12:26:55 +0200 Subject: [PATCH 20/48] wip Signed-off-by: Greg Wilkins --- .../jetty/http2/parser/HeaderBlockParser.java | 50 ++++++++++++++++--- .../jetty/http2/hpack/HpackDecoder.java | 2 +- .../jetty/http2/hpack/HpackException.java | 16 +++++- .../jetty/http2/hpack/MetaDataBuilder.java | 3 -- .../jetty/http2/hpack/HpackDecoderTest.java | 2 +- 5 files changed, 58 insertions(+), 15 deletions(-) diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/HeaderBlockParser.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/HeaderBlockParser.java index f9a048d8471..922388be2a1 100644 --- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/HeaderBlockParser.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/HeaderBlockParser.java @@ -20,8 +20,11 @@ package org.eclipse.jetty.http2.parser; import java.nio.ByteBuffer; +import org.eclipse.jetty.http.BadMessageException; import org.eclipse.jetty.http.MetaData; import org.eclipse.jetty.http2.hpack.HpackDecoder; +import org.eclipse.jetty.http2.hpack.HpackException.SessionException; +import org.eclipse.jetty.http2.hpack.HpackException.StreamException; import org.eclipse.jetty.io.ByteBufferPool; import org.eclipse.jetty.util.BufferUtil; @@ -72,17 +75,48 @@ public class HeaderBlockParser toDecode = buffer; } - MetaData result = hpackDecoder.decode(toDecode); - - buffer.limit(limit); - - if (blockBuffer != null) + try { - byteBufferPool.release(blockBuffer); - blockBuffer = null; + MetaData metadata = hpackDecoder.decode(toDecode); + + if (metadata instanceof MetaData.Request) + { + // TODO this must be an initial HEADERs frame received by the server OR + // TODO a push promise received by the client. + // TODO this must not be a trailers frame + } + else if (metadata instanceof MetaData.Response) + { + // TODO this must be an initial HEADERs frame received by the client + // TODO this must not be a trailers frame + } + else + { + // TODO this must be a trailers frame + } + + return metadata; } + catch(StreamException ex) + { + // TODO reset the stream + throw new BadMessageException("TODO"); + } + catch(SessionException ex) + { + // TODO reset the session + throw new BadMessageException("TODO"); + } + finally + { + buffer.limit(limit); - return result; + if (blockBuffer != null) + { + byteBufferPool.release(blockBuffer); + blockBuffer = null; + } + } } } } diff --git a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackDecoder.java b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackDecoder.java index 5526eb44772..74b8b87deb9 100644 --- a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackDecoder.java +++ b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackDecoder.java @@ -66,7 +66,7 @@ public class HpackDecoder _localMaxDynamicTableSize=localMaxdynamciTableSize; } - public MetaData decode(ByteBuffer buffer) throws HpackException + public MetaData decode(ByteBuffer buffer) throws HpackException.SessionException, HpackException.StreamException { if (LOG.isDebugEnabled()) LOG.debug(String.format("CtxTbl[%x] decoding %d octets",_context.hashCode(),buffer.remaining())); diff --git a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackException.java b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackException.java index 287e02f2e13..78516c73bd2 100644 --- a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackException.java +++ b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackException.java @@ -18,15 +18,22 @@ package org.eclipse.jetty.http2.hpack; -import java.io.IOException; -public abstract class HpackException extends RuntimeException +@SuppressWarnings("serial") +public abstract class HpackException extends Exception { HpackException(String messageFormat, Object... args) { super(String.format(messageFormat, args)); } + /** + * A Stream HPACK exception. + *

Stream exceptions are not fatal to the connection and the + * hpack state is complete and able to continue handling other + * decoding/encoding for the session. + *

+ */ public static class StreamException extends HpackException { StreamException(String messageFormat, Object... args) @@ -35,6 +42,11 @@ public abstract class HpackException extends RuntimeException } } + /** + * A Session HPACK Exception. + *

Session exceptions are fatal for the stream and the HPACK + * state is unable to decode/encode further.

+ */ public static class SessionException extends HpackException { SessionException(String messageFormat, Object... args) diff --git a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java index dc65c4fcc9e..3a01e8a593a 100644 --- a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java +++ b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java @@ -228,10 +228,7 @@ public class MetaDataBuilder public MetaData build() throws HpackException.StreamException { if (_streamException!=null) - { - _streamException.addSuppressed(new Throwable()); throw _streamException; - } if (_request && _response) throw new HpackException.StreamException("Request and Response headers"); diff --git a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java index dd861890d7e..1e74d100fd7 100644 --- a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java +++ b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java @@ -231,7 +231,7 @@ public class HpackDecoderTest /* 8.1.2.1. Pseudo-Header Fields */ @Test() - public void test8_1_2_1_PsuedoHeaderFields() + public void test8_1_2_1_PsuedoHeaderFields() throws Exception { // 1:Sends a HEADERS frame that contains a unknown pseudo-header field MetaDataBuilder mdb = new MetaDataBuilder(4096); From 06303492f9710988e7813ee2a9f4652b19cd1382 Mon Sep 17 00:00:00 2001 From: Simone Bordet Date: Wed, 18 Jul 2018 17:43:49 +0200 Subject: [PATCH 21/48] There already exist JDK 12 early access builds. Signed-off-by: Simone Bordet --- .../src/main/config/modules/alpn-impl/alpn-12.mod | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 jetty-alpn/jetty-alpn-server/src/main/config/modules/alpn-impl/alpn-12.mod diff --git a/jetty-alpn/jetty-alpn-server/src/main/config/modules/alpn-impl/alpn-12.mod b/jetty-alpn/jetty-alpn-server/src/main/config/modules/alpn-impl/alpn-12.mod new file mode 100644 index 00000000000..689601a4197 --- /dev/null +++ b/jetty-alpn/jetty-alpn-server/src/main/config/modules/alpn-impl/alpn-12.mod @@ -0,0 +1,4 @@ +DO NOT EDIT - See: https://www.eclipse.org/jetty/documentation/current/startup-modules.html + +[depend] +alpn-impl/alpn-9 From 648554ad5c279931ce8a7b478c11cce0da84a34a Mon Sep 17 00:00:00 2001 From: Lachlan Roberts Date: Thu, 19 Jul 2018 12:46:18 +1000 Subject: [PATCH 22/48] Issue #2706 - Resource Service Incorrectly Returning 404 Removed response.flushBuffer() after writing to fix DefaultServletTest.testFiltered() Signed-off-by: Lachlan Roberts --- .../src/main/java/org/eclipse/jetty/server/ResourceService.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/ResourceService.java b/jetty-server/src/main/java/org/eclipse/jetty/server/ResourceService.java index 92363e9eb0b..328488dd095 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/ResourceService.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/ResourceService.java @@ -688,8 +688,6 @@ public class ResourceService BufferUtil.writeTo(buffer,out); else content.getResource().writeTo(out,0,content_length); - - response.flushBuffer(); } // else do a bypass write else From fa46013cf71c1bf1ccfd2ae17eda38396539f723 Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Thu, 19 Jul 2018 12:24:24 +0200 Subject: [PATCH 23/48] 8.1.2.2 Signed-off-by: Greg Wilkins --- .../jetty/http2/hpack/MetaDataBuilder.java | 6 +- .../jetty/http2/hpack/HpackDecoderTest.java | 84 +++++++++---------- 2 files changed, 44 insertions(+), 46 deletions(-) diff --git a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java index 3a01e8a593a..e526f78bebd 100644 --- a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java +++ b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java @@ -169,8 +169,10 @@ public class MetaDataBuilder break; case CONNECTION: - // TODO should other connection specific fields be listed here? - streamException("Connection specific field %s", header); + if ("TE".equalsIgnoreCase(value)) + _fields.add(field); + else + streamException("Connection specific field %s", header); break; default: diff --git a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java index 1e74d100fd7..f53490c0e4b 100644 --- a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java +++ b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java @@ -282,51 +282,47 @@ public class HpackDecoderTest } } - /* - * - -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR. - ✔ 3: Sends a HEADERS frame that contains a pseudo-header field as trailers - - × 4: Sends a HEADERS frame that contains a pseudo-header field that appears in a header block after a regular header field - -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR. - - */ - - - - /* - 8.1.2.2. Connection-Specific Header Fields - [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) - [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [send] HEADERS Frame (length:33, flags:0x05, stream_id:1) - [recv] HEADERS Frame (length:101, flags:0x04, stream_id:1) - [recv] DATA Frame (length:687, flags:0x01, stream_id:1) - [recv] Timeout - × 1: Sends a HEADERS frame that contains the connection-specific header field - -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR. - Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR) - RST_STREAM Frame (Error Code: PROTOCOL_ERROR) - Connection closed - Actual: DATA Frame (length:687, flags:0x01, stream_id:1) - [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) - [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [send] HEADERS Frame (length:44, flags:0x05, stream_id:1) - [recv] HEADERS Frame (length:101, flags:0x04, stream_id:1) - [recv] DATA Frame (length:687, flags:0x01, stream_id:1) - [recv] Timeout - × 2: Sends a HEADERS frame that contains the TE header field with any value other than "trailers" - -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR. - Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR) - RST_STREAM Frame (Error Code: PROTOCOL_ERROR) - Connection closed - Actual: DATA Frame (length:687, flags:0x01, stream_id:1) + /* 8.1.2.2. Connection-Specific Header Fields */ + @Test() + public void test8_1_2_2_ConnectionSpecificHeaderFields() throws Exception + { + MetaDataBuilder mdb; + // 1: Sends a HEADERS frame that contains the connection-specific header field + mdb = new MetaDataBuilder(4096); + mdb.emit(new HttpField(HttpHeader.CONNECTION,"value")); + try + { + mdb.build(); + Assert.fail(); + } + catch(StreamException ex) + { + Assert.assertThat(ex.getMessage(),Matchers.containsString("Connection specific field Connection")); + } + + // 2: Sends a HEADERS frame that contains the TE header field with any value other than "trailers" + mdb = new MetaDataBuilder(4096); + mdb.emit(new HttpField(HttpHeader.TE,"not_trailers")); + try + { + mdb.build(); + Assert.fail(); + } + catch(StreamException ex) + { + Assert.assertThat(ex.getMessage(),Matchers.containsString("Unsupported TE value not_trailers")); + } + + + mdb = new MetaDataBuilder(4096); + mdb.emit(new HttpField(HttpHeader.CONNECTION,"TE")); + mdb.emit(new HttpField(HttpHeader.TE,"trailers")); + Assert.assertNotNull(mdb.build()); + } + + + /* 8.1.2.3. Request Pseudo-Header Fields [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) From 971ca22367f9b7a182d61a1460f178de42c783e0 Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Thu, 19 Jul 2018 12:50:54 +0200 Subject: [PATCH 24/48] 8.1.2.3 Signed-off-by: Greg Wilkins --- .../jetty/http2/hpack/MetaDataBuilder.java | 20 +- .../jetty/http2/hpack/HpackDecoderTest.java | 212 ++++++++++-------- 2 files changed, 133 insertions(+), 99 deletions(-) diff --git a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java index e526f78bebd..74cc77da705 100644 --- a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java +++ b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java @@ -152,7 +152,12 @@ public class MetaDataBuilder case C_PATH: if(checkPseudoHeader(header, _path)) - _path = value; + { + if (value!=null && value.length()>0) + _path = value; + else + streamException("No Path"); + } _request = true; break; @@ -230,8 +235,11 @@ public class MetaDataBuilder public MetaData build() throws HpackException.StreamException { if (_streamException!=null) + { + _streamException.addSuppressed(new Throwable()); throw _streamException; - + } + if (_request && _response) throw new HpackException.StreamException("Request and Response headers"); @@ -240,7 +248,15 @@ public class MetaDataBuilder try { if (_request) + { + if (_method==null) + throw new HpackException.StreamException("No Method"); + if (_scheme==null) + throw new HpackException.StreamException("No Scheme"); + if (_path==null) + throw new HpackException.StreamException("No Path"); return new MetaData.Request(_method,_scheme,_authority,_path,HttpVersion.HTTP_2,fields,_contentLength); + } if (_response) return new MetaData.Response(HttpVersion.HTTP_2,_status,fields,_contentLength); diff --git a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java index f53490c0e4b..e6241d288d4 100644 --- a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java +++ b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java @@ -282,7 +282,6 @@ public class HpackDecoderTest } } - /* 8.1.2.2. Connection-Specific Header Fields */ @Test() public void test8_1_2_2_ConnectionSpecificHeaderFields() throws Exception { @@ -321,105 +320,124 @@ public class HpackDecoderTest Assert.assertNotNull(mdb.build()); } + + @Test() + public void test8_1_2_3_RequestPseudoHeaderFields() throws Exception + { + MetaDataBuilder mdb; + + mdb = new MetaDataBuilder(4096); + mdb.emit(new HttpField(HttpHeader.C_METHOD,"GET")); + mdb.emit(new HttpField(HttpHeader.C_SCHEME,"http")); + mdb.emit(new HttpField(HttpHeader.C_AUTHORITY,"localhost:8080")); + mdb.emit(new HttpField(HttpHeader.C_PATH,"/")); + Assert.assertThat(mdb.build(),Matchers.instanceOf(MetaData.Request.class)); + + + // 1: Sends a HEADERS frame with empty ":path" pseudo-header field + mdb = new MetaDataBuilder(4096); + mdb = new MetaDataBuilder(4096); + mdb.emit(new HttpField(HttpHeader.C_METHOD,"GET")); + mdb.emit(new HttpField(HttpHeader.C_SCHEME,"http")); + mdb.emit(new HttpField(HttpHeader.C_AUTHORITY,"localhost:8080")); + mdb.emit(new HttpField(HttpHeader.C_PATH,"")); + try + { + mdb.build(); + Assert.fail(); + } + catch(StreamException ex) + { + Assert.assertThat(ex.getMessage(),Matchers.containsString("No Path")); + } + + // 2: Sends a HEADERS frame that omits ":method" pseudo-header field + mdb = new MetaDataBuilder(4096); + mdb.emit(new HttpField(HttpHeader.C_SCHEME,"http")); + mdb.emit(new HttpField(HttpHeader.C_AUTHORITY,"localhost:8080")); + mdb.emit(new HttpField(HttpHeader.C_PATH,"/")); + try + { + mdb.build(); + Assert.fail(); + } + catch(StreamException ex) + { + Assert.assertThat(ex.getMessage(),Matchers.containsString("No Method")); + } + + + // 3: Sends a HEADERS frame that omits ":scheme" pseudo-header field + mdb = new MetaDataBuilder(4096); + mdb.emit(new HttpField(HttpHeader.C_METHOD,"GET")); + mdb.emit(new HttpField(HttpHeader.C_AUTHORITY,"localhost:8080")); + mdb.emit(new HttpField(HttpHeader.C_PATH,"/")); + try + { + mdb.build(); + Assert.fail(); + } + catch(StreamException ex) + { + Assert.assertThat(ex.getMessage(),Matchers.containsString("No Scheme")); + } + + // 4: Sends a HEADERS frame that omits ":path" pseudo-header field + mdb = new MetaDataBuilder(4096); + mdb.emit(new HttpField(HttpHeader.C_METHOD,"GET")); + mdb.emit(new HttpField(HttpHeader.C_SCHEME,"http")); + mdb.emit(new HttpField(HttpHeader.C_AUTHORITY,"localhost:8080")); + try + { + mdb.build(); + Assert.fail(); + } + catch(StreamException ex) + { + Assert.assertThat(ex.getMessage(),Matchers.containsString("No Path")); + } + + // 5: Sends a HEADERS frame with duplicated ":method" pseudo-header field + mdb = new MetaDataBuilder(4096); + mdb.emit(new HttpField(HttpHeader.C_METHOD,"GET")); + mdb.emit(new HttpField(HttpHeader.C_METHOD,"GET")); + mdb.emit(new HttpField(HttpHeader.C_SCHEME,"http")); + mdb.emit(new HttpField(HttpHeader.C_AUTHORITY,"localhost:8080")); + mdb.emit(new HttpField(HttpHeader.C_PATH,"/")); + try + { + mdb.build(); + Assert.fail(); + } + catch(StreamException ex) + { + Assert.assertThat(ex.getMessage(),Matchers.containsString("Duplicate")); + } + + // 6: Sends a HEADERS frame with duplicated ":scheme" pseudo-header field + mdb = new MetaDataBuilder(4096); + mdb.emit(new HttpField(HttpHeader.C_METHOD,"GET")); + mdb.emit(new HttpField(HttpHeader.C_SCHEME,"http")); + mdb.emit(new HttpField(HttpHeader.C_SCHEME,"http")); + mdb.emit(new HttpField(HttpHeader.C_AUTHORITY,"localhost:8080")); + mdb.emit(new HttpField(HttpHeader.C_PATH,"/")); + try + { + mdb.build(); + Assert.fail(); + } + catch(StreamException ex) + { + Assert.assertThat(ex.getMessage(),Matchers.containsString("Duplicate")); + } + + + + } + /* 8.1.2.3. Request Pseudo-Header Fields - [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) - [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [send] HEADERS Frame (length:16, flags:0x05, stream_id:1) - [recv] HEADERS Frame (length:23, flags:0x04, stream_id:1) - [recv] DATA Frame (length:50, flags:0x01, stream_id:1) - [recv] RST_STREAM Frame (length:4, flags:0x00, stream_id:1) - [recv] Timeout - × 1: Sends a HEADERS frame with empty ":path" pseudo-header field - -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR. - Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR) - RST_STREAM Frame (Error Code: PROTOCOL_ERROR) - Connection closed - Actual: DATA Frame (length:50, flags:0x01, stream_id:1) - [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) - [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [send] HEADERS Frame (length:13, flags:0x05, stream_id:1) - [recv] Timeout - × 2: Sends a HEADERS frame that omits ":method" pseudo-header field - -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR. - Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR) - RST_STREAM Frame (Error Code: PROTOCOL_ERROR) - Connection closed - Actual: Timeout - [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) - [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [send] HEADERS Frame (length:14, flags:0x05, stream_id:1) - [recv] HEADERS Frame (length:100, flags:0x04, stream_id:1) - [recv] DATA Frame (length:687, flags:0x01, stream_id:1) - [recv] Timeout - × 3: Sends a HEADERS frame that omits ":scheme" pseudo-header field - -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR. - Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR) - RST_STREAM Frame (Error Code: PROTOCOL_ERROR) - Connection closed - Actual: DATA Frame (length:687, flags:0x01, stream_id:1) - [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) - [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [send] HEADERS Frame (length:14, flags:0x05, stream_id:1) - [recv] GOAWAY Frame (length:20, flags:0x00, stream_id:0) - ✔ 4: Sends a HEADERS frame that omits ":path" pseudo-header field - [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) - [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [send] HEADERS Frame (length:16, flags:0x05, stream_id:1) - [recv] HEADERS Frame (length:101, flags:0x04, stream_id:1) - [recv] DATA Frame (length:687, flags:0x01, stream_id:1) - [recv] Timeout - × 5: Sends a HEADERS frame with duplicated ":method" pseudo-header field - -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR. - Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR) - RST_STREAM Frame (Error Code: PROTOCOL_ERROR) - Connection closed - Actual: DATA Frame (length:687, flags:0x01, stream_id:1) - [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) - [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [send] HEADERS Frame (length:16, flags:0x05, stream_id:1) - [recv] HEADERS Frame (length:101, flags:0x04, stream_id:1) - [recv] DATA Frame (length:687, flags:0x01, stream_id:1) - [recv] Timeout - × 6: Sends a HEADERS frame with duplicated ":scheme" pseudo-header field - -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR. - Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR) - RST_STREAM Frame (Error Code: PROTOCOL_ERROR) - Connection closed - Actual: DATA Frame (length:687, flags:0x01, stream_id:1) - [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) - [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [send] HEADERS Frame (length:18, flags:0x05, stream_id:1) - [recv] HEADERS Frame (length:79, flags:0x05, stream_id:1) - [recv] Timeout - × 7: Sends a HEADERS frame with duplicated ":method" pseudo-header field - -> The endpoint MUST respond with a stream error of type PROTOCOL_ERROR. - Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR) - RST_STREAM Frame (Error Code: PROTOCOL_ERROR) - Connection closed - Actual: HEADERS Frame (length:79, flags:0x05, stream_id:1) 8.1.2.6. Malformed Requests and Responses [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) From 1373e90e32ac88d14d7362410a7b8462e834518c Mon Sep 17 00:00:00 2001 From: Lachlan Roberts Date: Thu, 19 Jul 2018 21:26:59 +1000 Subject: [PATCH 25/48] Issue #2737 - Allow "=" characters in the AuthenticationProtocolHandler PARAM_PATTERN Signed-off-by: Lachlan Roberts --- .../client/AuthenticationProtocolHandler.java | 2 +- .../client/HttpClientAuthenticationTest.java | 36 +++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/jetty-client/src/main/java/org/eclipse/jetty/client/AuthenticationProtocolHandler.java b/jetty-client/src/main/java/org/eclipse/jetty/client/AuthenticationProtocolHandler.java index c6a160ea214..6d390f87c08 100644 --- a/jetty-client/src/main/java/org/eclipse/jetty/client/AuthenticationProtocolHandler.java +++ b/jetty-client/src/main/java/org/eclipse/jetty/client/AuthenticationProtocolHandler.java @@ -47,7 +47,7 @@ public abstract class AuthenticationProtocolHandler implements ProtocolHandler public static final int DEFAULT_MAX_CONTENT_LENGTH = 16*1024; public static final Logger LOG = Log.getLogger(AuthenticationProtocolHandler.class); - private static final Pattern PARAM_PATTERN = Pattern.compile("([^=]+)=([^=]+)?"); + private static final Pattern PARAM_PATTERN = Pattern.compile("([^=]+)=(.*)"); private static final Pattern TYPE_PATTERN = Pattern.compile("([^\\s]+)(\\s+(.*))?"); private static final Pattern MULTIPLE_CHALLENGE_PATTERN = Pattern.compile("(.*?)\\s*,\\s*([^=\\s,]+(\\s+[^=\\s].*)?)"); private static final Pattern BASE64_PATTERN = Pattern.compile("[\\+\\-\\.\\/\\dA-Z_a-z~]+=*"); diff --git a/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientAuthenticationTest.java b/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientAuthenticationTest.java index ccaacd51dbd..aa6249d33fe 100644 --- a/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientAuthenticationTest.java +++ b/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientAuthenticationTest.java @@ -732,4 +732,40 @@ public class HttpClientAuthenticationTest extends AbstractHttpClientServerTest Assert.assertTrue(headerInfos.get(1).getType().equalsIgnoreCase("Negotiate")); Assert.assertTrue(headerInfos.get(1).getBase64().equals("YIIJvwYGKwYBBQUCoIIJszCCCa+gJDAi=")); } + + + + @Test + public void testEqualsInParam() + { + AuthenticationProtocolHandler aph = new WWWAuthenticationProtocolHandler(client); + HeaderInfo headerInfo; + + headerInfo = aph.getHeaderInfo("Digest realm=\"=the=rmo=stat=\", qop=\"=a=u=t=h=\", nonce=\"=1523430383=\"").get(0); + Assert.assertTrue(headerInfo.getType().equalsIgnoreCase("Digest")); + Assert.assertTrue(headerInfo.getParameter("qop").equals("=a=u=t=h=")); + Assert.assertTrue(headerInfo.getParameter("realm").equals("=the=rmo=stat=")); + Assert.assertTrue(headerInfo.getParameter("nonce").equals("=1523430383=")); + + + // test multiple authentications + List headerInfoList = aph.getHeaderInfo("Digest qop=\"=au=th=\", realm=\"=ther=mostat=\", nonce=\"=152343=0383=\", " + + "Digest realm=\"=thermostat2\", qop=\"=auth2\", nonce=\"=4522530354\", " + + "Digest qop=\"auth3=\", nonce=\"9523570528=\", realm=\"thermostat3=\", "); + + Assert.assertTrue(headerInfoList.get(0).getType().equalsIgnoreCase("Digest")); + Assert.assertTrue(headerInfoList.get(0).getParameter("qop").equals("=au=th=")); + Assert.assertTrue(headerInfoList.get(0).getParameter("realm").equals("=ther=mostat=")); + Assert.assertTrue(headerInfoList.get(0).getParameter("nonce").equals("=152343=0383=")); + + Assert.assertTrue(headerInfoList.get(1).getType().equalsIgnoreCase("Digest")); + Assert.assertTrue(headerInfoList.get(1).getParameter("qop").equals("=auth2")); + Assert.assertTrue(headerInfoList.get(1).getParameter("realm").equals("=thermostat2")); + Assert.assertTrue(headerInfoList.get(1).getParameter("nonce").equals("=4522530354")); + + Assert.assertTrue(headerInfoList.get(2).getType().equalsIgnoreCase("Digest")); + Assert.assertTrue(headerInfoList.get(2).getParameter("qop").equals("auth3=")); + Assert.assertTrue(headerInfoList.get(2).getParameter("realm").equals("thermostat3=")); + Assert.assertTrue(headerInfoList.get(2).getParameter("nonce").equals("9523570528=")); + } } From 0da922505612cde07c3c9583c7b5ae8d2cbff299 Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Thu, 19 Jul 2018 13:49:40 +0200 Subject: [PATCH 26/48] dynamic table resize Signed-off-by: Greg Wilkins --- .../jetty/http2/hpack/HpackDecoder.java | 7 + .../jetty/http2/hpack/HpackDecoderTest.java | 152 +++++------------- .../jetty/http2/hpack/HpackEncoderTest.java | 24 +++ .../test/resources/jetty-logging.properties | 2 +- 4 files changed, 71 insertions(+), 114 deletions(-) diff --git a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackDecoder.java b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackDecoder.java index 74b8b87deb9..083f10b8bc5 100644 --- a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackDecoder.java +++ b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackDecoder.java @@ -74,6 +74,8 @@ public class HpackDecoder // If the buffer is big, don't even think about decoding it if (buffer.remaining()>_builder.getMaxSize()) throw new HpackException.SessionException("431 Request Header Fields too large"); + + boolean emitted = false; while(buffer.hasRemaining()) { @@ -99,6 +101,7 @@ public class HpackDecoder if (LOG.isDebugEnabled()) LOG.debug("decode IdxStatic {}",entry); // emit field + emitted = true; _builder.emit(entry.getHttpField()); // TODO copy and add to reference set if there is room @@ -109,6 +112,7 @@ public class HpackDecoder if (LOG.isDebugEnabled()) LOG.debug("decode Idx {}",entry); // emit + emitted = true; _builder.emit(entry.getHttpField()); } } @@ -133,6 +137,8 @@ public class HpackDecoder LOG.debug("decode resize="+size); if (size>_localMaxDynamicTableSize) throw new IllegalArgumentException(); + if (emitted) + throw new HpackException.CompressionException("Dynamic table resize after fields"); _context.resize(size); continue; @@ -240,6 +246,7 @@ public class HpackDecoder } // emit the field + emitted = true; _builder.emit(field); // if indexed add to dynamic table diff --git a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java index e6241d288d4..05b21814c39 100644 --- a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java +++ b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java @@ -32,6 +32,7 @@ import org.eclipse.jetty.http.HttpField; import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpScheme; import org.eclipse.jetty.http.MetaData; +import org.eclipse.jetty.http2.hpack.HpackException.CompressionException; import org.eclipse.jetty.http2.hpack.HpackException.StreamException; import org.eclipse.jetty.util.TypeUtil; import org.hamcrest.Matchers; @@ -188,26 +189,55 @@ public class HpackDecoderTest @Test public void testResize() throws Exception { - String encoded = "3f6166871e33A13a47497f205f8841E92b043d492d49"; + String encoded = "203f136687A0E41d139d090760881c6490B2Cd39Ba7f"; ByteBuffer buffer = ByteBuffer.wrap(TypeUtil.fromHexString(encoded)); HpackDecoder decoder = new HpackDecoder(4096, 8192); MetaData metaData = decoder.decode(buffer); - assertThat(metaData.getFields().get(HttpHeader.HOST),is("aHostName")); - assertThat(metaData.getFields().get(HttpHeader.CONTENT_TYPE),is("some/content")); - assertThat(decoder.getHpackContext().getDynamicTableSize(),is(0)); + assertThat(metaData.getFields().get(HttpHeader.HOST),is( "localhost0")); + assertThat(metaData.getFields().get(HttpHeader.COOKIE),is("abcdefghij")); + assertThat(decoder.getHpackContext().getMaxDynamicTableSize(),is(50)); + assertThat(decoder.getHpackContext().size(),is(1)); + + + } + + @Test + public void testBadResize() throws Exception + { + /* + 4. Dynamic Table Management + 4.2. Maximum Table Size + × 1: Sends a dynamic table size update at the end of header block + -> The endpoint MUST treat this as a decoding error. + Expected: GOAWAY Frame (Error Code: COMPRESSION_ERROR) + Connection closed + */ + + String encoded = "203f136687A0E41d139d090760881c6490B2Cd39Ba7f20"; + ByteBuffer buffer = ByteBuffer.wrap(TypeUtil.fromHexString(encoded)); + HpackDecoder decoder = new HpackDecoder(4096, 8192); + try + { + decoder.decode(buffer); + Assert.fail(); + } + catch(CompressionException e) + { + Assert.assertThat(e.getMessage(),Matchers.containsString("Dynamic table resize after fields")); + } } @Test public void testTooBigToIndex() throws Exception { - String encoded = "44FfEc02Df3990A190A0D4Ee5b3d2940Ec98Aa4a62D127D29e273a0aA20dEcAa190a503b262d8a2671D4A2672a927aA874988a2471D05510750c951139EdA2452a3a548cAa1aA90bE4B228342864A9E0D450A5474a92992a1aA513395448E3A0Aa17B96cFe3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f14E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F353F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F54f"; + String encoded = "3f610f17FfEc02Df3990A190A0D4Ee5b3d2940Ec98Aa4a62D127D29e273a0aA20dEcAa190a503b262d8a2671D4A2672a927aA874988a2471D05510750c951139EdA2452a3a548cAa1aA90bE4B228342864A9E0D450A5474a92992a1aA513395448E3A0Aa17B96cFe3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f14E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F3E7Cf9f3e7cF9F353F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F54f"; ByteBuffer buffer = ByteBuffer.wrap(TypeUtil.fromHexString(encoded)); HpackDecoder decoder = new HpackDecoder(128,8192); MetaData metaData = decoder.decode(buffer); assertThat(decoder.getHpackContext().getDynamicTableSize(),is(0)); - assertThat(((MetaData.Request)metaData).getURI().toString(),Matchers.startsWith("This is a very large field")); + assertThat(metaData.getFields().get("host"),Matchers.startsWith("This is a very large field")); } @Test @@ -430,131 +460,27 @@ public class HpackDecoderTest { Assert.assertThat(ex.getMessage(),Matchers.containsString("Duplicate")); } - - - } /* - 8.1.2.3. Request Pseudo-Header Fields - - 8.1.2.6. Malformed Requests and Responses - [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) - [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [send] HEADERS Frame (length:18, flags:0x04, stream_id:1) - [send] DATA Frame (length:4, flags:0x01, stream_id:1) - [recv] HEADERS Frame (length:100, flags:0x04, stream_id:1) - [recv] DATA Frame (length:687, flags:0x01, stream_id:1) - [recv] Timeout - × 1: Sends a HEADERS frame with the "content-length" header field which does not equal the DATA frame payload length - -> The endpoint MUST treat this as a stream error of type PROTOCOL_ERROR. - Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR) - RST_STREAM Frame (Error Code: PROTOCOL_ERROR) - Connection closed - Actual: DATA Frame (length:687, flags:0x01, stream_id:1) - [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) - [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [send] HEADERS Frame (length:18, flags:0x04, stream_id:1) - [send] DATA Frame (length:4, flags:0x00, stream_id:1) - [send] DATA Frame (length:4, flags:0x01, stream_id:1) - [recv] HEADERS Frame (length:100, flags:0x04, stream_id:1) - [recv] DATA Frame (length:687, flags:0x01, stream_id:1) - [recv] Timeout - × 2: Sends a HEADERS frame with the "content-length" header field which does not equal the sum of the multiple DATA frames payload length - -> The endpoint MUST treat this as a stream error of type PROTOCOL_ERROR. - Expected: GOAWAY Frame (Error Code: PROTOCOL_ERROR) - RST_STREAM Frame (Error Code: PROTOCOL_ERROR) - Connection closed - Actual: DATA Frame (length:687, flags:0x01, stream_id:1) - - 8.2. Server Push - [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) - [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [send] PUSH_PROMISE Frame (length:19, flags:0x04, stream_id:1) - [recv] GOAWAY Frame (length:20, flags:0x00, stream_id:0) - ✔ 1: Sends a PUSH_PROMISE frame - - HPACK: Header Compression for HTTP/2 - 2. Compression Process Overview - 2.3. Indexing Tables - 2.3.3. Index Address Space - [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) - [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [send] HEADERS Frame (length:16, flags:0x05, stream_id:1) - [recv] GOAWAY Frame (length:20, flags:0x00, stream_id:0) - [recv] Connection closed - ✔ 1: Sends a header field representation with invalid index - - 4. Dynamic Table Management - 4.2. Maximum Table Size - [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) - [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [send] HEADERS Frame (length:16, flags:0x05, stream_id:1) - [recv] HEADERS Frame (length:101, flags:0x04, stream_id:1) - [recv] DATA Frame (length:687, flags:0x01, stream_id:1) - [recv] Timeout - × 1: Sends a dynamic table size update at the end of header block - -> The endpoint MUST treat this as a decoding error. - Expected: GOAWAY Frame (Error Code: COMPRESSION_ERROR) - Connection closed - Actual: DATA Frame (length:687, flags:0x01, stream_id:1) + 8.1.2.6. Malformed Requests and Responses + × 1: Sends a HEADERS frame with the "content-length" header field which does not equal the DATA frame payload length + × 2: Sends a HEADERS frame with the "content-length" header field which does not equal the sum of the multiple DATA frames payload length 5. Primitive Type Representations 5.2. String Literal Representation - [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) - [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [send] HEADERS Frame (length:27, flags:0x05, stream_id:1) - [recv] HEADERS Frame (length:101, flags:0x04, stream_id:1) - [recv] DATA Frame (length:687, flags:0x01, stream_id:1) - [recv] Timeout × 1: Sends a Huffman-encoded string literal representation with padding longer than 7 bits -> The endpoint MUST treat this as a decoding error. Expected: GOAWAY Frame (Error Code: COMPRESSION_ERROR) Connection closed Actual: DATA Frame (length:687, flags:0x01, stream_id:1) - [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) - [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [send] HEADERS Frame (length:26, flags:0x05, stream_id:1) - [recv] HEADERS Frame (length:101, flags:0x04, stream_id:1) - [recv] DATA Frame (length:687, flags:0x01, stream_id:1) - [recv] Timeout × 2: Sends a Huffman-encoded string literal representation padded by zero -> The endpoint MUST treat this as a decoding error. Expected: GOAWAY Frame (Error Code: COMPRESSION_ERROR) Connection closed Actual: DATA Frame (length:687, flags:0x01, stream_id:1) - [send] SETTINGS Frame (length:6, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:24, flags:0x00, stream_id:0) - [send] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [recv] WINDOW_UPDATE Frame (length:4, flags:0x00, stream_id:0) - [recv] SETTINGS Frame (length:0, flags:0x01, stream_id:0) - [send] HEADERS Frame (length:28, flags:0x05, stream_id:1) - [recv] GOAWAY Frame (length:20, flags:0x00, stream_id:0) - [recv] Connection closed ✔ 3: Sends a Huffman-encoded string literal representation containing the EOS symbol - */ } diff --git a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackEncoderTest.java b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackEncoderTest.java index 00349c46017..66381b69c35 100644 --- a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackEncoderTest.java +++ b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackEncoderTest.java @@ -249,4 +249,28 @@ public class HpackEncoderTest context.get(HpackContext.STATIC_SIZE+1).getSize()+context.get(HpackContext.STATIC_SIZE+2).getSize())); } + + @Test + public void testResize() + { + HttpFields fields = new HttpFields(); + fields.add("host", "localhost0"); + fields.add("cookie","abcdefghij"); + + HpackEncoder encoder = new HpackEncoder(4096); + + ByteBuffer buffer = BufferUtil.allocate(4096); + int pos = BufferUtil.flipToFill(buffer); + encoder.encodeMaxDynamicTableSize(buffer,0); + encoder.setRemoteMaxDynamicTableSize(50); + encoder.encode(buffer,new MetaData(HttpVersion.HTTP_2,fields)); + BufferUtil.flipToFlush(buffer,pos); + + HpackContext context = encoder.getHpackContext(); + + Assert.assertThat(context.getMaxDynamicTableSize(),Matchers.is(50)); + Assert.assertThat(context.size(),Matchers.is(1)); + + + } } diff --git a/jetty-http2/http2-hpack/src/test/resources/jetty-logging.properties b/jetty-http2/http2-hpack/src/test/resources/jetty-logging.properties index d33a7c32778..e40e8e43ce1 100644 --- a/jetty-http2/http2-hpack/src/test/resources/jetty-logging.properties +++ b/jetty-http2/http2-hpack/src/test/resources/jetty-logging.properties @@ -1,3 +1,3 @@ org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.StdErrLog org.eclipse.jetty.http2.LEVEL=INFO -org.eclipse.jetty.http2.hpack.LEVEL=DEBUG +org.eclipse.jetty.http2.hpack.LEVEL=INFO From 0f3f77761f479bd746cb2b6cc8d177c8b4d6eeca Mon Sep 17 00:00:00 2001 From: Lachlan Roberts Date: Fri, 20 Jul 2018 11:01:56 +1000 Subject: [PATCH 27/48] Issue #2706 - Resource Service Incorrectly Returning 404 Replaced the response.isCommitted() check with a boolean returned from _resourceService.doGet(). This means the response does not need to be committed for the check to work correctly. Signed-off-by: Lachlan Roberts --- .../eclipse/jetty/server/ResourceService.java | 18 +++++++----------- .../jetty/server/handler/ResourceHandler.java | 4 +--- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/ResourceService.java b/jetty-server/src/main/java/org/eclipse/jetty/server/ResourceService.java index 328488dd095..b4a480eefdc 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/ResourceService.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/ResourceService.java @@ -195,7 +195,7 @@ public class ResourceService } /* ------------------------------------------------------------ */ - public void doGet(HttpServletRequest request, HttpServletResponse response) + public boolean doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String servletPath=null; @@ -243,14 +243,14 @@ public class ResourceService if (included) throw new FileNotFoundException("!" + pathInContext); notFound(request,response); - return; + return response.isCommitted(); } // Directory? if (content.getResource().isDirectory()) { sendWelcome(content,pathInContext,endsWithSlash,included,request,response); - return; + return true; } // Strip slash? @@ -261,12 +261,12 @@ public class ResourceService if (q!=null&&q.length()!=0) pathInContext+="?"+q; response.sendRedirect(response.encodeRedirectURL(URIUtil.addPaths(request.getContextPath(),pathInContext))); - return; + return true; } // Conditional response? if (!included && !passConditionalHeaders(request,response,content)) - return; + return true; // Precompressed variant available? Map precompressedContents = checkPrecompressedVariants?content.getPrecompressedContents():null; @@ -309,6 +309,8 @@ public class ResourceService content.release(); } } + + return true; } private List getPreferredEncodingOrder(HttpServletRequest request) @@ -533,7 +535,6 @@ public class ResourceService if (!match) { response.setStatus(HttpServletResponse.SC_PRECONDITION_FAILED); - response.flushBuffer(); return false; } } @@ -545,7 +546,6 @@ public class ResourceService { response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); response.setHeader(HttpHeader.ETAG.asString(),ifnm); - response.flushBuffer(); return false; } @@ -557,7 +557,6 @@ public class ResourceService { response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); response.setHeader(HttpHeader.ETAG.asString(),tag); - response.flushBuffer(); return false; } } @@ -746,7 +745,6 @@ public class ResourceService response.setHeader(HttpHeader.CONTENT_RANGE.asString(), InclusiveByteRange.to416HeaderRangeString(content_length)); content.getResource().writeTo(out,0,content_length); - response.flushBuffer(); return true; } @@ -763,7 +761,6 @@ public class ResourceService response.setHeader(HttpHeader.CONTENT_RANGE.asString(), singleSatisfiableRange.toHeaderRangeString(content_length)); content.getResource().writeTo(out,singleSatisfiableRange.getFirst(),singleLength); - response.flushBuffer(); return true; } @@ -846,7 +843,6 @@ public class ResourceService if (in!=null) in.close(); multi.close(); - response.flushBuffer(); } return true; } diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ResourceHandler.java b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ResourceHandler.java index da6592c76dc..b568b3defbb 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ResourceHandler.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ResourceHandler.java @@ -276,9 +276,7 @@ public class ResourceHandler extends HandlerWrapper implements ResourceFactory,W return; } - _resourceService.doGet(request,response); - - if (response.isCommitted()) + if (_resourceService.doGet(request,response)) baseRequest.setHandled(true); else // no resource - try other handlers From cf3681ef568be2fea41e89b2937112a7474c5c07 Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Fri, 20 Jul 2018 09:30:36 +0200 Subject: [PATCH 28/48] Issue #1688 Encoded form content (#2733) * Issue #1688 Encoded form content Signed-off-by: Greg Wilkins * fixes from review Signed-off-by: Greg Wilkins --- .../org/eclipse/jetty/server/Request.java | 4 ++ .../server/handler/gzip/GzipHandler.java | 36 +++++++++++---- .../org/eclipse/jetty/server/RequestTest.java | 36 +++++++++++++++ .../jetty/servlet/GzipHandlerTest.java | 45 +++++++++++++++++++ 4 files changed, 113 insertions(+), 8 deletions(-) diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/Request.java b/jetty-server/src/main/java/org/eclipse/jetty/server/Request.java index 0369bf7a4e4..6a8fb1aaea2 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/Request.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/Request.java @@ -455,6 +455,10 @@ public class Request implements HttpServletRequest /* ------------------------------------------------------------ */ private void extractContentParameters() { + // Content cannot be encoded + if (_metaData!=null && getHttpFields().contains(HttpHeader.CONTENT_ENCODING)) + throw new BadMessageException(HttpStatus.NOT_IMPLEMENTED_501,"Unsupported Content-Encoding"); + String contentType = getContentType(); if (contentType == null || contentType.isEmpty()) _contentParameters=NO_PARAMS; diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/gzip/GzipHandler.java b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/gzip/GzipHandler.java index 1f458b69922..ff5a27bf4b7 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/gzip/GzipHandler.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/gzip/GzipHandler.java @@ -24,6 +24,7 @@ import java.util.Arrays; import java.util.EnumSet; import java.util.ListIterator; import java.util.Set; +import java.util.regex.Pattern; import java.util.zip.Deflater; import javax.servlet.DispatcherType; @@ -37,6 +38,8 @@ import org.eclipse.jetty.http.HttpField; import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpMethod; import org.eclipse.jetty.http.MimeTypes; +import org.eclipse.jetty.http.PreEncodedHttpField; +import org.eclipse.jetty.http.QuotedCSV; import org.eclipse.jetty.http.pathmap.PathSpecSet; import org.eclipse.jetty.server.HttpOutput; import org.eclipse.jetty.server.Request; @@ -153,6 +156,8 @@ public class GzipHandler extends HandlerWrapper implements GzipFactory public static final String DEFLATE = "deflate"; public static final int DEFAULT_MIN_GZIP_SIZE=16; private static final Logger LOG = Log.getLogger(GzipHandler.class); + private static final HttpField X_CE_GZIP = new PreEncodedHttpField("X-Content-Encoding","gzip"); + private static final Pattern COMMA_GZIP = Pattern.compile(".*, *gzip"); private int _minGzipSize=DEFAULT_MIN_GZIP_SIZE; private int _compressionLevel=Deflater.DEFAULT_COMPRESSION; @@ -621,16 +626,31 @@ public class GzipHandler extends HandlerWrapper implements GzipFactory // Handle request inflation if (_inflateBufferSize>0) { - HttpField ce = baseRequest.getHttpFields().getField(HttpHeader.CONTENT_ENCODING); - if (ce!=null && "gzip".equalsIgnoreCase(ce.getValue())) + for (ListIterator i = baseRequest.getHttpFields().listIterator(); i.hasNext();) { - // TODO should check ce.contains and then remove just the gzip encoding - baseRequest.getHttpFields().remove(HttpHeader.CONTENT_ENCODING); - baseRequest.getHttpFields().add(new HttpField("X-Content-Encoding",ce.getValue())); - baseRequest.getHttpInput().addInterceptor(new GzipHttpInputInterceptor(baseRequest.getHttpChannel().getByteBufferPool(),_inflateBufferSize)); - } + HttpField field = i.next(); + if (field.getHeader()!=HttpHeader.CONTENT_ENCODING) + continue; + + if (field.getValue().equalsIgnoreCase("gzip")) + { + i.set(X_CE_GZIP); + baseRequest.getHttpInput().addInterceptor(new GzipHttpInputInterceptor(baseRequest.getHttpChannel().getByteBufferPool(),_inflateBufferSize)); + break; + } + + if (COMMA_GZIP.matcher(field.getValue()).matches()) + { + String v = field.getValue(); + v = v.substring(0,v.lastIndexOf(',')); + i.set(new HttpField(HttpHeader.CONTENT_ENCODING,v)); + i.add(X_CE_GZIP); + baseRequest.getHttpInput().addInterceptor(new GzipHttpInputInterceptor(baseRequest.getHttpChannel().getByteBufferPool(),_inflateBufferSize)); + break; + } + } } - + // Are we already being gzipped? HttpOutput out = baseRequest.getResponse().getHttpOutput(); HttpOutput.Interceptor interceptor = out.getInterceptor(); diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/RequestTest.java b/jetty-server/src/test/java/org/eclipse/jetty/server/RequestTest.java index 14743f5a801..7e8cef5ebb9 100644 --- a/jetty-server/src/test/java/org/eclipse/jetty/server/RequestTest.java +++ b/jetty-server/src/test/java/org/eclipse/jetty/server/RequestTest.java @@ -611,6 +611,42 @@ public class RequestTest String responses=_connector.getResponse(request); assertThat(responses,startsWith("HTTP/1.1 200")); } + + + @Test + public void testEncodedParamExtraction() throws Exception + { + _handler._checker = new RequestTester() + { + @Override + public boolean check(HttpServletRequest request,HttpServletResponse response) + { + try + { + // This throws an exception if attempted + request.getParameter("param"); + return false; + } + catch(BadMessageException e) + { + return e.getCode()==501; + } + } + }; + + //Send a request with encoded form content + String request="GET / HTTP/1.1\r\n"+ + "Host: whatever\r\n"+ + "Content-Type: application/x-www-form-urlencoded; charset=utf-8\n"+ + "Content-Length: 10\n"+ + "Content-Encoding: gzip\n"+ + "Connection: close\n"+ + "\n"+ + "0123456789\n"; + + String responses=_connector.getResponse(request); + assertThat(responses,startsWith("HTTP/1.1 200")); + } @Test public void testInvalidHostHeader() throws Exception diff --git a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/GzipHandlerTest.java b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/GzipHandlerTest.java index fd67f91eaa3..c09a43a050c 100644 --- a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/GzipHandlerTest.java +++ b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/GzipHandlerTest.java @@ -35,6 +35,7 @@ import java.io.PrintWriter; import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.util.Arrays; +import java.util.Enumeration; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; @@ -102,6 +103,7 @@ public class GzipHandlerTest servlets.addServletWithMapping(ForwardServlet.class,"/forward"); servlets.addServletWithMapping(IncludeServlet.class,"/include"); servlets.addServletWithMapping(EchoServlet.class,"/echo/*"); + servlets.addServletWithMapping(DumpServlet.class,"/dump/*"); _server.start(); } @@ -178,6 +180,20 @@ public class GzipHandlerTest doGet(req,response); } } + + public static class DumpServlet extends HttpServlet + { + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException + { + response.setContentType("text/plain"); + for (Enumeration e = req.getParameterNames(); e.hasMoreElements(); ) + { + String n = e.nextElement(); + response.getWriter().printf("%s: %s%n",n,req.getParameter(n)); + } + } + } public static class ForwardServlet extends HttpServlet { @@ -493,6 +509,35 @@ public class GzipHandlerTest } + + @Test + public void testGzipFormRequest() throws Exception + { + String data = "name=value"; + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + GZIPOutputStream output = new GZIPOutputStream(baos); + output.write(data.getBytes(StandardCharsets.UTF_8)); + output.close(); + byte[] bytes = baos.toByteArray(); + + // generated and parsed test + HttpTester.Request request = HttpTester.newRequest(); + HttpTester.Response response; + + request.setMethod("POST"); + request.setURI("/ctx/dump"); + request.setVersion("HTTP/1.0"); + request.setHeader("Host","tester"); + request.setHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8"); + request.setHeader("Content-Encoding","gzip"); + request.setContent(bytes); + + response = HttpTester.parseResponse(_connector.getResponse(request.generate())); + + assertThat(response.getStatus(),is(200)); + assertThat(response.getContent(),is("name: value\n")); + } + @Test public void testGzipBomb() throws Exception { From 8444681880482828012c58e899c86c6d49e87c4e Mon Sep 17 00:00:00 2001 From: Lachlan Roberts Date: Fri, 20 Jul 2018 21:30:00 +1000 Subject: [PATCH 29/48] Issue #2706 - Resource Service Incorrectly Returning 404 changes from review Signed-off-by: Lachlan Roberts --- .../main/java/org/eclipse/jetty/server/ResourceService.java | 4 ++++ .../main/java/org/eclipse/jetty/servlet/DefaultServlet.java | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/ResourceService.java b/jetty-server/src/main/java/org/eclipse/jetty/server/ResourceService.java index b4a480eefdc..5b1a444174c 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/ResourceService.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/ResourceService.java @@ -535,6 +535,7 @@ public class ResourceService if (!match) { response.setStatus(HttpServletResponse.SC_PRECONDITION_FAILED); + response.flushBuffer(); return false; } } @@ -546,6 +547,7 @@ public class ResourceService { response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); response.setHeader(HttpHeader.ETAG.asString(),ifnm); + response.flushBuffer(); return false; } @@ -557,6 +559,7 @@ public class ResourceService { response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); response.setHeader(HttpHeader.ETAG.asString(),tag); + response.flushBuffer(); return false; } } @@ -738,6 +741,7 @@ public class ResourceService List ranges =InclusiveByteRange.satisfiableRanges( reqRanges, content_length); // if there are no satisfiable ranges, send 416 response + // TODO should we be doing a 416 with a body if (ranges==null || ranges.size()==0) { putHeaders(response,content,0); diff --git a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/DefaultServlet.java b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/DefaultServlet.java index 8ea9740d50c..d004d838460 100644 --- a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/DefaultServlet.java +++ b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/DefaultServlet.java @@ -455,7 +455,8 @@ public class DefaultServlet extends HttpServlet implements ResourceFactory, Welc protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - _resourceService.doGet(request,response); + if(!_resourceService.doGet(request,response)) + response.sendError(404); } /* ------------------------------------------------------------ */ From a72fe7e3c77101e9336b3a0a7ffc6c5b17c79819 Mon Sep 17 00:00:00 2001 From: Lachlan Roberts Date: Fri, 20 Jul 2018 22:40:05 +1000 Subject: [PATCH 30/48] Issue #2679 - HTTP/2 Spec Compliance Added tests for the problems with the Huffman encoding Signed-off-by: Lachlan Roberts --- .../jetty/http2/hpack/HpackDecoderTest.java | 99 +++++++++++++++---- 1 file changed, 79 insertions(+), 20 deletions(-) diff --git a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java index 05b21814c39..2d5cf49e9cf 100644 --- a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java +++ b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java @@ -462,25 +462,84 @@ public class HpackDecoderTest } } - - /* - 8.1.2.6. Malformed Requests and Responses - × 1: Sends a HEADERS frame with the "content-length" header field which does not equal the DATA frame payload length - × 2: Sends a HEADERS frame with the "content-length" header field which does not equal the sum of the multiple DATA frames payload length - 5. Primitive Type Representations - 5.2. String Literal Representation - × 1: Sends a Huffman-encoded string literal representation with padding longer than 7 bits - -> The endpoint MUST treat this as a decoding error. - Expected: GOAWAY Frame (Error Code: COMPRESSION_ERROR) - Connection closed - Actual: DATA Frame (length:687, flags:0x01, stream_id:1) - × 2: Sends a Huffman-encoded string literal representation padded by zero - -> The endpoint MUST treat this as a decoding error. - Expected: GOAWAY Frame (Error Code: COMPRESSION_ERROR) - Connection closed - Actual: DATA Frame (length:687, flags:0x01, stream_id:1) - ✔ 3: Sends a Huffman-encoded string literal representation containing the EOS symbol - */ - + @Test() + public void testHuffmanEncodedStandard() throws Exception + { + HpackDecoder decoder = new HpackDecoder(4096, 8192); + + String encoded = "82868441" + "83" + "49509F"; + ByteBuffer buffer = ByteBuffer.wrap(TypeUtil.fromHexString(encoded)); + + MetaData.Request request = (MetaData.Request)decoder.decode(buffer); + + assertEquals("GET", request.getMethod()); + assertEquals(HttpScheme.HTTP.asString(), request.getURI().getScheme()); + assertEquals("/", request.getURI().getPath()); + assertEquals("test", request.getURI().getHost()); + assertFalse(request.iterator().hasNext()); + } + + + /* 5.2.1: Sends a Huffman-encoded string literal representation with padding longer than 7 bits */ + @Test() + public void testHuffmanEncodedExtraPadding() throws Exception + { + HpackDecoder decoder = new HpackDecoder(4096, 8192); + + String encoded = "82868441" + "83" + "49509FFF"; + ByteBuffer buffer = ByteBuffer.wrap(TypeUtil.fromHexString(encoded)); + + try + { + decoder.decode(buffer); + Assert.fail(); + } + catch (StreamException ex) + { + Assert.assertThat(ex.getMessage(), Matchers.containsString("Padding length exceeded")); + } + } + + + /* 5.2.2: Sends a Huffman-encoded string literal representation padded by zero */ + @Test() + public void testHuffmanEncodedZeroPadding() throws Exception + { + HpackDecoder decoder = new HpackDecoder(4096, 8192); + + String encoded = "82868441" + "83" + "495090"; + ByteBuffer buffer = ByteBuffer.wrap(TypeUtil.fromHexString(encoded)); + + try + { + decoder.decode(buffer); + Assert.fail(); + } + catch (StreamException ex) + { + Assert.assertThat(ex.getMessage(), Matchers.containsString("Zero padded")); + } + } + + + /* 5.2.3: Sends a Huffman-encoded string literal representation containing the EOS symbol */ + @Test() + public void testHuffmanEncodedWithEOS() throws Exception + { + HpackDecoder decoder = new HpackDecoder(4096, 8192); + + String encoded = "82868441" + "87" + "497FFFFFFF427F"; + ByteBuffer buffer = ByteBuffer.wrap(TypeUtil.fromHexString(encoded)); + + try + { + decoder.decode(buffer); + Assert.fail(); + } + catch (StreamException ex) + { + Assert.assertThat(ex.getMessage(), Matchers.containsString("EOS in content")); + } + } } From cd0cf3d11f139fb068321a0c4ef56ff1c3cdf087 Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Fri, 20 Jul 2018 16:03:27 +0200 Subject: [PATCH 31/48] Issue #2706 - minor cleanup Signed-off-by: Greg Wilkins --- .../eclipse/jetty/server/ResourceService.java | 34 ++++++++----------- .../server/handler/ResourceHandlerTest.java | 23 +++++++++++-- 2 files changed, 35 insertions(+), 22 deletions(-) diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/ResourceService.java b/jetty-server/src/main/java/org/eclipse/jetty/server/ResourceService.java index 5b1a444174c..4a3dde749a7 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/ResourceService.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/ResourceService.java @@ -32,6 +32,7 @@ import java.util.Enumeration; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Supplier; import javax.servlet.AsyncContext; import javax.servlet.RequestDispatcher; @@ -464,6 +465,14 @@ public class ResourceService response.sendError(HttpServletResponse.SC_NOT_FOUND); } + protected void sendStatus(HttpServletResponse response, int status, Supplier etag) throws IOException + { + response.setStatus(status); + if (_etags && etag!=null) + response.setHeader(HttpHeader.ETAG.asString(),etag.get()); + response.flushBuffer(); + } + /* ------------------------------------------------------------ */ /* Check modification date headers. */ @@ -534,8 +543,7 @@ public class ResourceService if (!match) { - response.setStatus(HttpServletResponse.SC_PRECONDITION_FAILED); - response.flushBuffer(); + sendStatus(response,HttpServletResponse.SC_PRECONDITION_FAILED,null); return false; } } @@ -545,9 +553,7 @@ public class ResourceService // Handle special case of exact match OR gzip exact match if (CompressedContentFormat.tagEquals(etag, ifnm) && ifnm.indexOf(',')<0) { - response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); - response.setHeader(HttpHeader.ETAG.asString(),ifnm); - response.flushBuffer(); + sendStatus(response,HttpServletResponse.SC_NOT_MODIFIED,ifnm::toString); return false; } @@ -557,9 +563,7 @@ public class ResourceService { if (CompressedContentFormat.tagEquals(etag, tag)) { - response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); - response.setHeader(HttpHeader.ETAG.asString(),tag); - response.flushBuffer(); + sendStatus(response,HttpServletResponse.SC_NOT_MODIFIED,tag::toString); return false; } } @@ -576,20 +580,14 @@ public class ResourceService String mdlm=content.getLastModifiedValue(); if (mdlm!=null && ifms.equals(mdlm)) { - response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); - if (_etags) - response.setHeader(HttpHeader.ETAG.asString(),content.getETagValue()); - response.flushBuffer(); + sendStatus(response,HttpServletResponse.SC_NOT_MODIFIED,content::getETagValue); return false; } long ifmsl=request.getDateHeader(HttpHeader.IF_MODIFIED_SINCE.asString()); if (ifmsl!=-1 && content.getResource().lastModified()/1000 <= ifmsl/1000) { - response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); - if (_etags) - response.setHeader(HttpHeader.ETAG.asString(),content.getETagValue()); - response.flushBuffer(); + sendStatus(response,HttpServletResponse.SC_NOT_MODIFIED,content::getETagValue); return false; } } @@ -741,14 +739,12 @@ public class ResourceService List ranges =InclusiveByteRange.satisfiableRanges( reqRanges, content_length); // if there are no satisfiable ranges, send 416 response - // TODO should we be doing a 416 with a body if (ranges==null || ranges.size()==0) { putHeaders(response,content,0); - response.setStatus(HttpServletResponse.SC_REQUESTED_RANGE_NOT_SATISFIABLE); response.setHeader(HttpHeader.CONTENT_RANGE.asString(), InclusiveByteRange.to416HeaderRangeString(content_length)); - content.getResource().writeTo(out,0,content_length); + sendStatus(response,HttpServletResponse.SC_REQUESTED_RANGE_NOT_SATISFIABLE,null); return true; } diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/handler/ResourceHandlerTest.java b/jetty-server/src/test/java/org/eclipse/jetty/server/handler/ResourceHandlerTest.java index 59156ca3a26..cac9454a6a3 100644 --- a/jetty-server/src/test/java/org/eclipse/jetty/server/handler/ResourceHandlerTest.java +++ b/jetty-server/src/test/java/org/eclipse/jetty/server/handler/ResourceHandlerTest.java @@ -186,6 +186,24 @@ public class ResourceHandlerTest assertThat(response.get(SERVER),containsString("Jetty")); assertThat(response.getContent(),containsString("simple text")); } + + @Test + public void testIfModifiedSince() throws Exception + { + HttpTester.Response response = HttpTester.parseResponse( + _local.getResponse("GET /resource/simple.txt HTTP/1.0\r\n\r\n")); + assertThat(response.getStatus(),equalTo(200)); + assertThat(response.get(LAST_MODIFIED),Matchers.notNullValue()); + assertThat(response.getContent(),containsString("simple text")); + String last_modified = response.get(LAST_MODIFIED); + + response = HttpTester.parseResponse(_local.getResponse( + "GET /resource/simple.txt HTTP/1.0\r\n" + + "If-Modified-Since: " + last_modified + "\r\n" + + "\r\n")); + + assertThat(response.getStatus(),equalTo(304)); + } @Test public void testBigFile() throws Exception @@ -267,7 +285,7 @@ public class ResourceHandlerTest @Slow public void testSlowBiggest() throws Exception { - _connector.setIdleTimeout(10000); + _connector.setIdleTimeout(9000); File dir = MavenTestingUtils.getTargetFile("test-classes/simple"); File biggest = new File(dir,"biggest.txt"); @@ -292,7 +310,7 @@ public class ResourceHandlerTest ByteBuffer buffer=null; while(true) { - Thread.sleep(100); + Thread.sleep(25); int len=in.read(array); if (len<0) break; @@ -308,7 +326,6 @@ public class ResourceHandlerTest } - @Test public void testConditionalGetResponseCommitted() throws Exception { From da213d58767e19a49069412d69e7c12af3a9cae2 Mon Sep 17 00:00:00 2001 From: Lachlan Roberts Date: Sat, 21 Jul 2018 11:32:34 +1000 Subject: [PATCH 32/48] Issue #2679 - HTTP/2 Spec Compliance Now throwing exceptions for incorrect padding and EOS in content in Huffman.decode() Signed-off-by: Lachlan Roberts --- .../eclipse/jetty/http2/hpack/Huffman.java | 23 +++++++++++++++---- .../jetty/http2/hpack/HpackContextTest.java | 2 +- .../jetty/http2/hpack/HpackDecoderTest.java | 4 ++-- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/Huffman.java b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/Huffman.java index 67c58ee0a98..8a1dbb3c5ed 100644 --- a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/Huffman.java +++ b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/Huffman.java @@ -287,6 +287,7 @@ public class Huffman }; static final int[][] LCCODES = new int[CODES.length][]; + static final char EOS = 256; // Huffman decode tree stored in a flattened char array for good // locality of reference. @@ -344,12 +345,12 @@ public class Huffman } } - public static String decode(ByteBuffer buffer) + public static String decode(ByteBuffer buffer) throws HpackException.StreamException { return decode(buffer,buffer.remaining()); } - public static String decode(ByteBuffer buffer,int length) + public static String decode(ByteBuffer buffer,int length) throws HpackException.StreamException { StringBuilder out = new StringBuilder(length*2); int node = 0; @@ -373,6 +374,9 @@ public class Huffman node = tree[node*256+c]; if (rowbits[node]!=0) { + if(rowsym[node] == EOS) + throw new HpackException.StreamException("EOS in content"); + // terminal node out.append(rowsym[node]); bits -= rowbits[node]; @@ -390,9 +394,20 @@ public class Huffman { int c = (current << (8 - bits)) & 0xFF; node = tree[node*256+c]; - if (rowbits[node]==0 || rowbits[node] > bits) + + if (rowbits[node]==0 || rowbits[node] > bits) + { + int requiredPadding = 0; + for(int i=0; i>(8-bits)) != requiredPadding) + throw new HpackException.StreamException("Incorrect padding"); + break; - + } + + // TODO why is this even here if (rowbits[node]==0) throw new IllegalStateException(); diff --git a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackContextTest.java b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackContextTest.java index 8af7b0e11e5..d91caff99cf 100644 --- a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackContextTest.java +++ b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackContextTest.java @@ -411,7 +411,7 @@ public class HpackContextTest } @Test - public void testStaticHuffmanValues() + public void testStaticHuffmanValues() throws Exception { HpackContext ctx = new HpackContext(4096); for (int i=2;i<=14;i++) diff --git a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java index 2d5cf49e9cf..03982a01241 100644 --- a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java +++ b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java @@ -487,7 +487,7 @@ public class HpackDecoderTest { HpackDecoder decoder = new HpackDecoder(4096, 8192); - String encoded = "82868441" + "83" + "49509FFF"; + String encoded = "82868441" + "84" + "49509FFF"; ByteBuffer buffer = ByteBuffer.wrap(TypeUtil.fromHexString(encoded)); try @@ -518,7 +518,7 @@ public class HpackDecoderTest } catch (StreamException ex) { - Assert.assertThat(ex.getMessage(), Matchers.containsString("Zero padded")); + Assert.assertThat(ex.getMessage(), Matchers.containsString("Incorrect padding")); } } From 4ace2e4d8dd6b21527aa0561de3e5d38b136aca9 Mon Sep 17 00:00:00 2001 From: Simone Bordet Date: Sat, 21 Jul 2018 11:42:31 +0200 Subject: [PATCH 33/48] Issue #2679 - h2spec compliance. Integrated HPACK modifications to comply with the specification. Signed-off-by: Simone Bordet --- .../http2/client/HTTP2ClientSession.java | 11 ++- .../http2/client/FlowControlStrategyTest.java | 29 +++++- .../eclipse/jetty/http2/client/HTTP2Test.java | 83 +---------------- .../jetty/http2/client/TrailersTest.java | 67 +++++++++++++- .../org/eclipse/jetty/http2/ErrorCode.java | 14 +++ .../eclipse/jetty/http2/HTTP2Connection.java | 89 +++++------------- .../org/eclipse/jetty/http2/HTTP2Session.java | 73 ++++++++++++--- .../org/eclipse/jetty/http2/HTTP2Stream.java | 72 ++++++++++++--- .../org/eclipse/jetty/http2/api/Stream.java | 5 + .../jetty/http2/frames/FailureFrame.java | 42 +++++++++ .../eclipse/jetty/http2/frames/FrameType.java | 3 +- .../jetty/http2/frames/GoAwayFrame.java | 3 +- .../jetty/http2/frames/ResetFrame.java | 6 +- .../jetty/http2/parser/BodyParser.java | 17 ++++ .../http2/parser/ContinuationBodyParser.java | 9 +- .../jetty/http2/parser/HeaderBlockParser.java | 71 +++++++++------ .../jetty/http2/parser/HeadersBodyParser.java | 5 +- .../eclipse/jetty/http2/parser/Parser.java | 91 ++++++++++++++++++- .../http2/parser/PushPromiseBodyParser.java | 5 +- .../jetty/http2/parser/ServerParser.java | 20 ++++ .../jetty/http2/hpack/HpackDecoder.java | 2 - .../jetty/http2/hpack/HpackEncoder.java | 46 ++++++++-- .../jetty/http2/hpack/MetaDataBuilder.java | 10 +- .../jetty/http2/hpack/HpackDecoderTest.java | 16 ++-- .../test/resources/jetty-logging.properties | 4 +- .../client/http/HttpReceiverOverHTTP2.java | 14 ++- .../HttpClientTransportOverHTTP2Test.java | 34 +++++++ .../server/HTTP2ServerConnectionFactory.java | 16 ++-- .../http2/server/HTTP2ServerSession.java | 2 +- 29 files changed, 589 insertions(+), 270 deletions(-) create mode 100644 jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/FailureFrame.java diff --git a/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2ClientSession.java b/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2ClientSession.java index 0fbaf32fd81..3be563d093c 100644 --- a/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2ClientSession.java +++ b/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2ClientSession.java @@ -98,7 +98,7 @@ public class HTTP2ClientSession extends HTTP2Session { if (LOG.isDebugEnabled()) LOG.debug("Stream #{} not found", streamId); - if ((streamId & 1) == 1) + if (isClientStream(streamId)) { // Normal stream. // Headers or trailers arriving after @@ -134,9 +134,12 @@ public class HTTP2ClientSession extends HTTP2Session else { IStream pushStream = createRemoteStream(pushStreamId); - pushStream.process(frame, Callback.NOOP); - Stream.Listener listener = notifyPush(stream, pushStream, frame); - pushStream.setListener(listener); + if (pushStream != null) + { + pushStream.process(frame, Callback.NOOP); + Stream.Listener listener = notifyPush(stream, pushStream, frame); + pushStream.setListener(listener); + } } } diff --git a/jetty-http2/http2-client/src/test/java/org/eclipse/jetty/http2/client/FlowControlStrategyTest.java b/jetty-http2/http2-client/src/test/java/org/eclipse/jetty/http2/client/FlowControlStrategyTest.java index 28862a21795..d601f2d3b17 100644 --- a/jetty-http2/http2-client/src/test/java/org/eclipse/jetty/http2/client/FlowControlStrategyTest.java +++ b/jetty-http2/http2-client/src/test/java/org/eclipse/jetty/http2/client/FlowControlStrategyTest.java @@ -734,7 +734,21 @@ public abstract class FlowControlStrategyTest public void testClientExceedingSessionWindow() throws Exception { // On server, we don't consume the data. - start(new ServerSessionListener.Adapter()); + start(new ServerSessionListener.Adapter() + { + @Override + public Stream.Listener onNewStream(Stream stream, HeadersFrame frame) + { + return new Stream.Listener.Adapter() + { + @Override + public void onData(Stream stream, DataFrame frame, Callback callback) + { + // Do not succeed the callback. + } + }; + } + }); final CountDownLatch closeLatch = new CountDownLatch(1); Session session = newClient(new Session.Listener.Adapter() @@ -805,6 +819,19 @@ public abstract class FlowControlStrategyTest ((ISession)session).updateRecvWindow(FlowControlStrategy.DEFAULT_WINDOW_SIZE); return super.onPreface(session); } + + @Override + public Stream.Listener onNewStream(Stream stream, HeadersFrame frame) + { + return new Stream.Listener.Adapter() + { + @Override + public void onData(Stream stream, DataFrame frame, Callback callback) + { + // Do not succeed the callback. + } + }; + } }); final CountDownLatch closeLatch = new CountDownLatch(1); diff --git a/jetty-http2/http2-client/src/test/java/org/eclipse/jetty/http2/client/HTTP2Test.java b/jetty-http2/http2-client/src/test/java/org/eclipse/jetty/http2/client/HTTP2Test.java index 9961e799e80..1a3a315d095 100644 --- a/jetty-http2/http2-client/src/test/java/org/eclipse/jetty/http2/client/HTTP2Test.java +++ b/jetty-http2/http2-client/src/test/java/org/eclipse/jetty/http2/client/HTTP2Test.java @@ -46,12 +46,7 @@ import org.eclipse.jetty.http2.api.server.ServerSessionListener; import org.eclipse.jetty.http2.frames.DataFrame; import org.eclipse.jetty.http2.frames.GoAwayFrame; import org.eclipse.jetty.http2.frames.HeadersFrame; -import org.eclipse.jetty.http2.frames.PingFrame; -import org.eclipse.jetty.http2.frames.PriorityFrame; -import org.eclipse.jetty.http2.frames.PushPromiseFrame; -import org.eclipse.jetty.http2.frames.ResetFrame; import org.eclipse.jetty.http2.frames.SettingsFrame; -import org.eclipse.jetty.http2.frames.WindowUpdateFrame; import org.eclipse.jetty.http2.parser.ServerParser; import org.eclipse.jetty.http2.server.RawHTTP2ServerConnectionFactory; import org.eclipse.jetty.server.Connector; @@ -752,7 +747,7 @@ public class HTTP2Test extends AbstractTest @Override protected ServerParser newServerParser(Connector connector, ServerParser.Listener listener) { - return super.newServerParser(connector, new ServerParserListenerWrapper(listener) + return super.newServerParser(connector, new ServerParser.Listener.Wrapper(listener) { @Override public void onGoAway(GoAwayFrame frame) @@ -806,80 +801,4 @@ public class HTTP2Test extends AbstractTest throw new RuntimeException(); } } - - private static class ServerParserListenerWrapper implements ServerParser.Listener - { - private final ServerParser.Listener listener; - - private ServerParserListenerWrapper(ServerParser.Listener listener) - { - this.listener = listener; - } - - @Override - public void onPreface() - { - listener.onPreface(); - } - - @Override - public void onData(DataFrame frame) - { - listener.onData(frame); - } - - @Override - public void onHeaders(HeadersFrame frame) - { - listener.onHeaders(frame); - } - - @Override - public void onPriority(PriorityFrame frame) - { - listener.onPriority(frame); - } - - @Override - public void onReset(ResetFrame frame) - { - listener.onReset(frame); - } - - @Override - public void onSettings(SettingsFrame frame) - { - listener.onSettings(frame); - } - - @Override - public void onPushPromise(PushPromiseFrame frame) - { - listener.onPushPromise(frame); - } - - @Override - public void onPing(PingFrame frame) - { - listener.onPing(frame); - } - - @Override - public void onGoAway(GoAwayFrame frame) - { - listener.onGoAway(frame); - } - - @Override - public void onWindowUpdate(WindowUpdateFrame frame) - { - listener.onWindowUpdate(frame); - } - - @Override - public void onConnectionFailure(int error, String reason) - { - listener.onConnectionFailure(error, reason); - } - } } diff --git a/jetty-http2/http2-client/src/test/java/org/eclipse/jetty/http2/client/TrailersTest.java b/jetty-http2/http2-client/src/test/java/org/eclipse/jetty/http2/client/TrailersTest.java index 6a6ddc4d640..e51778a653c 100644 --- a/jetty-http2/http2-client/src/test/java/org/eclipse/jetty/http2/client/TrailersTest.java +++ b/jetty-http2/http2-client/src/test/java/org/eclipse/jetty/http2/client/TrailersTest.java @@ -26,13 +26,13 @@ import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import javax.servlet.ServletException; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.eclipse.jetty.http.HttpFields; +import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpStatus; import org.eclipse.jetty.http.HttpVersion; import org.eclipse.jetty.http.MetaData; @@ -42,11 +42,13 @@ import org.eclipse.jetty.http2.api.server.ServerSessionListener; import org.eclipse.jetty.http2.frames.DataFrame; import org.eclipse.jetty.http2.frames.Frame; import org.eclipse.jetty.http2.frames.HeadersFrame; +import org.eclipse.jetty.http2.frames.ResetFrame; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.Response; import org.eclipse.jetty.util.Callback; import org.eclipse.jetty.util.FuturePromise; import org.eclipse.jetty.util.Promise; +import org.eclipse.jetty.util.StringUtil; import org.hamcrest.Matchers; import org.junit.Assert; import org.junit.Test; @@ -106,7 +108,7 @@ public class TrailersTest extends AbstractTest start(new HttpServlet() { @Override - protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException + protected void service(HttpServletRequest request, HttpServletResponse response) throws IOException { Request jettyRequest = (Request)request; // No trailers yet. @@ -238,7 +240,7 @@ public class TrailersTest extends AbstractTest start(new EmptyHttpServlet() { @Override - protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException + protected void service(HttpServletRequest request, HttpServletResponse response) throws IOException { Request jettyRequest = (Request)request; Response jettyResponse = jettyRequest.getResponse(); @@ -287,4 +289,63 @@ public class TrailersTest extends AbstractTest Assert.assertTrue(trailers.isEndStream()); Assert.assertThat(trailers.getMetaData().getFields().get(trailerName), Matchers.equalTo(trailerValue)); } + + @Test + public void testRequestTrailerInvalidHpack() throws Exception + { + CountDownLatch serverLatch = new CountDownLatch(1); + start(new HttpServlet() + { + @Override + protected void service(HttpServletRequest request, HttpServletResponse response) throws IOException + { + try + { + // Read the content to read the trailers + ServletInputStream input = request.getInputStream(); + while (true) + { + int read = input.read(); + if (read < 0) + break; + } + } + catch (IOException x) + { + serverLatch.countDown(); + throw x; + } + } + }); + + CountDownLatch clientLatch = new CountDownLatch(1); + Session session = newClient(new Session.Listener.Adapter()); + MetaData.Request request = newRequest("POST", new HttpFields()); + HeadersFrame requestFrame = new HeadersFrame(request, null, false); + FuturePromise promise = new FuturePromise<>(); + session.newStream(requestFrame, promise, new Stream.Listener.Adapter() + { + @Override + public void onReset(Stream stream, ResetFrame frame) + { + clientLatch.countDown(); + } + }); + Stream stream = promise.get(5, TimeUnit.SECONDS); + ByteBuffer data = ByteBuffer.wrap(StringUtil.getUtf8Bytes("hello")); + Callback.Completable completable = new Callback.Completable(); + stream.data(new DataFrame(stream.getId(), data, false), completable); + completable.thenRun(() -> + { + // Invalid trailer: cannot contain pseudo headers. + HttpFields trailerFields = new HttpFields(); + trailerFields.put(HttpHeader.C_METHOD, "GET"); + MetaData trailer = new MetaData(HttpVersion.HTTP_2, trailerFields); + HeadersFrame trailerFrame = new HeadersFrame(stream.getId(), trailer, null, true); + stream.headers(trailerFrame, Callback.NOOP); + }); + + Assert.assertTrue(serverLatch.await(5, TimeUnit.SECONDS)); + Assert.assertTrue(clientLatch.await(5, TimeUnit.SECONDS)); + } } diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/ErrorCode.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/ErrorCode.java index 8d38a0e852b..aae6c082ccd 100644 --- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/ErrorCode.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/ErrorCode.java @@ -19,6 +19,7 @@ package org.eclipse.jetty.http2; import java.util.HashMap; +import java.util.Locale; import java.util.Map; /** @@ -96,6 +97,19 @@ public enum ErrorCode return Codes.codes.get(error); } + public static String toString(int error, String dft) + { + ErrorCode errorCode = from(error); + String result; + if (errorCode != null) + result = errorCode.name().toLowerCase(Locale.ENGLISH); + else if (dft == null) + result = String.valueOf(error); + else + result = dft; + return result; + } + private static class Codes { private static final Map codes = new HashMap<>(); diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Connection.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Connection.java index 534359990f8..c13cbb62d80 100644 --- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Connection.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Connection.java @@ -27,14 +27,6 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; import org.eclipse.jetty.http2.frames.DataFrame; -import org.eclipse.jetty.http2.frames.GoAwayFrame; -import org.eclipse.jetty.http2.frames.HeadersFrame; -import org.eclipse.jetty.http2.frames.PingFrame; -import org.eclipse.jetty.http2.frames.PriorityFrame; -import org.eclipse.jetty.http2.frames.PushPromiseFrame; -import org.eclipse.jetty.http2.frames.ResetFrame; -import org.eclipse.jetty.http2.frames.SettingsFrame; -import org.eclipse.jetty.http2.frames.WindowUpdateFrame; import org.eclipse.jetty.http2.parser.Parser; import org.eclipse.jetty.io.AbstractConnection; import org.eclipse.jetty.io.ByteBufferPool; @@ -220,6 +212,7 @@ public class HTTP2Connection extends AbstractConnection implements WriteFlusher. private final Callback fillableCallback = new FillableCallback(); private NetworkBuffer buffer; private boolean shutdown; + private boolean failed; private void setInputBuffer(ByteBuffer byteBuffer) { @@ -237,7 +230,7 @@ public class HTTP2Connection extends AbstractConnection implements WriteFlusher. if (task != null) return task; - if (isFillInterested() || shutdown) + if (isFillInterested() || shutdown || failed) return null; if (buffer == null) @@ -248,11 +241,22 @@ public class HTTP2Connection extends AbstractConnection implements WriteFlusher. if (parse) { buffer.retain(); - - while (buffer.hasRemaining()) - parser.parse(buffer.buffer); - - boolean released = buffer.tryRelease(); + boolean released; + try + { + while (buffer.hasRemaining()) + { + parser.parse(buffer.buffer); + if (failed) + return null; + } + } + finally + { + released = buffer.tryRelease(); + if (failed && released) + releaseNetworkBuffer(); + } task = pollTask(); if (LOG.isDebugEnabled()) @@ -345,13 +349,11 @@ public class HTTP2Connection extends AbstractConnection implements WriteFlusher. } } - private class ParserListener implements Parser.Listener + private class ParserListener extends Parser.Listener.Wrapper { - private final Parser.Listener listener; - private ParserListener(Parser.Listener listener) { - this.listener = listener; + super(listener); } @Override @@ -363,58 +365,11 @@ public class HTTP2Connection extends AbstractConnection implements WriteFlusher. session.onData(frame, callback); } - @Override - public void onHeaders(HeadersFrame frame) - { - listener.onHeaders(frame); - } - - @Override - public void onPriority(PriorityFrame frame) - { - listener.onPriority(frame); - } - - @Override - public void onReset(ResetFrame frame) - { - listener.onReset(frame); - } - - @Override - public void onSettings(SettingsFrame frame) - { - listener.onSettings(frame); - } - - @Override - public void onPushPromise(PushPromiseFrame frame) - { - listener.onPushPromise(frame); - } - - @Override - public void onPing(PingFrame frame) - { - listener.onPing(frame); - } - - @Override - public void onGoAway(GoAwayFrame frame) - { - listener.onGoAway(frame); - } - - @Override - public void onWindowUpdate(WindowUpdateFrame frame) - { - listener.onWindowUpdate(frame); - } - @Override public void onConnectionFailure(int error, String reason) { - listener.onConnectionFailure(error, reason); + producer.failed = true; + super.onConnectionFailure(error, reason); } } diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Session.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Session.java index 53fdda5a4b7..04279864c5d 100644 --- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Session.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Session.java @@ -37,6 +37,7 @@ import org.eclipse.jetty.http2.api.Session; import org.eclipse.jetty.http2.api.Stream; import org.eclipse.jetty.http2.frames.DataFrame; import org.eclipse.jetty.http2.frames.DisconnectFrame; +import org.eclipse.jetty.http2.frames.FailureFrame; import org.eclipse.jetty.http2.frames.Frame; import org.eclipse.jetty.http2.frames.FrameType; import org.eclipse.jetty.http2.frames.GoAwayFrame; @@ -106,7 +107,7 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio this.maxLocalStreams = -1; this.maxRemoteStreams = -1; this.localStreamIds.set(initialStreamId); - this.lastRemoteStreamId.set((initialStreamId & 0x01) == 0x01 ? 0 : -1); + this.lastRemoteStreamId.set(isClientStream(initialStreamId) ? 0 : -1); this.streamIdleTimeout = endPoint.getIdleTimeout(); this.sendWindow.set(FlowControlStrategy.DEFAULT_WINDOW_SIZE); this.recvWindow.set(FlowControlStrategy.DEFAULT_WINDOW_SIZE); @@ -251,7 +252,9 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio // We must enlarge the session flow control window, // otherwise other requests will be stalled. flowControl.onDataConsumed(this, null, flowControlLength); - if (isRemoteStreamClosed(streamId)) + boolean local = (streamId & 1) == (localStreamIds.get() & 1); + boolean closed = local ? isLocalStreamClosed(streamId) : isRemoteStreamClosed(streamId); + if (closed) reset(new ResetFrame(streamId, ErrorCode.STREAM_CLOSED_ERROR.code), callback); else onConnectionFailure(ErrorCode.PROTOCOL_ERROR.code, "unexpected_data_frame", callback); @@ -288,7 +291,7 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio IStream stream = getStream(streamId); if (stream != null) { - stream.process(frame, new ResetCallback()); + stream.process(frame, new OnResetCallback()); } else { @@ -501,6 +504,17 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio } } + @Override + public void onStreamFailure(int streamId, int error, String reason) + { + Callback callback = new ResetCallback(streamId, error, Callback.NOOP); + IStream stream = getStream(streamId); + if (stream != null) + stream.process(new FailureFrame(error, reason), callback); + else + callback.succeeded(); + } + private boolean sumOverflows(int a, int b) { try @@ -520,7 +534,7 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio onConnectionFailure(error, reason, Callback.NOOP); } - private void onConnectionFailure(int error, String reason, Callback callback) + protected void onConnectionFailure(int error, String reason, Callback callback) { notifyFailure(this, new IOException(String.format("%d/%s", error, reason)), new CloseCallback(error, reason, callback)); } @@ -1181,6 +1195,12 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio } } + protected static boolean isClientStream(int streamId) + { + // Client-initiated stream ids are odd. + return (streamId & 1) == 1; + } + @Override public void dump(Appendable out, String indent) throws IOException { @@ -1509,7 +1529,37 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio } } - private class ResetCallback implements Callback + private class ResetCallback extends Callback.Nested + { + private final int streamId; + private final int error; + + private ResetCallback(int streamId, int error, Callback callback) + { + super(callback); + this.streamId = streamId; + this.error = error; + } + + @Override + public void succeeded() + { + complete(); + } + + @Override + public void failed(Throwable x) + { + complete(); + } + + private void complete() + { + reset(new ResetFrame(streamId, error), getCallback()); + } + } + + private class OnResetCallback implements Callback { @Override public void succeeded() @@ -1535,17 +1585,16 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio } } - private class CloseCallback implements Callback + private class CloseCallback extends Callback.Nested { private final int error; private final String reason; - private final Callback callback; private CloseCallback(int error, String reason, Callback callback) { + super(callback); this.error = error; this.reason = reason; - this.callback = callback; } @Override @@ -1560,15 +1609,9 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio complete(); } - @Override - public InvocationType getInvocationType() - { - return InvocationType.NON_BLOCKING; - } - private void complete() { - close(error, reason, callback); + close(error, reason, getCallback()); } } diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Stream.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Stream.java index 6320b9efab1..ce5c3e7ad46 100644 --- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Stream.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Stream.java @@ -30,6 +30,7 @@ import java.util.concurrent.atomic.AtomicReference; import org.eclipse.jetty.http2.api.Stream; import org.eclipse.jetty.http2.frames.DataFrame; +import org.eclipse.jetty.http2.frames.FailureFrame; import org.eclipse.jetty.http2.frames.Frame; import org.eclipse.jetty.http2.frames.HeadersFrame; import org.eclipse.jetty.http2.frames.PushPromiseFrame; @@ -255,6 +256,11 @@ public class HTTP2Stream extends IdleTimeout implements IStream, Callback, Dumpa onWindowUpdate((WindowUpdateFrame)frame, callback); break; } + case FAILURE: + { + onFailure((FailureFrame)frame, callback); + break; + } default: { throw new UnsupportedOperationException(); @@ -321,6 +327,11 @@ public class HTTP2Stream extends IdleTimeout implements IStream, Callback, Dumpa callback.succeeded(); } + private void onFailure(FailureFrame frame, Callback callback) + { + notifyFailure(this, frame, callback); + } + @Override public boolean updateClose(boolean update, CloseState.Event event) { @@ -498,31 +509,43 @@ public class HTTP2Stream extends IdleTimeout implements IStream, Callback, Dumpa private void notifyData(Stream stream, DataFrame frame, Callback callback) { - final Listener listener = this.listener; - if (listener == null) - return; - try + Listener listener = this.listener; + if (listener != null) { - listener.onData(stream, frame, callback); + try + { + listener.onData(stream, frame, callback); + } + catch (Throwable x) + { + LOG.info("Failure while notifying listener " + listener, x); + callback.failed(x); + } } - catch (Throwable x) + else { - LOG.info("Failure while notifying listener " + listener, x); + callback.succeeded(); } } private void notifyReset(Stream stream, ResetFrame frame, Callback callback) { - final Listener listener = this.listener; - if (listener == null) - return; - try + Listener listener = this.listener; + if (listener != null) { - listener.onReset(stream, frame, callback); + try + { + listener.onReset(stream, frame, callback); + } + catch (Throwable x) + { + LOG.info("Failure while notifying listener " + listener, x); + callback.failed(x); + } } - catch (Throwable x) + else { - LOG.info("Failure while notifying listener " + listener, x); + callback.succeeded(); } } @@ -542,6 +565,27 @@ public class HTTP2Stream extends IdleTimeout implements IStream, Callback, Dumpa } } + private void notifyFailure(Stream stream, FailureFrame frame, Callback callback) + { + Listener listener = this.listener; + if (listener != null) + { + try + { + listener.onFailure(stream, frame.getError(), frame.getReason(), callback); + } + catch (Throwable x) + { + LOG.info("Failure while notifying listener " + listener, x); + callback.failed(x); + } + } + else + { + callback.succeeded(); + } + } + @Override public String dump() { diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/api/Stream.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/api/Stream.java index 0d8f49f886b..f76afeaf445 100644 --- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/api/Stream.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/api/Stream.java @@ -214,6 +214,11 @@ public interface Stream return true; } + public default void onFailure(Stream stream, int error, String reason, Callback callback) + { + callback.succeeded(); + } + /** *

Empty implementation of {@link Listener}

*/ diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/FailureFrame.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/FailureFrame.java new file mode 100644 index 00000000000..ea16526d15d --- /dev/null +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/FailureFrame.java @@ -0,0 +1,42 @@ +// +// ======================================================================== +// Copyright (c) 1995-2018 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.http2.frames; + +public class FailureFrame extends Frame +{ + private final int error; + private final String reason; + + public FailureFrame(int error, String reason) + { + super(FrameType.FAILURE); + this.error = error; + this.reason = reason; + } + + public int getError() + { + return error; + } + + public String getReason() + { + return reason; + } +} diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/FrameType.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/FrameType.java index 917aa99cc4a..3353c85a5b2 100644 --- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/FrameType.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/FrameType.java @@ -35,7 +35,8 @@ public enum FrameType CONTINUATION(9), // Synthetic frames only needed by the implementation. PREFACE(10), - DISCONNECT(11); + DISCONNECT(11), + FAILURE(12); public static FrameType from(int type) { diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/GoAwayFrame.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/GoAwayFrame.java index e603771dee9..57a2dd5c5d0 100644 --- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/GoAwayFrame.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/GoAwayFrame.java @@ -76,11 +76,10 @@ public class GoAwayFrame extends Frame @Override public String toString() { - ErrorCode errorCode = ErrorCode.from(error); return String.format("%s,%d/%s/%s/%s", super.toString(), lastStreamId, - errorCode != null ? errorCode.toString() : String.valueOf(error), + ErrorCode.toString(error, null), tryConvertPayload(), closeState); } diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/ResetFrame.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/ResetFrame.java index d86c8ca9713..b05a6812ca6 100644 --- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/ResetFrame.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/ResetFrame.java @@ -18,8 +18,6 @@ package org.eclipse.jetty.http2.frames; -import java.util.Locale; - import org.eclipse.jetty.http2.ErrorCode; public class ResetFrame extends Frame @@ -49,8 +47,6 @@ public class ResetFrame extends Frame @Override public String toString() { - ErrorCode errorCode = ErrorCode.from(error); - String reason = errorCode == null ? "error=" + error : errorCode.name().toLowerCase(Locale.ENGLISH); - return String.format("%s#%d{%s}", super.toString(), streamId, reason); + return String.format("%s#%d{%s}", super.toString(), streamId, ErrorCode.toString(error, null)); } } diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/BodyParser.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/BodyParser.java index 68b655ce694..369f312618e 100644 --- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/BodyParser.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/BodyParser.java @@ -222,4 +222,21 @@ public abstract class BodyParser LOG.info("Failure while notifying listener " + listener, x); } } + + protected void streamFailure(int streamId, int error, String reason) + { + notifyStreamFailure(streamId, error, reason); + } + + private void notifyStreamFailure(int streamId, int error, String reason) + { + try + { + listener.onStreamFailure(streamId, error, reason); + } + catch (Throwable x) + { + LOG.info("Failure while notifying listener " + listener, x); + } + } } diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/ContinuationBodyParser.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/ContinuationBodyParser.java index ca997feba70..db52392be3b 100644 --- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/ContinuationBodyParser.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/ContinuationBodyParser.java @@ -81,7 +81,7 @@ public class ContinuationBodyParser extends BodyParser headerBlockFragments.storeFragment(buffer, length, last); reset(); if (last) - onHeaders(); + return onHeaders(); return true; } } @@ -94,12 +94,17 @@ public class ContinuationBodyParser extends BodyParser return false; } - private void onHeaders() + private boolean onHeaders() { ByteBuffer headerBlock = headerBlockFragments.complete(); MetaData metaData = headerBlockParser.parse(headerBlock, headerBlock.remaining()); + if (metaData == HeaderBlockParser.SESSION_FAILURE) + return false; + if (metaData == null || metaData == HeaderBlockParser.STREAM_FAILURE) + return true; HeadersFrame frame = new HeadersFrame(getStreamId(), metaData, headerBlockFragments.getPriorityFrame(), headerBlockFragments.isEndStream()); notifyHeaders(frame); + return true; } private void reset() diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/HeaderBlockParser.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/HeaderBlockParser.java index 922388be2a1..7dc2e2c357c 100644 --- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/HeaderBlockParser.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/HeaderBlockParser.java @@ -20,26 +20,46 @@ package org.eclipse.jetty.http2.parser; import java.nio.ByteBuffer; -import org.eclipse.jetty.http.BadMessageException; +import org.eclipse.jetty.http.HttpVersion; import org.eclipse.jetty.http.MetaData; +import org.eclipse.jetty.http2.ErrorCode; import org.eclipse.jetty.http2.hpack.HpackDecoder; -import org.eclipse.jetty.http2.hpack.HpackException.SessionException; -import org.eclipse.jetty.http2.hpack.HpackException.StreamException; +import org.eclipse.jetty.http2.hpack.HpackException; import org.eclipse.jetty.io.ByteBufferPool; import org.eclipse.jetty.util.BufferUtil; +import org.eclipse.jetty.util.log.Log; +import org.eclipse.jetty.util.log.Logger; public class HeaderBlockParser { + public static final MetaData STREAM_FAILURE = new MetaData(HttpVersion.HTTP_2, null); + public static final MetaData SESSION_FAILURE = new MetaData(HttpVersion.HTTP_2, null); + private static final Logger LOG = Log.getLogger(HeaderBlockParser.class); + + private final HeaderParser headerParser; private final ByteBufferPool byteBufferPool; private final HpackDecoder hpackDecoder; + private final BodyParser notifier; private ByteBuffer blockBuffer; - public HeaderBlockParser(ByteBufferPool byteBufferPool, HpackDecoder hpackDecoder) + public HeaderBlockParser(HeaderParser headerParser, ByteBufferPool byteBufferPool, HpackDecoder hpackDecoder, BodyParser notifier) { + this.headerParser = headerParser; this.byteBufferPool = byteBufferPool; this.hpackDecoder = hpackDecoder; + this.notifier = notifier; } + /** + * Parses @{code blockLength} HPACK bytes from the given {@code buffer}. + * + * @param buffer the buffer to parse + * @param blockLength the length of the HPACK block + * @return null, if the buffer contains less than {@code blockLength} bytes; + * {@link #STREAM_FAILURE} if parsing the HPACK block produced a stream failure; + * {@link #SESSION_FAILURE} if parsing the HPACK block produced a session failure; + * a valid MetaData object if the parsing was successful. + */ public MetaData parse(ByteBuffer buffer, int blockLength) { // We must wait for the all the bytes of the header block to arrive. @@ -77,35 +97,28 @@ public class HeaderBlockParser try { - MetaData metadata = hpackDecoder.decode(toDecode); - - if (metadata instanceof MetaData.Request) - { - // TODO this must be an initial HEADERs frame received by the server OR - // TODO a push promise received by the client. - // TODO this must not be a trailers frame - } - else if (metadata instanceof MetaData.Response) - { - // TODO this must be an initial HEADERs frame received by the client - // TODO this must not be a trailers frame - } - else - { - // TODO this must be a trailers frame - } - - return metadata; + return hpackDecoder.decode(toDecode); } - catch(StreamException ex) + catch (HpackException.StreamException x) { - // TODO reset the stream - throw new BadMessageException("TODO"); + if (LOG.isDebugEnabled()) + LOG.debug(x); + notifier.streamFailure(headerParser.getStreamId(), ErrorCode.PROTOCOL_ERROR.code, "invalid_hpack_block"); + return STREAM_FAILURE; } - catch(SessionException ex) + catch (HpackException.CompressionException x) { - // TODO reset the session - throw new BadMessageException("TODO"); + if (LOG.isDebugEnabled()) + LOG.debug(x); + notifier.connectionFailure(buffer, ErrorCode.COMPRESSION_ERROR.code, "invalid_hpack_block"); + return SESSION_FAILURE; + } + catch (HpackException.SessionException x) + { + if (LOG.isDebugEnabled()) + LOG.debug(x); + notifier.connectionFailure(buffer, ErrorCode.PROTOCOL_ERROR.code, "invalid_hpack_block"); + return SESSION_FAILURE; } finally { diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/HeadersBodyParser.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/HeadersBodyParser.java index f31c937b33b..2a1df70a4cd 100644 --- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/HeadersBodyParser.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/HeadersBodyParser.java @@ -170,13 +170,16 @@ public class HeadersBodyParser extends BodyParser if (hasFlag(Flags.END_HEADERS)) { MetaData metaData = headerBlockParser.parse(buffer, length); + if (metaData == HeaderBlockParser.SESSION_FAILURE) + return false; if (metaData != null) { if (LOG.isDebugEnabled()) LOG.debug("Parsed {} frame hpack from {}", FrameType.HEADERS, buffer); state = State.PADDING; loop = paddingLength == 0; - onHeaders(parentStreamId, weight, exclusive, metaData); + if (metaData != HeaderBlockParser.STREAM_FAILURE) + onHeaders(parentStreamId, weight, exclusive, metaData); } } else diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/Parser.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/Parser.java index 71e49393399..4b45c7320fd 100644 --- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/Parser.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/Parser.java @@ -36,7 +36,6 @@ import org.eclipse.jetty.http2.frames.SettingsFrame; import org.eclipse.jetty.http2.frames.WindowUpdateFrame; import org.eclipse.jetty.http2.hpack.HpackDecoder; import org.eclipse.jetty.io.ByteBufferPool; -import org.eclipse.jetty.util.BufferUtil; import org.eclipse.jetty.util.log.Log; import org.eclipse.jetty.util.log.Logger; @@ -63,8 +62,8 @@ public class Parser { this.listener = listener; this.headerParser = new HeaderParser(); - this.headerBlockParser = new HeaderBlockParser(byteBufferPool, new HpackDecoder(maxDynamicTableSize, maxHeaderSize)); this.unknownBodyParser = new UnknownBodyParser(headerParser, listener); + this.headerBlockParser = new HeaderBlockParser(headerParser, byteBufferPool, new HpackDecoder(maxDynamicTableSize, maxHeaderSize), unknownBodyParser); this.maxFrameLength = Frame.DEFAULT_MAX_LENGTH; this.bodyParsers = new BodyParser[FrameType.values().length]; } @@ -265,6 +264,8 @@ public class Parser public void onWindowUpdate(WindowUpdateFrame frame); + public void onStreamFailure(int streamId, int error, String reason); + public void onConnectionFailure(int error, String reason); public static class Adapter implements Listener @@ -314,12 +315,98 @@ public class Parser { } + @Override + public void onStreamFailure(int streamId, int error, String reason) + { + } + @Override public void onConnectionFailure(int error, String reason) { LOG.warn("Connection failure: {}/{}", error, reason); } } + + public static class Wrapper implements Listener + { + private final Parser.Listener listener; + + public Wrapper(Parser.Listener listener) + { + this.listener = listener; + } + + public Listener getParserListener() + { + return listener; + } + + @Override + public void onData(DataFrame frame) + { + listener.onData(frame); + } + + @Override + public void onHeaders(HeadersFrame frame) + { + listener.onHeaders(frame); + } + + @Override + public void onPriority(PriorityFrame frame) + { + listener.onPriority(frame); + } + + @Override + public void onReset(ResetFrame frame) + { + listener.onReset(frame); + } + + @Override + public void onSettings(SettingsFrame frame) + { + listener.onSettings(frame); + } + + @Override + public void onPushPromise(PushPromiseFrame frame) + { + listener.onPushPromise(frame); + } + + @Override + public void onPing(PingFrame frame) + { + listener.onPing(frame); + } + + @Override + public void onGoAway(GoAwayFrame frame) + { + listener.onGoAway(frame); + } + + @Override + public void onWindowUpdate(WindowUpdateFrame frame) + { + listener.onWindowUpdate(frame); + } + + @Override + public void onStreamFailure(int streamId, int error, String reason) + { + listener.onStreamFailure(streamId, error, reason); + } + + @Override + public void onConnectionFailure(int error, String reason) + { + listener.onConnectionFailure(error, reason); + } + } } private enum State diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/PushPromiseBodyParser.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/PushPromiseBodyParser.java index 508936b2c02..c46da3dcb39 100644 --- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/PushPromiseBodyParser.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/PushPromiseBodyParser.java @@ -125,11 +125,14 @@ public class PushPromiseBodyParser extends BodyParser case HEADERS: { MetaData metaData = headerBlockParser.parse(buffer, length); + if (metaData == HeaderBlockParser.SESSION_FAILURE) + return false; if (metaData != null) { state = State.PADDING; loop = paddingLength == 0; - onPushPromise(streamId, metaData); + if (metaData != HeaderBlockParser.STREAM_FAILURE) + onPushPromise(streamId, metaData); } break; } diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/ServerParser.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/ServerParser.java index 2b2c3a1dfd1..2f688b1161c 100644 --- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/ServerParser.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/ServerParser.java @@ -158,6 +158,26 @@ public class ServerParser extends Parser { } } + + public static class Wrapper extends Parser.Listener.Wrapper implements Listener + { + public Wrapper(ServerParser.Listener listener) + { + super(listener); + } + + @Override + public ServerParser.Listener getParserListener() + { + return (Listener)super.getParserListener(); + } + + @Override + public void onPreface() + { + getParserListener().onPreface(); + } + } } private enum State diff --git a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackDecoder.java b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackDecoder.java index 083f10b8bc5..df7b2a6e971 100644 --- a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackDecoder.java +++ b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackDecoder.java @@ -23,10 +23,8 @@ import java.nio.ByteBuffer; import org.eclipse.jetty.http.HttpField; import org.eclipse.jetty.http.HttpHeader; -import org.eclipse.jetty.http.HttpStatus; import org.eclipse.jetty.http.MetaData; import org.eclipse.jetty.http2.hpack.HpackContext.Entry; - import org.eclipse.jetty.util.TypeUtil; import org.eclipse.jetty.util.log.Log; import org.eclipse.jetty.util.log.Logger; diff --git a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackEncoder.java b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackEncoder.java index 0bb5bb70fe3..9f9ee924f97 100644 --- a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackEncoder.java +++ b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/HpackEncoder.java @@ -21,8 +21,11 @@ package org.eclipse.jetty.http2.hpack; import java.nio.ByteBuffer; import java.util.EnumSet; +import java.util.Set; +import java.util.stream.Collectors; import org.eclipse.jetty.http.HttpField; +import org.eclipse.jetty.http.HttpFields; import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpScheme; import org.eclipse.jetty.http.HttpStatus; @@ -31,6 +34,9 @@ import org.eclipse.jetty.http.MetaData; import org.eclipse.jetty.http.PreEncodedHttpField; import org.eclipse.jetty.http2.hpack.HpackContext.Entry; import org.eclipse.jetty.http2.hpack.HpackContext.StaticEntry; +import org.eclipse.jetty.util.ArrayTrie; +import org.eclipse.jetty.util.StringUtil; +import org.eclipse.jetty.util.Trie; import org.eclipse.jetty.util.TypeUtil; import org.eclipse.jetty.util.log.Log; import org.eclipse.jetty.util.log.Logger; @@ -38,17 +44,13 @@ import org.eclipse.jetty.util.log.Logger; public class HpackEncoder { public static final Logger LOG = Log.getLogger(HpackEncoder.class); - private final static HttpField[] __status= new HttpField[599]; - - final static EnumSet __DO_NOT_HUFFMAN = EnumSet.of( HttpHeader.AUTHORIZATION, HttpHeader.CONTENT_MD5, HttpHeader.PROXY_AUTHENTICATE, HttpHeader.PROXY_AUTHORIZATION); - final static EnumSet __DO_NOT_INDEX = EnumSet.of( // HttpHeader.C_PATH, // TODO more data needed @@ -69,18 +71,21 @@ public class HpackEncoder HttpHeader.LAST_MODIFIED, HttpHeader.SET_COOKIE, HttpHeader.SET_COOKIE2); - - final static EnumSet __NEVER_INDEX = EnumSet.of( HttpHeader.AUTHORIZATION, HttpHeader.SET_COOKIE, HttpHeader.SET_COOKIE2); + private static final PreEncodedHttpField CONNECTION_TE = new PreEncodedHttpField(HttpHeader.CONNECTION, "te"); + private static final PreEncodedHttpField TE_TRAILERS = new PreEncodedHttpField(HttpHeader.TE, "trailers"); + private static final Trie specialHopHeaders = new ArrayTrie<>(6); static { for (HttpStatus.Code code : HttpStatus.Code.values()) __status[code.getCode()]=new PreEncodedHttpField(HttpHeader.C_STATUS,Integer.toString(code.getCode())); + specialHopHeaders.put("close", true); + specialHopHeaders.put("te", true); } private final HpackContext _context; @@ -174,9 +179,30 @@ public class HpackEncoder encode(buffer,status); } - // Add all the other fields - for (HttpField field : metadata) - encode(buffer,field); + // Add all non-connection fields. + HttpFields fields = metadata.getFields(); + if (fields != null) + { + Set hopHeaders = fields.getCSV(HttpHeader.CONNECTION, false).stream() + .filter(v -> specialHopHeaders.get(v) == Boolean.TRUE) + .map(StringUtil::asciiToLowerCase) + .collect(Collectors.toSet()); + for (HttpField field : fields) + { + if (field.getHeader() == HttpHeader.CONNECTION) + continue; + if (!hopHeaders.isEmpty() && hopHeaders.contains(StringUtil.asciiToLowerCase(field.getName()))) + continue; + if (field.getHeader() == HttpHeader.TE) + { + if (!field.contains("trailers")) + continue; + encode(buffer, CONNECTION_TE); + encode(buffer, TE_TRAILERS); + } + encode(buffer,field); + } + } // Check size if (_maxHeaderListSize>0 && _headerListSize>_maxHeaderListSize) @@ -305,7 +331,7 @@ public class HpackEncoder encoding="Lit"+ ((name==null)?"HuffN":("IdxN"+(name.isStatic()?"S":"")+(1+NBitInteger.octectsNeeded(4,_context.index(name)))))+ (huffman?"HuffV":"LitV")+ - (indexed?"Idx":(never_index?"!!Idx":"!Idx")); + (never_index?"!!Idx":"!Idx"); } else if (field_size>=_context.getMaxDynamicTableSize() || header==HttpHeader.CONTENT_LENGTH && field.getValue().length()>2) { diff --git a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java index 74cc77da705..d891ab3dfe5 100644 --- a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java +++ b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/MetaDataBuilder.java @@ -170,19 +170,19 @@ public class MetaDataBuilder if ("trailers".equalsIgnoreCase(value)) _fields.add(field); else - streamException("Unsupported TE value %s", value); + streamException("Unsupported TE value '%s'", value); break; case CONNECTION: if ("TE".equalsIgnoreCase(value)) _fields.add(field); else - streamException("Connection specific field %s", header); + streamException("Connection specific field '%s'", header); break; default: if (name.charAt(0)==':') - streamException("Unknown pseudo header %s", name); + streamException("Unknown pseudo header '%s'", name); else _fields.add(field); break; @@ -191,7 +191,7 @@ public class MetaDataBuilder else { if (name.charAt(0)==':') - streamException("Unknown pseudo header %s",name); + streamException("Unknown pseudo header '%s'",name); else _fields.add(field); } @@ -281,7 +281,7 @@ public class MetaDataBuilder * Check that the max size will not be exceeded. * @param length the length * @param huffman the huffman name - * @throws SessionException + * @throws SessionException in case of size errors */ public void checkSize(int length, boolean huffman) throws SessionException { diff --git a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java index 05b21814c39..37b65015f78 100644 --- a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java +++ b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java @@ -19,12 +19,6 @@ package org.eclipse.jetty.http2.hpack; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertThat; -import static org.junit.Assert.assertTrue; - import java.nio.ByteBuffer; import java.util.Iterator; @@ -39,6 +33,12 @@ import org.hamcrest.Matchers; import org.junit.Assert; import org.junit.Test; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + public class HpackDecoderTest { @Test @@ -327,7 +327,7 @@ public class HpackDecoderTest } catch(StreamException ex) { - Assert.assertThat(ex.getMessage(),Matchers.containsString("Connection specific field Connection")); + Assert.assertThat(ex.getMessage(),Matchers.containsString("Connection specific field 'Connection'")); } // 2: Sends a HEADERS frame that contains the TE header field with any value other than "trailers" @@ -340,7 +340,7 @@ public class HpackDecoderTest } catch(StreamException ex) { - Assert.assertThat(ex.getMessage(),Matchers.containsString("Unsupported TE value not_trailers")); + Assert.assertThat(ex.getMessage(),Matchers.containsString("Unsupported TE value 'not_trailers'")); } diff --git a/jetty-http2/http2-hpack/src/test/resources/jetty-logging.properties b/jetty-http2/http2-hpack/src/test/resources/jetty-logging.properties index e40e8e43ce1..f4e33644f4c 100644 --- a/jetty-http2/http2-hpack/src/test/resources/jetty-logging.properties +++ b/jetty-http2/http2-hpack/src/test/resources/jetty-logging.properties @@ -1,3 +1,3 @@ org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.StdErrLog -org.eclipse.jetty.http2.LEVEL=INFO -org.eclipse.jetty.http2.hpack.LEVEL=INFO +#org.eclipse.jetty.http2.LEVEL=DEBUG +#org.eclipse.jetty.http2.hpack.LEVEL=DEBUG diff --git a/jetty-http2/http2-http-client-transport/src/main/java/org/eclipse/jetty/http2/client/http/HttpReceiverOverHTTP2.java b/jetty-http2/http2-http-client-transport/src/main/java/org/eclipse/jetty/http2/client/http/HttpReceiverOverHTTP2.java index 354e19f5e45..a0f1817a6bb 100644 --- a/jetty-http2/http2-http-client-transport/src/main/java/org/eclipse/jetty/http2/client/http/HttpReceiverOverHTTP2.java +++ b/jetty-http2/http2-http-client-transport/src/main/java/org/eclipse/jetty/http2/client/http/HttpReceiverOverHTTP2.java @@ -23,7 +23,6 @@ import java.nio.ByteBuffer; import java.util.ArrayDeque; import java.util.Collections; import java.util.List; -import java.util.Locale; import java.util.Queue; import java.util.function.BiFunction; @@ -165,10 +164,8 @@ public class HttpReceiverOverHTTP2 extends HttpReceiver implements Stream.Listen HttpExchange exchange = getHttpExchange(); if (exchange == null) return; - - ErrorCode error = ErrorCode.from(frame.getError()); - String reason = error == null ? "reset" : error.name().toLowerCase(Locale.ENGLISH); - exchange.getRequest().abort(new IOException(reason)); + int error = frame.getError(); + exchange.getRequest().abort(new IOException(ErrorCode.toString(error, "reset_code_" + error))); } @Override @@ -178,6 +175,13 @@ public class HttpReceiverOverHTTP2 extends HttpReceiver implements Stream.Listen return true; } + @Override + public void onFailure(Stream stream, int error, String reason, Callback callback) + { + responseFailure(new IOException(String.format("%s/%s", ErrorCode.toString(error, null), reason))); + callback.succeeded(); + } + private void notifyContent(HttpExchange exchange, DataFrame frame, Callback callback) { contentNotifier.offer(new DataInfo(exchange, frame, callback)); diff --git a/jetty-http2/http2-http-client-transport/src/test/java/org/eclipse/jetty/http2/client/http/HttpClientTransportOverHTTP2Test.java b/jetty-http2/http2-http-client-transport/src/test/java/org/eclipse/jetty/http2/client/http/HttpClientTransportOverHTTP2Test.java index e668fc20056..a6eb2acb7a8 100644 --- a/jetty-http2/http2-http-client-transport/src/test/java/org/eclipse/jetty/http2/client/http/HttpClientTransportOverHTTP2Test.java +++ b/jetty-http2/http2-http-client-transport/src/test/java/org/eclipse/jetty/http2/client/http/HttpClientTransportOverHTTP2Test.java @@ -576,6 +576,40 @@ public class HttpClientTransportOverHTTP2Test extends AbstractTest Assert.assertArrayEquals(bytes, response.getContent()); } + @Test + public void testInvalidResponseHPack() throws Exception + { + start(new ServerSessionListener.Adapter() + { + @Override + public Stream.Listener onNewStream(Stream stream, HeadersFrame frame) + { + // Produce an invalid HPACK block by adding a request pseudo-header to the response. + HttpFields fields = new HttpFields(); + fields.put(":method", "get"); + MetaData.Response response = new MetaData.Response(HttpVersion.HTTP_2, HttpStatus.OK_200, fields, 0); + int streamId = stream.getId(); + HeadersFrame responseFrame = new HeadersFrame(streamId, response, null, false); + Callback.Completable callback = new Callback.Completable(); + stream.headers(responseFrame, callback); + byte[] bytes = "hello".getBytes(StandardCharsets.US_ASCII); + callback.thenRun(() -> stream.data(new DataFrame(streamId, ByteBuffer.wrap(bytes), true), Callback.NOOP)); + return null; + } + }); + + CountDownLatch latch = new CountDownLatch(1); + client.newRequest("localhost", connector.getLocalPort()) + .timeout(5, TimeUnit.SECONDS) + .send(result -> + { + if (result.isFailed()) + latch.countDown(); + }); + + Assert.assertTrue(latch.await(5, TimeUnit.SECONDS)); + } + @Ignore @Test public void testExternalServer() throws Exception diff --git a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2ServerConnectionFactory.java b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2ServerConnectionFactory.java index eee89bd9b48..3feb1f12fad 100644 --- a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2ServerConnectionFactory.java +++ b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2ServerConnectionFactory.java @@ -115,13 +115,10 @@ public class HTTP2ServerConnectionFactory extends AbstractHTTP2ServerConnectionF @Override public void onClose(Session session, GoAwayFrame frame, Callback callback) { - ErrorCode error = ErrorCode.from(frame.getError()); - if (error == null) - error = ErrorCode.STREAM_CLOSED_ERROR; String reason = frame.tryConvertPayload(); if (reason != null && !reason.isEmpty()) reason = " (" + reason + ")"; - getConnection().onSessionFailure(new EofException("HTTP/2 " + error + reason), callback); + getConnection().onSessionFailure(new EofException(String.format("Close %s/%s", ErrorCode.toString(frame.getError(), null), reason)), callback); } @Override @@ -156,10 +153,13 @@ public class HTTP2ServerConnectionFactory extends AbstractHTTP2ServerConnectionF @Override public void onReset(Stream stream, ResetFrame frame, Callback callback) { - ErrorCode error = ErrorCode.from(frame.getError()); - if (error == null) - error = ErrorCode.CANCEL_STREAM_ERROR; - getConnection().onStreamFailure((IStream)stream, new EofException("HTTP/2 " + error), callback); + getConnection().onStreamFailure((IStream)stream, new EofException("Reset " + ErrorCode.toString(frame.getError(), null)), callback); + } + + @Override + public void onFailure(Stream stream, int error, String reason, Callback callback) + { + getConnection().onStreamFailure((IStream)stream, new EofException(String.format("Failure %s/%s", ErrorCode.toString(error, null), reason)), callback); } @Override diff --git a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2ServerSession.java b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2ServerSession.java index 37882e3650f..c89c72ed9ca 100644 --- a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2ServerSession.java +++ b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2ServerSession.java @@ -84,7 +84,7 @@ public class HTTP2ServerSession extends HTTP2Session implements ServerParser.Lis LOG.debug("Received {}", frame); int streamId = frame.getStreamId(); - if ((streamId & 1) != 1) + if (!isClientStream(streamId)) { onConnectionFailure(ErrorCode.PROTOCOL_ERROR.code, "invalid_stream_id"); return; From 4b0becbbe04e929fe31ad2c2abd07ec83aad7c0f Mon Sep 17 00:00:00 2001 From: Simone Bordet Date: Sat, 21 Jul 2018 12:52:44 +0200 Subject: [PATCH 34/48] Issue #2679 - h2spec compliance. Fixed content-length compliance. Signed-off-by: Simone Bordet --- .../org/eclipse/jetty/http2/HTTP2Stream.java | 32 +++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Stream.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Stream.java index ce5c3e7ad46..b9609ad4903 100644 --- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Stream.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Stream.java @@ -28,6 +28,9 @@ import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; +import org.eclipse.jetty.http.HttpFields; +import org.eclipse.jetty.http.HttpHeader; +import org.eclipse.jetty.http.MetaData; import org.eclipse.jetty.http2.api.Stream; import org.eclipse.jetty.http2.frames.DataFrame; import org.eclipse.jetty.http2.frames.FailureFrame; @@ -59,9 +62,10 @@ public class HTTP2Stream extends IdleTimeout implements IStream, Callback, Dumpa private final ISession session; private final int streamId; private final boolean local; - private volatile Listener listener; - private volatile boolean localReset; - private volatile boolean remoteReset; + private boolean localReset; + private Listener listener; + private boolean remoteReset; + private long dataLength; public HTTP2Stream(Scheduler scheduler, ISession session, int streamId, boolean local) { @@ -69,6 +73,7 @@ public class HTTP2Stream extends IdleTimeout implements IStream, Callback, Dumpa this.session = session; this.streamId = streamId; this.local = local; + this.dataLength = Long.MIN_VALUE; } @Override @@ -272,6 +277,15 @@ public class HTTP2Stream extends IdleTimeout implements IStream, Callback, Dumpa { if (updateClose(frame.isEndStream(), CloseState.Event.RECEIVED)) session.removeStream(this); + MetaData metaData = frame.getMetaData(); + if (metaData.isRequest() || metaData.isResponse()) + { + HttpFields fields = metaData.getFields(); + long length = -1; + if (fields != null) + length = fields.getLongField(HttpHeader.CONTENT_LENGTH.asString()); + dataLength = length >= 0 ? length : Long.MIN_VALUE; + } callback.succeeded(); } @@ -301,8 +315,20 @@ public class HTTP2Stream extends IdleTimeout implements IStream, Callback, Dumpa return; } + if (dataLength != Long.MIN_VALUE) + { + dataLength -= frame.remaining(); + if (frame.isEndStream() && dataLength != 0) + { + reset(new ResetFrame(streamId, ErrorCode.PROTOCOL_ERROR.code), Callback.NOOP); + callback.failed(new IOException("invalid_data_length")); + return; + } + } + if (updateClose(frame.isEndStream(), CloseState.Event.RECEIVED)) session.removeStream(this); + notifyData(this, frame, callback); } From b5e607068f435116bfe5b7ad6e703938471bec20 Mon Sep 17 00:00:00 2001 From: lachan-roberts Date: Sat, 21 Jul 2018 22:10:12 +1000 Subject: [PATCH 35/48] Issue #2679 - HTTP/2 Spec Compliance now handling padding over 7 bits with Exception throwing CompressionExceptions instead of StreamExceptions fixed issue with non terminal encoded strings Signed-off-by: lachan-roberts --- .../eclipse/jetty/http2/hpack/Huffman.java | 22 +++---- .../jetty/http2/hpack/HpackDecoderTest.java | 60 +++++++++++++++---- .../jetty/http2/hpack/HuffmanTest.java | 11 ---- 3 files changed, 62 insertions(+), 31 deletions(-) diff --git a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/Huffman.java b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/Huffman.java index 8a1dbb3c5ed..ddb2c4a97df 100644 --- a/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/Huffman.java +++ b/jetty-http2/http2-hpack/src/main/java/org/eclipse/jetty/http2/hpack/Huffman.java @@ -345,24 +345,25 @@ public class Huffman } } - public static String decode(ByteBuffer buffer) throws HpackException.StreamException + public static String decode(ByteBuffer buffer) throws HpackException.CompressionException { return decode(buffer,buffer.remaining()); } - public static String decode(ByteBuffer buffer,int length) throws HpackException.StreamException + public static String decode(ByteBuffer buffer,int length) throws HpackException.CompressionException { StringBuilder out = new StringBuilder(length*2); int node = 0; int current = 0; int bits = 0; - + byte[] array = buffer.array(); int position=buffer.position(); int start=buffer.arrayOffset()+position; int end=start+length; buffer.position(position+length); - + + for (int i=start; i 0) { int c = (current << (8 - bits)) & 0xFF; + int lastNode = node; node = tree[node*256+c]; if (rowbits[node]==0 || rowbits[node] > bits) @@ -402,20 +404,20 @@ public class Huffman requiredPadding = (requiredPadding << 1) | 1; if((c>>(8-bits)) != requiredPadding) - throw new HpackException.StreamException("Incorrect padding"); + throw new HpackException.CompressionException("Incorrect padding"); + node = lastNode; break; } - // TODO why is this even here - if (rowbits[node]==0) - throw new IllegalStateException(); - out.append(rowsym[node]); bits -= rowbits[node]; node = 0; } + if(node != 0) + throw new HpackException.CompressionException("Bad termination"); + return out.toString(); } diff --git a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java index 03982a01241..60bca31b5a2 100644 --- a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java +++ b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackDecoderTest.java @@ -19,12 +19,6 @@ package org.eclipse.jetty.http2.hpack; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertThat; -import static org.junit.Assert.assertTrue; - import java.nio.ByteBuffer; import java.util.Iterator; @@ -39,6 +33,12 @@ import org.hamcrest.Matchers; import org.junit.Assert; import org.junit.Test; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + public class HpackDecoderTest { @Test @@ -495,9 +495,9 @@ public class HpackDecoderTest decoder.decode(buffer); Assert.fail(); } - catch (StreamException ex) + catch (CompressionException ex) { - Assert.assertThat(ex.getMessage(), Matchers.containsString("Padding length exceeded")); + Assert.assertThat(ex.getMessage(), Matchers.containsString("Bad termination")); } } @@ -516,7 +516,7 @@ public class HpackDecoderTest decoder.decode(buffer); Assert.fail(); } - catch (StreamException ex) + catch (CompressionException ex) { Assert.assertThat(ex.getMessage(), Matchers.containsString("Incorrect padding")); } @@ -537,9 +537,49 @@ public class HpackDecoderTest decoder.decode(buffer); Assert.fail(); } - catch (StreamException ex) + catch (CompressionException ex) { Assert.assertThat(ex.getMessage(), Matchers.containsString("EOS in content")); } } + + + @Test() + public void testHuffmanEncodedOneIncompleteOctet() throws Exception + { + HpackDecoder decoder = new HpackDecoder(4096, 8192); + + String encoded = "82868441" + "81" + "FE"; + ByteBuffer buffer = ByteBuffer.wrap(TypeUtil.fromHexString(encoded)); + + try + { + decoder.decode(buffer); + Assert.fail(); + } + catch (CompressionException ex) + { + Assert.assertThat(ex.getMessage(), Matchers.containsString("Bad termination")); + } + } + + + @Test() + public void testHuffmanEncodedTwoIncompleteOctet() throws Exception + { + HpackDecoder decoder = new HpackDecoder(4096, 8192); + + String encoded = "82868441" + "82" + "FFFE"; + ByteBuffer buffer = ByteBuffer.wrap(TypeUtil.fromHexString(encoded)); + + try + { + decoder.decode(buffer); + Assert.fail(); + } + catch (CompressionException ex) + { + Assert.assertThat(ex.getMessage(), Matchers.containsString("Bad termination")); + } + } } diff --git a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HuffmanTest.java b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HuffmanTest.java index 61a6f42e184..3b697ac0fe5 100644 --- a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HuffmanTest.java +++ b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HuffmanTest.java @@ -50,17 +50,6 @@ public class HuffmanTest } } - @Test - public void testDecodeTrailingFF() throws Exception - { - for (String[] test:tests) - { - byte[] encoded=TypeUtil.fromHexString(test[1]+"FF"); - String decoded=Huffman.decode(ByteBuffer.wrap(encoded)); - Assert.assertEquals(test[0],test[2],decoded); - } - } - @Test public void testEncode() throws Exception { From 9a22dd820ab43c0068a09683acf6dba890626ab4 Mon Sep 17 00:00:00 2001 From: Simone Bordet Date: Sat, 21 Jul 2018 15:55:43 +0200 Subject: [PATCH 36/48] Issue #2679 - h2spec compliance. Integrated h2spec execution in the Maven build. Signed-off-by: Simone Bordet --- jetty-http2/http2-server/pom.xml | 108 +++++++++++------- .../jetty/http2/server/H2SpecServer.java | 48 ++++++++ pom.xml | 5 + 3 files changed, 118 insertions(+), 43 deletions(-) create mode 100644 jetty-http2/http2-server/src/test/java/org/eclipse/jetty/http2/server/H2SpecServer.java diff --git a/jetty-http2/http2-server/pom.xml b/jetty-http2/http2-server/pom.xml index 7313aa64f32..01532422e39 100644 --- a/jetty-http2/http2-server/pom.xml +++ b/jetty-http2/http2-server/pom.xml @@ -1,5 +1,6 @@ - + org.eclipse.jetty.http2 http2-parent @@ -10,55 +11,76 @@ http2-server Jetty :: HTTP2 :: Server - + ${project.groupId}.server + + com.github.madgnome + h2spec-maven-plugin + + org.eclipse.jetty.http2.server.H2SpecServer + ${skipTests} + + + 5.1 - closed: Sends a DATA frame + + + + + h2spec + test + + h2spec + + + + - - - org.eclipse.jetty.http2 - http2-common - ${project.version} - - - org.eclipse.jetty - jetty-server - ${project.version} - - - org.eclipse.jetty.alpn - alpn-api - ${alpn.api.version} - provided - - - org.eclipse.jetty - jetty-servlet - ${project.version} - test - - - org.eclipse.jetty - jetty-servlets - ${project.version} - test - - - org.eclipse.jetty - jetty-alpn-server - ${project.version} - test - - - org.eclipse.jetty.toolchain - jetty-test-helper - test - - + + + org.eclipse.jetty.http2 + http2-common + ${project.version} + + + org.eclipse.jetty + jetty-server + ${project.version} + + + org.eclipse.jetty.alpn + alpn-api + ${alpn.api.version} + provided + + + org.eclipse.jetty + jetty-servlet + ${project.version} + test + + + org.eclipse.jetty + jetty-servlets + ${project.version} + test + + + org.eclipse.jetty + jetty-alpn-server + ${project.version} + test + + + org.eclipse.jetty.toolchain + jetty-test-helper + test + + diff --git a/jetty-http2/http2-server/src/test/java/org/eclipse/jetty/http2/server/H2SpecServer.java b/jetty-http2/http2-server/src/test/java/org/eclipse/jetty/http2/server/H2SpecServer.java new file mode 100644 index 00000000000..de99425b90b --- /dev/null +++ b/jetty-http2/http2-server/src/test/java/org/eclipse/jetty/http2/server/H2SpecServer.java @@ -0,0 +1,48 @@ +// +// ======================================================================== +// Copyright (c) 1995-2018 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.http2.server; + +import org.eclipse.jetty.server.HttpConfiguration; +import org.eclipse.jetty.server.HttpConnectionFactory; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.ServerConnector; + +/** + * HTTP/2 server to run the 'h2spec' tool against. + */ +public class H2SpecServer +{ + public static void main(String[] args) throws Exception + { + int port = Integer.parseInt(args[0]); + + Server server = new Server(); + + HttpConfiguration http_config = new HttpConfiguration(); + http_config.setRequestHeaderSize(16 * 1024); + + HttpConnectionFactory http = new HttpConnectionFactory(http_config); + HTTP2CServerConnectionFactory h2c = new HTTP2CServerConnectionFactory(http_config); + ServerConnector connector = new ServerConnector(server, http, h2c); + connector.setPort(port); + server.addConnector(connector); + + server.start(); + } +} diff --git a/pom.xml b/pom.xml index 5e1d12d5c4c..8309d7aab73 100644 --- a/pom.xml +++ b/pom.xml @@ -887,6 +887,11 @@ buildnumber-maven-plugin 1.4 + + com.github.madgnome + h2spec-maven-plugin + 0.3 + From 0ba1d9b5a567e76596d667136be263d7720a2196 Mon Sep 17 00:00:00 2001 From: Olivier Lamy Date: Thu, 26 Jul 2018 20:46:50 +1000 Subject: [PATCH 37/48] Issue #307 datecache contention (#2725) * use DateTimeFormatter which is threadsafe so no need of synchronized block #307 Signed-off-by: olivier lamy --- Jenkinsfile | 16 ++ .../jetty/http/jmh/MultiPartBenchmark.java | 7 + jetty-util/pom.xml | 46 +++ jetty-util/src/main/assembly/perf-tests.xml | 28 ++ .../org/eclipse/jetty/util/DateCache.java | 52 ++-- .../org/eclipse/jetty/util/DateCacheTest.java | 30 ++ .../jetty/util/jmh/DateCacheBenchmark.java | 91 ++++++ .../jetty/util/jmh/DateCacheNoTick.java | 195 +++++++++++++ .../util/jmh/DateCacheNoTickBenchmark.java | 90 ++++++ .../util/jmh/DateCacheSimpleDateFormat.java | 268 ++++++++++++++++++ .../DateCacheSimpleDateFormatBenchmark.java | 90 ++++++ pom.xml | 4 +- 12 files changed, 887 insertions(+), 30 deletions(-) create mode 100644 jetty-util/src/main/assembly/perf-tests.xml create mode 100644 jetty-util/src/test/java/org/eclipse/jetty/util/jmh/DateCacheBenchmark.java create mode 100644 jetty-util/src/test/java/org/eclipse/jetty/util/jmh/DateCacheNoTick.java create mode 100644 jetty-util/src/test/java/org/eclipse/jetty/util/jmh/DateCacheNoTickBenchmark.java create mode 100644 jetty-util/src/test/java/org/eclipse/jetty/util/jmh/DateCacheSimpleDateFormat.java create mode 100644 jetty-util/src/test/java/org/eclipse/jetty/util/jmh/DateCacheSimpleDateFormatBenchmark.java diff --git a/Jenkinsfile b/Jenkinsfile index 639528cf8a0..e20fdd8ccb7 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -12,6 +12,20 @@ for (def os in oss) { parallel builds +// jmh run +/* +stage("jmh-run") { + node( 'jmh-build-node' ) { + timeout( time: 120, unit: 'MINUTES' ) { + withEnv( ["JAVA_HOME=${tool "jdk8"}"] ) { + unstash name: 'perf-tests' + sh "${env.JAVA_HOME}/bin/java -jar jetty-util/target/perf-test.jar -rff jetty-util/target/jmh_result.json -rf json" + jmhReport 'jetty-util/target/jmh_result.json' + } + } + } +}*/ + def getFullBuild(jdk, os) { return { node(os) { @@ -106,6 +120,7 @@ def getFullBuild(jdk, os) { [parserName: 'JavaC']]; if (isMainBuild( jdk )) { // Collect up the jacoco execution results + stash name: 'perf-tests', includes: 'jetty-util/target/perf-test.jar' def jacocoExcludes = // build tools "**/org/eclipse/jetty/ant/**" + ",**/org/eclipse/jetty/maven/**" + @@ -164,6 +179,7 @@ def getFullBuild(jdk, os) { notifyBuild("Compact3 Failure", jdk) throw e } + } } } diff --git a/jetty-http/src/test/java/org/eclipse/jetty/http/jmh/MultiPartBenchmark.java b/jetty-http/src/test/java/org/eclipse/jetty/http/jmh/MultiPartBenchmark.java index 7bf56f04e09..a7ff4275c62 100644 --- a/jetty-http/src/test/java/org/eclipse/jetty/http/jmh/MultiPartBenchmark.java +++ b/jetty-http/src/test/java/org/eclipse/jetty/http/jmh/MultiPartBenchmark.java @@ -26,6 +26,7 @@ import java.nio.file.StandardOpenOption; import java.util.ArrayList; import java.util.List; import java.util.Random; +import java.util.concurrent.TimeUnit; import javax.servlet.MultipartConfigElement; import javax.servlet.http.Part; @@ -36,18 +37,24 @@ import org.eclipse.jetty.toolchain.test.MavenTestingUtils; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.BenchmarkMode; import org.openjdk.jmh.annotations.Level; +import org.openjdk.jmh.annotations.Measurement; import org.openjdk.jmh.annotations.Mode; import org.openjdk.jmh.annotations.Param; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.Setup; import org.openjdk.jmh.annotations.State; import org.openjdk.jmh.annotations.TearDown; +import org.openjdk.jmh.annotations.Threads; +import org.openjdk.jmh.annotations.Warmup; import org.openjdk.jmh.runner.Runner; import org.openjdk.jmh.runner.RunnerException; import org.openjdk.jmh.runner.options.Options; import org.openjdk.jmh.runner.options.OptionsBuilder; @State(Scope.Benchmark) +@Threads(4) +@Warmup(iterations = 7, time = 500, timeUnit = TimeUnit.MILLISECONDS) +@Measurement(iterations = 7, time = 500, timeUnit = TimeUnit.MILLISECONDS) public class MultiPartBenchmark { diff --git a/jetty-util/pom.xml b/jetty-util/pom.xml index 69a619c2728..4d90bf11b3d 100644 --- a/jetty-util/pom.xml +++ b/jetty-util/pom.xml @@ -97,6 +97,52 @@ + + org.apache.maven.plugins + maven-compiler-plugin + + + + testCompile + + + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh.version} + + + + + + + + org.apache.maven.plugins + maven-assembly-plugin + + + make-perf-assembly + package + + single + + + + src/main/assembly/perf-tests.xml + + perf-test + false + false + + + org.openjdk.jmh.Main + + + + + + diff --git a/jetty-util/src/main/assembly/perf-tests.xml b/jetty-util/src/main/assembly/perf-tests.xml new file mode 100644 index 00000000000..0ac6e21b341 --- /dev/null +++ b/jetty-util/src/main/assembly/perf-tests.xml @@ -0,0 +1,28 @@ + + perf-tests + + jar + + false + + + / + true + true + test + + + + + ${project.build.directory}/test-classes + / + + **/* + + true + + + \ No newline at end of file diff --git a/jetty-util/src/main/java/org/eclipse/jetty/util/DateCache.java b/jetty-util/src/main/java/org/eclipse/jetty/util/DateCache.java index 79a8561e92c..9f7fc960c41 100644 --- a/jetty-util/src/main/java/org/eclipse/jetty/util/DateCache.java +++ b/jetty-util/src/main/java/org/eclipse/jetty/util/DateCache.java @@ -18,12 +18,16 @@ package org.eclipse.jetty.util; -import java.text.SimpleDateFormat; +import java.time.Instant; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.Locale; import java.util.TimeZone; -/** Date Format Cache. +/** + * Date Format Cache. * Computes String representations of Dates and caches * the results so that subsequent requests within the same second * will be fast. @@ -43,8 +47,9 @@ public class DateCache private final String _formatString; private final String _tzFormatString; - private final SimpleDateFormat _tzFormat; - private final Locale _locale ; + private final DateTimeFormatter _tzFormat; + private final Locale _locale; + private final ZoneId _zoneId; private volatile Tick _tick; @@ -138,14 +143,14 @@ public class DateCache if( _locale != null ) { - _tzFormat=new SimpleDateFormat(_tzFormatString,_locale); + _tzFormat=DateTimeFormatter.ofPattern(_tzFormatString,_locale); } else { - _tzFormat=new SimpleDateFormat(_tzFormatString); + _tzFormat=DateTimeFormatter.ofPattern(_tzFormatString); } - _tzFormat.setTimeZone(tz); - + _zoneId = tz.toZoneId(); + _tzFormat.withZone(_zoneId); _tick=null; } @@ -153,7 +158,7 @@ public class DateCache /* ------------------------------------------------------------ */ public TimeZone getTimeZone() { - return _tzFormat.getTimeZone(); + return TimeZone.getTimeZone(_zoneId); } @@ -171,11 +176,7 @@ public class DateCache // Is this the cached time if (tick==null || seconds!=tick._seconds) { - // It's a cache miss - synchronized (this) - { - return _tzFormat.format(inDate); - } + return ZonedDateTime.ofInstant(inDate.toInstant(),_zoneId).format( _tzFormat ); } return tick._string; @@ -198,11 +199,7 @@ public class DateCache if (tick==null || seconds!=tick._seconds) { // It's a cache miss - Date d = new Date(inDate); - synchronized (this) - { - return _tzFormat.format(d); - } + return ZonedDateTime.ofInstant(Instant.ofEpochMilli(inDate),_zoneId).format( _tzFormat ); } return tick._string; @@ -245,17 +242,16 @@ public class DateCache { long seconds = now / 1000; - // Synchronize to protect _tzFormat - synchronized (this) + Tick tick=_tick; + // recheck the tick, to save multiple formats + if (tick==null || tick._seconds!=seconds) { - // recheck the tick, to save multiple formats - if (_tick==null || _tick._seconds!=seconds) - { - String s= _tzFormat.format(new Date(now)); - return _tick=new Tick(seconds,s); - } - return _tick; + String s = ZonedDateTime.ofInstant(Instant.now(),_zoneId).format(_tzFormat); + _tick=new Tick(seconds,s); + tick=_tick; } + return tick; + } /* ------------------------------------------------------------ */ diff --git a/jetty-util/src/test/java/org/eclipse/jetty/util/DateCacheTest.java b/jetty-util/src/test/java/org/eclipse/jetty/util/DateCacheTest.java index 80e06435aab..2149cfd6827 100644 --- a/jetty-util/src/test/java/org/eclipse/jetty/util/DateCacheTest.java +++ b/jetty-util/src/test/java/org/eclipse/jetty/util/DateCacheTest.java @@ -19,6 +19,8 @@ package org.eclipse.jetty.util; +import java.time.Instant; +import java.util.Date; import java.util.Locale; import java.util.TimeZone; import java.util.concurrent.TimeUnit; @@ -72,4 +74,32 @@ public class DateCacheTest } Assert.assertThat(hits,Matchers.greaterThan(misses)); } + + @Test + public void test_all_methods() { + // we simply check we do not have any exception + DateCache dateCache = new DateCache(); + Assert.assertNotNull(dateCache.formatNow(System.currentTimeMillis())); + Assert.assertNotNull(dateCache.formatNow(new Date().getTime())); + Assert.assertNotNull(dateCache.formatNow(Instant.now().toEpochMilli())); + + Assert.assertNotNull(dateCache.format(new Date())); + Assert.assertNotNull(dateCache.format(new Date(System.currentTimeMillis()))); + + Assert.assertNotNull(dateCache.format(System.currentTimeMillis())); + Assert.assertNotNull(dateCache.format(new Date().getTime())); + Assert.assertNotNull(dateCache.format(Instant.now().toEpochMilli())); + + Assert.assertNotNull(dateCache.formatTick(System.currentTimeMillis())); + Assert.assertNotNull(dateCache.formatTick(new Date().getTime())); + Assert.assertNotNull(dateCache.formatTick(Instant.now().toEpochMilli())); + + Assert.assertNotNull(dateCache.getFormatString()); + + Assert.assertNotNull(dateCache.getTimeZone()); + + Assert.assertNotNull(dateCache.now()); + + Assert.assertNotNull(dateCache.tick()); + } } diff --git a/jetty-util/src/test/java/org/eclipse/jetty/util/jmh/DateCacheBenchmark.java b/jetty-util/src/test/java/org/eclipse/jetty/util/jmh/DateCacheBenchmark.java new file mode 100644 index 00000000000..aa11e93a3cc --- /dev/null +++ b/jetty-util/src/test/java/org/eclipse/jetty/util/jmh/DateCacheBenchmark.java @@ -0,0 +1,91 @@ +// +// ======================================================================== +// Copyright (c) 1995-2018 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.util.jmh; + +import org.eclipse.jetty.util.DateCache; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.Threads; +import org.openjdk.jmh.annotations.Warmup; +import org.openjdk.jmh.runner.Runner; +import org.openjdk.jmh.runner.RunnerException; +import org.openjdk.jmh.runner.options.Options; +import org.openjdk.jmh.runner.options.OptionsBuilder; +import org.openjdk.jmh.runner.options.TimeValue; + +import java.time.Instant; +import java.util.Date; +import java.util.concurrent.TimeUnit; + +@State(Scope.Benchmark) +@Threads(4) +@Warmup(iterations = 7, time = 500, timeUnit = TimeUnit.MILLISECONDS) +@Measurement(iterations = 7, time = 500, timeUnit = TimeUnit.MILLISECONDS) +public class DateCacheBenchmark +{ + + DateCache dateCache = new DateCache(); + long timestamp = Instant.now().toEpochMilli(); + + @Benchmark + @BenchmarkMode(Mode.Throughput) + public void testDateCacheTimestamp() + { + dateCache.format(timestamp); + } + + @Benchmark + @BenchmarkMode(Mode.Throughput) + public void testDateCacheNow() + { + dateCache.format(new Date()); + } + + @Benchmark + @BenchmarkMode(Mode.Throughput) + public void testDateCacheFormatNow() + { + dateCache.formatNow(System.currentTimeMillis()); + } + + public static void main(String[] args) throws RunnerException + { + Options opt = new OptionsBuilder() + .include(DateCacheBenchmark.class.getSimpleName()) + .warmupIterations(2) + .measurementIterations(3) + .forks(1) + .threads(400) + // .syncIterations(true) // Don't start all threads at same time + .warmupTime(new TimeValue(10000,TimeUnit.MILLISECONDS)) + .measurementTime(new TimeValue(10000,TimeUnit.MILLISECONDS)) + // .addProfiler(CompilerProfiler.class) + // .addProfiler(LinuxPerfProfiler.class) + // .addProfiler(LinuxPerfNormProfiler.class) + // .addProfiler(LinuxPerfAsmProfiler.class) + // .resultFormat(ResultFormatType.CSV) + .build(); + + new Runner(opt).run(); + } +} \ No newline at end of file diff --git a/jetty-util/src/test/java/org/eclipse/jetty/util/jmh/DateCacheNoTick.java b/jetty-util/src/test/java/org/eclipse/jetty/util/jmh/DateCacheNoTick.java new file mode 100644 index 00000000000..0b224055f39 --- /dev/null +++ b/jetty-util/src/test/java/org/eclipse/jetty/util/jmh/DateCacheNoTick.java @@ -0,0 +1,195 @@ +// +// ======================================================================== +// Copyright (c) 1995-2018 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.util.jmh; + +import java.time.Instant; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Date; +import java.util.Locale; +import java.util.TimeZone; + +/** + * Date Format Cache. + * Computes String representations of Dates and caches + * the results so that subsequent requests within the same second + * will be fast. + * + * Only format strings that contain either "ss". Sub second formatting is + * not handled. + * + * The timezone of the date may be included as an ID with the "zzz" + * format string or as an offset with the "ZZZ" format string. + * + * If consecutive calls are frequently very different, then this + * may be a little slower than a normal DateFormat. + */ +public class DateCacheNoTick +{ + public static final String DEFAULT_FORMAT="EEE MMM dd HH:mm:ss zzz yyyy"; + + private final String _formatString; + private final String _tzFormatString; + private final DateTimeFormatter _tzFormat; + private final Locale _locale; + private final ZoneId _zoneId; + + /* ------------------------------------------------------------ */ + /** Constructor. + * Make a DateCache that will use a default format. The default format + * generates the same results as Date.toString(). + */ + public DateCacheNoTick() + { + this(DEFAULT_FORMAT); + } + + /* ------------------------------------------------------------ */ + /** Constructor. + * Make a DateCache that will use the given format + * @param format the format to use + */ + public DateCacheNoTick( String format) + { + this(format,null,TimeZone.getDefault()); + } + + /* ------------------------------------------------------------ */ + public DateCacheNoTick( String format, Locale l) + { + this(format,l,TimeZone.getDefault()); + } + + /* ------------------------------------------------------------ */ + public DateCacheNoTick( String format, Locale l, String tz) + { + this(format,l,TimeZone.getTimeZone(tz)); + } + + /* ------------------------------------------------------------ */ + public DateCacheNoTick( String format, Locale l, TimeZone tz) + { + _formatString=format; + _locale = l; + + + int zIndex = _formatString.indexOf( "ZZZ" ); + if( zIndex >= 0 ) + { + String ss1 = _formatString.substring( 0, zIndex ); + String ss2 = _formatString.substring( zIndex+3 ); + int tzOffset = tz.getRawOffset(); + + StringBuilder sb = new StringBuilder(_formatString.length()+10); + sb.append(ss1); + sb.append("'"); + if( tzOffset >= 0 ) + sb.append( '+' ); + else + { + tzOffset = -tzOffset; + sb.append( '-' ); + } + + int raw = tzOffset / (1000*60); // Convert to seconds + int hr = raw / 60; + int min = raw % 60; + + if( hr < 10 ) + sb.append( '0' ); + sb.append( hr ); + if( min < 10 ) + sb.append( '0' ); + sb.append( min ); + sb.append( '\'' ); + + sb.append(ss2); + _tzFormatString=sb.toString(); + } + else + _tzFormatString=_formatString; + + if( _locale != null ) + { + _tzFormat=DateTimeFormatter.ofPattern(_tzFormatString,_locale); + } + else + { + _tzFormat=DateTimeFormatter.ofPattern(_tzFormatString); + } + _zoneId = tz.toZoneId(); + _tzFormat.withZone(_zoneId); + } + + + /* ------------------------------------------------------------ */ + public TimeZone getTimeZone() + { + return TimeZone.getTimeZone(_zoneId); + } + + + /* ------------------------------------------------------------ */ + /** Format a date according to our stored formatter. + * @param inDate the Date + * @return Formatted date + */ + public String format(Date inDate) + { + return ZonedDateTime.ofInstant(inDate.toInstant(),_zoneId).format( _tzFormat ); + } + + /* ------------------------------------------------------------ */ + /** Format a date according to our stored formatter. + * If it happens to be in the same second as the last formatNow + * call, then the format is reused. + * @param inDate the date in milliseconds since unix epoch + * @return Formatted date + */ + public String format(long inDate) + { + return ZonedDateTime.ofInstant(Instant.ofEpochMilli(inDate),_zoneId).format( _tzFormat ); + } + + /* ------------------------------------------------------------ */ + /** Format a date according to our stored formatter. + * The passed time is expected to be close to the current time, so it is + * compared to the last value passed and if it is within the same second, + * the format is reused. Otherwise a new cached format is created. + * @param now the milliseconds since unix epoch + * @return Formatted date + */ + public String formatNow(long now) + { + return format(now); + } + + /* ------------------------------------------------------------ */ + public String now() + { + return formatNow(System.currentTimeMillis()); + } + + /* ------------------------------------------------------------ */ + public String getFormatString() + { + return _formatString; + } +} diff --git a/jetty-util/src/test/java/org/eclipse/jetty/util/jmh/DateCacheNoTickBenchmark.java b/jetty-util/src/test/java/org/eclipse/jetty/util/jmh/DateCacheNoTickBenchmark.java new file mode 100644 index 00000000000..6fb8781ca93 --- /dev/null +++ b/jetty-util/src/test/java/org/eclipse/jetty/util/jmh/DateCacheNoTickBenchmark.java @@ -0,0 +1,90 @@ +// +// ======================================================================== +// Copyright (c) 1995-2018 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.util.jmh; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.Threads; +import org.openjdk.jmh.annotations.Warmup; +import org.openjdk.jmh.runner.Runner; +import org.openjdk.jmh.runner.RunnerException; +import org.openjdk.jmh.runner.options.Options; +import org.openjdk.jmh.runner.options.OptionsBuilder; +import org.openjdk.jmh.runner.options.TimeValue; + +import java.time.Instant; +import java.util.Date; +import java.util.concurrent.TimeUnit; + +@State(Scope.Benchmark) +@Threads(4) +@Warmup(iterations = 7, time = 500, timeUnit = TimeUnit.MILLISECONDS) +@Measurement(iterations = 7, time = 500, timeUnit = TimeUnit.MILLISECONDS) +public class DateCacheNoTickBenchmark +{ + + DateCacheNoTick dateCache = new DateCacheNoTick(); + long timestamp = Instant.now().toEpochMilli(); + + @Benchmark + @BenchmarkMode(Mode.Throughput) + public void testDateCacheTimestamp() + { + dateCache.format(timestamp); + } + + @Benchmark + @BenchmarkMode(Mode.Throughput) + public void testDateCacheNow() + { + dateCache.format(new Date()); + } + + @Benchmark + @BenchmarkMode(Mode.Throughput) + public void testDateCacheFormatNow() + { + dateCache.formatNow(System.currentTimeMillis()); + } + + public static void main(String[] args) throws RunnerException + { + Options opt = new OptionsBuilder() + .include(DateCacheNoTickBenchmark.class.getSimpleName()) + .warmupIterations(2) + .measurementIterations(3) + .forks(1) + .threads(400) + // .syncIterations(true) // Don't start all threads at same time + .warmupTime(new TimeValue(10000,TimeUnit.MILLISECONDS)) + .measurementTime(new TimeValue(10000,TimeUnit.MILLISECONDS)) + // .addProfiler(CompilerProfiler.class) + // .addProfiler(LinuxPerfProfiler.class) + // .addProfiler(LinuxPerfNormProfiler.class) + // .addProfiler(LinuxPerfAsmProfiler.class) + // .resultFormat(ResultFormatType.CSV) + .build(); + + new Runner(opt).run(); + } +} \ No newline at end of file diff --git a/jetty-util/src/test/java/org/eclipse/jetty/util/jmh/DateCacheSimpleDateFormat.java b/jetty-util/src/test/java/org/eclipse/jetty/util/jmh/DateCacheSimpleDateFormat.java new file mode 100644 index 00000000000..8c9826e442a --- /dev/null +++ b/jetty-util/src/test/java/org/eclipse/jetty/util/jmh/DateCacheSimpleDateFormat.java @@ -0,0 +1,268 @@ +// +// ======================================================================== +// Copyright (c) 1995-2018 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.util.jmh; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; +import java.util.TimeZone; + +/** Date Format Cache. + * Computes String representations of Dates and caches + * the results so that subsequent requests within the same second + * will be fast. + * + * Only format strings that contain either "ss". Sub second formatting is + * not handled. + * + * The timezone of the date may be included as an ID with the "zzz" + * format string or as an offset with the "ZZZ" format string. + * + * If consecutive calls are frequently very different, then this + * may be a little slower than a normal DateFormat. + */ +public class DateCacheSimpleDateFormat +{ + + public static final String DEFAULT_FORMAT="EEE MMM dd HH:mm:ss zzz yyyy"; + + private final String _formatString; + private final String _tzFormatString; + private final SimpleDateFormat _tzFormat; + private final Locale _locale ; + + private volatile Tick _tick; + + /* ------------------------------------------------------------ */ + /* ------------------------------------------------------------ */ + public static class Tick + { + final long _seconds; + final String _string; + public Tick(long seconds, String string) + { + _seconds = seconds; + _string = string; + } + } + + /* ------------------------------------------------------------ */ + /** Constructor. + * Make a DateCache that will use a default format. The default format + * generates the same results as Date.toString(). + */ + public DateCacheSimpleDateFormat() + { + this(DEFAULT_FORMAT); + } + + /* ------------------------------------------------------------ */ + /** Constructor. + * Make a DateCache that will use the given format + * @param format the format to use + */ + public DateCacheSimpleDateFormat(String format) + { + this( format, null, TimeZone.getDefault()); + } + + /* ------------------------------------------------------------ */ + public DateCacheSimpleDateFormat(String format,Locale l) + { + this(format,l,TimeZone.getDefault()); + } + + /* ------------------------------------------------------------ */ + public DateCacheSimpleDateFormat(String format,Locale l,String tz) + { + this(format,l,TimeZone.getTimeZone(tz)); + } + + /* ------------------------------------------------------------ */ + public DateCacheSimpleDateFormat(String format,Locale l,TimeZone tz) + { + _formatString=format; + _locale = l; + + + int zIndex = _formatString.indexOf( "ZZZ" ); + if( zIndex >= 0 ) + { + String ss1 = _formatString.substring( 0, zIndex ); + String ss2 = _formatString.substring( zIndex+3 ); + int tzOffset = tz.getRawOffset(); + + StringBuilder sb = new StringBuilder(_formatString.length()+10); + sb.append(ss1); + sb.append("'"); + if( tzOffset >= 0 ) + sb.append( '+' ); + else + { + tzOffset = -tzOffset; + sb.append( '-' ); + } + + int raw = tzOffset / (1000*60); // Convert to seconds + int hr = raw / 60; + int min = raw % 60; + + if( hr < 10 ) + sb.append( '0' ); + sb.append( hr ); + if( min < 10 ) + sb.append( '0' ); + sb.append( min ); + sb.append( '\'' ); + + sb.append(ss2); + _tzFormatString=sb.toString(); + } + else + _tzFormatString=_formatString; + + if( _locale != null ) + { + _tzFormat=new SimpleDateFormat(_tzFormatString,_locale); + } + else + { + _tzFormat=new SimpleDateFormat(_tzFormatString); + } + _tzFormat.setTimeZone(tz); + + _tick=null; + } + + + /* ------------------------------------------------------------ */ + public TimeZone getTimeZone() + { + return _tzFormat.getTimeZone(); + } + + + /* ------------------------------------------------------------ */ + /** Format a date according to our stored formatter. + * @param inDate the Date + * @return Formatted date + */ + public String format(Date inDate) + { + long seconds = inDate.getTime() / 1000; + + Tick tick=_tick; + + // Is this the cached time + if (tick==null || seconds!=tick._seconds) + { + // It's a cache miss + synchronized (this) + { + return _tzFormat.format(inDate); + } + } + + return tick._string; + } + + /* ------------------------------------------------------------ */ + /** Format a date according to our stored formatter. + * If it happens to be in the same second as the last formatNow + * call, then the format is reused. + * @param inDate the date in milliseconds since unix epoch + * @return Formatted date + */ + public String format(long inDate) + { + long seconds = inDate / 1000; + + Tick tick=_tick; + + // Is this the cached time + if (tick==null || seconds!=tick._seconds) + { + // It's a cache miss + Date d = new Date(inDate); + synchronized (this) + { + return _tzFormat.format(d); + } + } + + return tick._string; + } + + /* ------------------------------------------------------------ */ + /** Format a date according to our stored formatter. + * The passed time is expected to be close to the current time, so it is + * compared to the last value passed and if it is within the same second, + * the format is reused. Otherwise a new cached format is created. + * @param now the milliseconds since unix epoch + * @return Formatted date + */ + public String formatNow(long now) + { + long seconds = now / 1000; + + Tick tick=_tick; + + // Is this the cached time + if (tick!=null && tick._seconds==seconds) + return tick._string; + return formatTick(now)._string; + } + + /* ------------------------------------------------------------ */ + public String now() + { + return formatNow(System.currentTimeMillis()); + } + + /* ------------------------------------------------------------ */ + public Tick tick() + { + return formatTick(System.currentTimeMillis()); + } + + /* ------------------------------------------------------------ */ + protected Tick formatTick(long now) + { + long seconds = now / 1000; + + // Synchronize to protect _tzFormat + synchronized (this) + { + // recheck the tick, to save multiple formats + if (_tick==null || _tick._seconds!=seconds) + { + String s= _tzFormat.format(new Date(now)); + return _tick=new Tick(seconds,s); + } + return _tick; + } + } + + /* ------------------------------------------------------------ */ + public String getFormatString() + { + return _formatString; + } + +} diff --git a/jetty-util/src/test/java/org/eclipse/jetty/util/jmh/DateCacheSimpleDateFormatBenchmark.java b/jetty-util/src/test/java/org/eclipse/jetty/util/jmh/DateCacheSimpleDateFormatBenchmark.java new file mode 100644 index 00000000000..3006bddd892 --- /dev/null +++ b/jetty-util/src/test/java/org/eclipse/jetty/util/jmh/DateCacheSimpleDateFormatBenchmark.java @@ -0,0 +1,90 @@ +// +// ======================================================================== +// Copyright (c) 1995-2018 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.util.jmh; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.Threads; +import org.openjdk.jmh.annotations.Warmup; +import org.openjdk.jmh.runner.Runner; +import org.openjdk.jmh.runner.RunnerException; +import org.openjdk.jmh.runner.options.Options; +import org.openjdk.jmh.runner.options.OptionsBuilder; +import org.openjdk.jmh.runner.options.TimeValue; + +import java.time.Instant; +import java.util.Date; +import java.util.concurrent.TimeUnit; + +@State(Scope.Benchmark) +@Threads(4) +@Warmup(iterations = 7, time = 500, timeUnit = TimeUnit.MILLISECONDS) +@Measurement(iterations = 7, time = 500, timeUnit = TimeUnit.MILLISECONDS) +public class DateCacheSimpleDateFormatBenchmark +{ + + DateCacheSimpleDateFormat dateCache = new DateCacheSimpleDateFormat(); + long timestamp = Instant.now().toEpochMilli(); + + @Benchmark + @BenchmarkMode(Mode.Throughput) + public void testDateCacheTimestamp() + { + dateCache.format(timestamp); + } + + @Benchmark + @BenchmarkMode(Mode.Throughput) + public void testDateCacheNow() + { + dateCache.format(new Date()); + } + + @Benchmark + @BenchmarkMode(Mode.Throughput) + public void testDateCacheFormatNow() + { + dateCache.formatNow(System.currentTimeMillis()); + } + + public static void main(String[] args) throws RunnerException + { + Options opt = new OptionsBuilder() + .include(DateCacheSimpleDateFormatBenchmark.class.getSimpleName()) + .warmupIterations(2) + .measurementIterations(3) + .forks(1) + .threads(400) + // .syncIterations(true) // Don't start all threads at same time + .warmupTime(new TimeValue(10000,TimeUnit.MILLISECONDS)) + .measurementTime(new TimeValue(10000,TimeUnit.MILLISECONDS)) + // .addProfiler(CompilerProfiler.class) + // .addProfiler(LinuxPerfProfiler.class) + // .addProfiler(LinuxPerfNormProfiler.class) + // .addProfiler(LinuxPerfAsmProfiler.class) + // .resultFormat(ResultFormatType.CSV) + .build(); + + new Runner(opt).run(); + } +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 8309d7aab73..75543b1cba0 100644 --- a/pom.xml +++ b/pom.xml @@ -27,7 +27,7 @@ undefined 1.1.4 6.2 - 1.20 + 1.21 benchmarks 2.21.0 @@ -590,7 +590,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.0.0 + 3.1.1 org.apache.maven.plugins From a090741a600f2793b1684f5b28bca33139720b95 Mon Sep 17 00:00:00 2001 From: Simone Bordet Date: Wed, 1 Aug 2018 16:57:08 +0200 Subject: [PATCH 38/48] Issue #2755 - ManagedSelector 100% CPU spin. Added check for thread interrupted. If interrupted and ManagedSelector is not running, bail out. Signed-off-by: Simone Bordet --- .../src/main/java/org/eclipse/jetty/io/ManagedSelector.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/jetty-io/src/main/java/org/eclipse/jetty/io/ManagedSelector.java b/jetty-io/src/main/java/org/eclipse/jetty/io/ManagedSelector.java index cac08240b57..1f512c3ae21 100644 --- a/jetty-io/src/main/java/org/eclipse/jetty/io/ManagedSelector.java +++ b/jetty-io/src/main/java/org/eclipse/jetty/io/ManagedSelector.java @@ -23,6 +23,7 @@ import java.io.IOException; import java.net.ConnectException; import java.net.SocketTimeoutException; import java.nio.channels.CancelledKeyException; +import java.nio.channels.ClosedSelectorException; import java.nio.channels.SelectableChannel; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; @@ -426,6 +427,9 @@ public class ManagedSelector extends ContainerLifeCycle implements Dumpable if (LOG.isDebugEnabled()) LOG.debug("Selector {} woken up from select, {}/{}/{} selected", selector, selected, selector.selectedKeys().size(), selector.keys().size()); + if (Thread.interrupted() && !isRunning()) + throw new ClosedSelectorException(); + int updates; synchronized(ManagedSelector.this) { From 0a336230efb344771d49a9e8fe13ac01867fd0c9 Mon Sep 17 00:00:00 2001 From: Simone Bordet Date: Wed, 1 Aug 2018 17:25:46 +0200 Subject: [PATCH 39/48] Issue #2755 - ManagedSelector 100% CPU spin. Avoid race between doStart() and doStop() by waiting in doStart() for _started=true. Signed-off-by: Simone Bordet --- .../org/eclipse/jetty/io/ManagedSelector.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/jetty-io/src/main/java/org/eclipse/jetty/io/ManagedSelector.java b/jetty-io/src/main/java/org/eclipse/jetty/io/ManagedSelector.java index 1f512c3ae21..2023ff9c328 100644 --- a/jetty-io/src/main/java/org/eclipse/jetty/io/ManagedSelector.java +++ b/jetty-io/src/main/java/org/eclipse/jetty/io/ManagedSelector.java @@ -102,7 +102,9 @@ public class ManagedSelector extends ContainerLifeCycle implements Dumpable _selectorManager.execute(_strategy::produce); // Set started only if we really are started - submit(s->_started.set(true)); + Start start = new Start(); + submit(start); + start._started.await(); } public int size() @@ -540,6 +542,18 @@ public class ManagedSelector extends ContainerLifeCycle implements Dumpable public void update(Selector selector); } + private class Start implements SelectorUpdate + { + private final CountDownLatch _started = new CountDownLatch(1); + + @Override + public void update(Selector selector) + { + ManagedSelector.this._started.set(true); + _started.countDown(); + } + } + private static class DumpKeys implements SelectorUpdate { private CountDownLatch latch = new CountDownLatch(1); From 8c296e7d52ddb3403b2aff404cd1153addb61ae3 Mon Sep 17 00:00:00 2001 From: Simone Bordet Date: Wed, 1 Aug 2018 18:24:42 +0200 Subject: [PATCH 40/48] Issue #2757 - Possible double release of HTTP/2 ByteBuffers. Clarified the NetworkBuffer API semantic so that the code is now simpler. Signed-off-by: Simone Bordet --- .../eclipse/jetty/http2/HTTP2Connection.java | 56 ++++++++++--------- 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Connection.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Connection.java index c13cbb62d80..0cd45644a60 100644 --- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Connection.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Connection.java @@ -253,7 +253,7 @@ public class HTTP2Connection extends AbstractConnection implements WriteFlusher. } finally { - released = buffer.tryRelease(); + released = buffer.release(); if (failed && released) releaseNetworkBuffer(); } @@ -276,6 +276,9 @@ public class HTTP2Connection extends AbstractConnection implements WriteFlusher. } } + // Here we know that this.buffer is not retained: + // either it has been released, or it's a new one. + int filled = fill(getEndPoint(), buffer.buffer); if (LOG.isDebugEnabled()) LOG.debug("Filled {} bytes in {}", filled, buffer); @@ -311,14 +314,10 @@ public class HTTP2Connection extends AbstractConnection implements WriteFlusher. private void releaseNetworkBuffer() { - if (!buffer.hasRemaining()) - { - if (LOG.isDebugEnabled()) - LOG.debug("Released {}", buffer); - buffer.release(); - byteBufferPool.release(buffer.buffer); - buffer = null; - } + if (LOG.isDebugEnabled()) + LOG.debug("Released {}", buffer); + buffer.recycle(); + buffer = null; } @Override @@ -399,16 +398,31 @@ public class HTTP2Connection extends AbstractConnection implements WriteFlusher. refCount.incrementAndGet(); } - @Override - public void succeeded() + private boolean release() { - release(); + return refCount.decrementAndGet() == 0; } @Override - public void failed(Throwable x) + public void succeeded() { - release(); + if (release()) + { + if (LOG.isDebugEnabled()) + LOG.debug("Released retained {}", this); + recycle(); + } + } + + @Override + public void failed(Throwable failure) + { + if (release()) + { + if (LOG.isDebugEnabled()) + LOG.debug("Released retained " + this, failure); + recycle(); + } } @Override @@ -417,19 +431,9 @@ public class HTTP2Connection extends AbstractConnection implements WriteFlusher. return InvocationType.NON_BLOCKING; } - private void release() + private void recycle() { - if (tryRelease()) - { - byteBufferPool.release(buffer); - if (LOG.isDebugEnabled()) - LOG.debug("Released retained {}", this); - } - } - - private boolean tryRelease() - { - return refCount.decrementAndGet() == 0; + byteBufferPool.release(buffer); } @Override From 321b4b4f7a4f1396aeac05a1718d67baae469ae4 Mon Sep 17 00:00:00 2001 From: Joakim Erdfelt Date: Wed, 1 Aug 2018 12:26:58 -0500 Subject: [PATCH 41/48] Updating VERSION.txt --- VERSION.txt | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/VERSION.txt b/VERSION.txt index 66d628f6ee3..44b380297a2 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -1,31 +1,5 @@ jetty-9.4.12-SNAPSHOT -jetty-9.4.12.RC0 - 11 July 2018 - + 901 Overriding SSL context KeyStoreType requires explicit override of - TrustStoreType - + 2075 Deprecating MultiException - + 2342 File Descriptor Leak: Conscrypt: "Too many open files" - + 2349 HTTP/2 max streams enforcement - + 2398 MultiPartFormInputStream parsing should default to UTF-8, but allowed - to be overridden by Request.setCharacterEncoding() - + 2468 EWYK concurrent produce can fail SSL connections - + 2501 Include accepting connections in connection limit - + 2530 Client waits forever for cancelled large uploads - + 2560 Review PathResource exception handling - + 2565 HashLoginService silently ignores file:/ config paths from 9.3.x - + 2631 IllegalArgumentException: Buffering capacity exceeded, from HttpClient - HEAD Requests to resources referencing large body contents - + 2648 LdapLoginModule fails with forceBinding=true under Java 9 - + 2655 WebSocketClient not removing closed WebSocket Session's from managed - beans - + 2662 Remove unnecessary boxing conversions - + 2663 Guard Throwable.addSuppressed() calls - + 2675 Demo rewrite rules prevent URL Session tracking - + 2677 Decode URI before matching against "/favicon.ico" - + 2683 NPE in FrameFlusher toString() - + 2684 MimeTypes.getAssumedEncodings() does not work - + 2696 GcloudDataStore dependency generation broken - jetty-9.4.11.v20180605 - 05 June 2018 + 1785 Support for vhost@connectorname syntax of virtual hosts + 2346 Revert stack trace logging for HTTPChannel.onException From 2cc90c2be57b3dba3fa3f9bc0640d2b375e0c15c Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Thu, 2 Aug 2018 16:41:06 +1000 Subject: [PATCH 42/48] Less verbose testing Signed-off-by: Greg Wilkins --- .../java/org/eclipse/jetty/server/HttpServerTestFixture.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/HttpServerTestFixture.java b/jetty-server/src/test/java/org/eclipse/jetty/server/HttpServerTestFixture.java index f7d16a619ba..09fe0438ad7 100644 --- a/jetty-server/src/test/java/org/eclipse/jetty/server/HttpServerTestFixture.java +++ b/jetty-server/src/test/java/org/eclipse/jetty/server/HttpServerTestFixture.java @@ -115,7 +115,7 @@ public class HttpServerTestFixture @Override public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { - Log.getRootLogger().info("handle "+target); + Log.getRootLogger().debug("handle "+target); baseRequest.setHandled(true); if (request.getContentType()!=null) @@ -157,7 +157,7 @@ public class HttpServerTestFixture if (reader.read()>=0) throw new IllegalStateException("Not closed"); - Log.getRootLogger().info("handled "+target); + Log.getRootLogger().debug("handled "+target); } } From b561ee27342a26b88b7f4d3aaf2d5175e79429e9 Mon Sep 17 00:00:00 2001 From: Simone Bordet Date: Thu, 2 Aug 2018 13:12:28 +0200 Subject: [PATCH 43/48] Issue #2755 - ManagedSelector 100% CPU spin. Now checking for thread interrupted only when select() reports 0 selected. This will avoid the check in case of legit I/O wakeups. Signed-off-by: Simone Bordet --- .../main/java/org/eclipse/jetty/io/ManagedSelector.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/jetty-io/src/main/java/org/eclipse/jetty/io/ManagedSelector.java b/jetty-io/src/main/java/org/eclipse/jetty/io/ManagedSelector.java index 2023ff9c328..801ce7bda87 100644 --- a/jetty-io/src/main/java/org/eclipse/jetty/io/ManagedSelector.java +++ b/jetty-io/src/main/java/org/eclipse/jetty/io/ManagedSelector.java @@ -424,14 +424,15 @@ public class ManagedSelector extends ContainerLifeCycle implements Dumpable { if (LOG.isDebugEnabled()) LOG.debug("Selector {} woken with none selected", selector); + + if (Thread.interrupted() && !isRunning()) + throw new ClosedSelectorException(); + selected = selector.selectNow(); } if (LOG.isDebugEnabled()) LOG.debug("Selector {} woken up from select, {}/{}/{} selected", selector, selected, selector.selectedKeys().size(), selector.keys().size()); - if (Thread.interrupted() && !isRunning()) - throw new ClosedSelectorException(); - int updates; synchronized(ManagedSelector.this) { From b6bc2bea7afa4c393b54bcd62c3b9ea345283387 Mon Sep 17 00:00:00 2001 From: David Shepherdson Date: Thu, 2 Aug 2018 21:51:27 +1000 Subject: [PATCH 44/48] Issue #2762: Fixed typo when checking JETTY_START_TIMEOUT. Signed-off-by: David Shepherdson --- jetty-home/src/main/resources/bin/jetty.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jetty-home/src/main/resources/bin/jetty.sh b/jetty-home/src/main/resources/bin/jetty.sh index b2b69a3d75c..c128bbad2ce 100755 --- a/jetty-home/src/main/resources/bin/jetty.sh +++ b/jetty-home/src/main/resources/bin/jetty.sh @@ -385,7 +385,7 @@ fi ##################################################### # Set STARTED timeout ##################################################### -if [ -z "$JETTY_START_TIMEOUT"] +if [ -z "$JETTY_START_TIMEOUT" ] then JETTY_START_TIMEOUT=60 fi From d37b506cb161b6fb93dd5c9b8237713cdd17316c Mon Sep 17 00:00:00 2001 From: Joakim Erdfelt Date: Thu, 2 Aug 2018 08:57:58 -0500 Subject: [PATCH 45/48] Adding mod & adoc to gitattributes --- .gitattributes | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitattributes b/.gitattributes index b9b0a86549a..3f0ee056c1d 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3,7 +3,9 @@ *.txt eol=lf *.properties eol=lf *.java eol=lf +*.mod eol=lf +*.adoc eol=lf *.xml eol=lf Jenkinsfile eol=lf *.js eol=lf -*.raw binary \ No newline at end of file +*.raw binary From 586484850ff7fe6f791bb413bd44e2ebe8aa3cee Mon Sep 17 00:00:00 2001 From: Joakim Erdfelt Date: Thu, 2 Aug 2018 09:16:34 -0500 Subject: [PATCH 46/48] Issue #2768 - JSR356 Session.getUserProperties() is null during @OnOpen Signed-off-by: Joakim Erdfelt --- .../websocket/jsr356/ConfiguratorTest.java | 5 ++++- .../websocket/jsr356/EchoCaptureHandler.java | 6 ++++-- .../websocket/jsr356/EndpointEchoClient.java | 1 + .../websocket/jsr356/EndpointEchoTest.java | 18 ++++++++++++------ .../jetty/websocket/jsr356/MessageQueue.java | 4 ++++ .../jsr356/samples/EchoStringEndpoint.java | 18 ++++++++++++++---- 6 files changed, 39 insertions(+), 13 deletions(-) diff --git a/jetty-websocket/javax-websocket-client-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/ConfiguratorTest.java b/jetty-websocket/javax-websocket-client-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/ConfiguratorTest.java index a2b01843f0f..fd4694c320d 100644 --- a/jetty-websocket/javax-websocket-client-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/ConfiguratorTest.java +++ b/jetty-websocket/javax-websocket-client-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/ConfiguratorTest.java @@ -18,7 +18,9 @@ package org.eclipse.jetty.websocket.jsr356; +import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.Matchers.is; import java.net.URI; import java.util.List; @@ -125,7 +127,8 @@ public class ConfiguratorTest session.getBasicRemote().sendText("Echo"); // Wait for echo - echoer.textCapture.messageQueue.awaitMessages(1,1000,TimeUnit.MILLISECONDS); + String echoed = echoer.textCapture.messages.poll(1,TimeUnit.SECONDS); + assertThat("Echoed", echoed, is("Echo")); // Validate client side configurator use Assert.assertThat("configurator.request",configurator.request,notNullValue()); diff --git a/jetty-websocket/javax-websocket-client-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/EchoCaptureHandler.java b/jetty-websocket/javax-websocket-client-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/EchoCaptureHandler.java index 8c7394cec17..d114b7f27f0 100644 --- a/jetty-websocket/javax-websocket-client-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/EchoCaptureHandler.java +++ b/jetty-websocket/javax-websocket-client-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/EchoCaptureHandler.java @@ -20,13 +20,15 @@ package org.eclipse.jetty.websocket.jsr356; import javax.websocket.MessageHandler; +import org.eclipse.jetty.util.BlockingArrayQueue; + public class EchoCaptureHandler implements MessageHandler.Whole { - public MessageQueue messageQueue = new MessageQueue(); + public BlockingArrayQueue messages = new BlockingArrayQueue<>(); @Override public void onMessage(String message) { - messageQueue.offer(message); + messages.offer(message); } } diff --git a/jetty-websocket/javax-websocket-client-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/EndpointEchoClient.java b/jetty-websocket/javax-websocket-client-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/EndpointEchoClient.java index 0180f5f6ed1..23a00b71887 100644 --- a/jetty-websocket/javax-websocket-client-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/EndpointEchoClient.java +++ b/jetty-websocket/javax-websocket-client-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/EndpointEchoClient.java @@ -52,6 +52,7 @@ public class EndpointEchoClient extends Endpoint if (LOG.isDebugEnabled()) LOG.debug("onOpen({}, {})",session,config); this.session = session; + this.session.getUserProperties().put("endpoint", this); Assert.assertThat("Session is required",session,notNullValue()); Assert.assertThat("EndpointConfig is required",config,notNullValue()); this.session.addMessageHandler(textCapture); diff --git a/jetty-websocket/javax-websocket-client-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/EndpointEchoTest.java b/jetty-websocket/javax-websocket-client-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/EndpointEchoTest.java index 3ec1d44c472..ac1a0be72dc 100644 --- a/jetty-websocket/javax-websocket-client-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/EndpointEchoTest.java +++ b/jetty-websocket/javax-websocket-client-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/EndpointEchoTest.java @@ -18,7 +18,9 @@ package org.eclipse.jetty.websocket.jsr356; +import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.instanceOf; +import static org.hamcrest.Matchers.is; import java.net.URI; import java.util.concurrent.TimeUnit; @@ -98,7 +100,8 @@ public class EndpointEchoTest session.getBasicRemote().sendText("Echo"); if (LOG.isDebugEnabled()) LOG.debug("Client Message Sent"); - echoer.textCapture.messageQueue.awaitMessages(1,1000,TimeUnit.MILLISECONDS); + String echoed = echoer.textCapture.messages.poll(1, TimeUnit.SECONDS); + assertThat("Echoed message", echoed, is("Echo")); } @Test @@ -113,8 +116,9 @@ public class EndpointEchoTest session.getBasicRemote().sendText("Echo"); if (LOG.isDebugEnabled()) LOG.debug("Client Message Sent"); - // TODO: figure out echo verification. - // echoer.textCapture.messageQueue.awaitMessages(1,1000,TimeUnit.MILLISECONDS); + EndpointEchoClient client = (EndpointEchoClient) session.getUserProperties().get("endpoint"); + String echoed = client.textCapture.messages.poll(1, TimeUnit.SECONDS); + assertThat("Echoed message", echoed, is("Echo")); } @Test @@ -131,7 +135,8 @@ public class EndpointEchoTest session.getBasicRemote().sendText("Echo"); if (LOG.isDebugEnabled()) LOG.debug("Client Message Sent"); - echoer.messageQueue.awaitMessages(1,1000,TimeUnit.MILLISECONDS); + String echoed = echoer.messages.poll(1, TimeUnit.SECONDS); + assertThat("Echoed message", echoed, is("Echo")); } @Test @@ -146,7 +151,8 @@ public class EndpointEchoTest session.getBasicRemote().sendText("Echo"); if (LOG.isDebugEnabled()) LOG.debug("Client Message Sent"); - // TODO: figure out echo verification. - // echoer.messageQueue.awaitMessages(1,1000,TimeUnit.MILLISECONDS); + EchoStringEndpoint client = (EchoStringEndpoint) session.getUserProperties().get("endpoint"); + String echoed = client.messages.poll(1, TimeUnit.SECONDS); + assertThat("Echoed message", echoed, is("Echo")); } } diff --git a/jetty-websocket/javax-websocket-client-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/MessageQueue.java b/jetty-websocket/javax-websocket-client-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/MessageQueue.java index c0add237272..a46f5fb4b20 100644 --- a/jetty-websocket/javax-websocket-client-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/MessageQueue.java +++ b/jetty-websocket/javax-websocket-client-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/MessageQueue.java @@ -25,6 +25,10 @@ import org.eclipse.jetty.util.BlockingArrayQueue; import org.eclipse.jetty.util.log.Log; import org.eclipse.jetty.util.log.Logger; +/** + * @deprecated use {@code BlockingArrayQueue} instead + */ +@Deprecated public class MessageQueue extends BlockingArrayQueue { private static final Logger LOG = Log.getLogger(MessageQueue.class); diff --git a/jetty-websocket/javax-websocket-client-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/samples/EchoStringEndpoint.java b/jetty-websocket/javax-websocket-client-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/samples/EchoStringEndpoint.java index b0cdb0d1b2f..207e01c5ea1 100644 --- a/jetty-websocket/javax-websocket-client-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/samples/EchoStringEndpoint.java +++ b/jetty-websocket/javax-websocket-client-impl/src/test/java/org/eclipse/jetty/websocket/jsr356/samples/EchoStringEndpoint.java @@ -18,19 +18,29 @@ package org.eclipse.jetty.websocket.jsr356.samples; -import org.eclipse.jetty.websocket.jsr356.MessageQueue; +import javax.websocket.EndpointConfig; +import javax.websocket.Session; + +import org.eclipse.jetty.util.BlockingArrayQueue; /** * Legitimate structure for an Endpoint */ public class EchoStringEndpoint extends AbstractStringEndpoint { - public MessageQueue messageQueue = new MessageQueue(); + public BlockingArrayQueue messages = new BlockingArrayQueue<>(); + + @Override + public void onOpen(Session session, EndpointConfig config) + { + super.onOpen(session, config); + this.session.getUserProperties().put("endpoint", this); + } @Override public void onMessage(String message) { - messageQueue.offer(message); - session.getAsyncRemote().sendText(message); + this.messages.offer(message); + this.session.getAsyncRemote().sendText(message); } } From f4a0bfbdd8ccfff2faf810471674761530bf76f3 Mon Sep 17 00:00:00 2001 From: Olivier Lamy Date: Sat, 4 Aug 2018 14:08:13 +1000 Subject: [PATCH 47/48] Issue #2746 jmh module (#2750) #2746 move jmh classes to a dedicated jmh module Signed-off-by: olivier lamy --- Jenkinsfile | 14 --- Jmh_Jenkinsfile | 56 +++++++++ jetty-http/pom.xml | 12 -- jetty-jmh/pom.xml | 111 ++++++++++++++++++ .../jetty/http/jmh/MultiPartBenchmark.java | 23 ++-- .../jetty/util/jmh/DateCacheBenchmark.java | 0 .../jetty/util/jmh/DateCacheNoTick.java | 0 .../util/jmh/DateCacheNoTickBenchmark.java | 0 .../util/jmh/DateCacheSimpleDateFormat.java | 0 .../DateCacheSimpleDateFormatBenchmark.java | 0 .../util/thread/jmh/ThreadPoolBenchmark.java | 0 .../thread/strategy/jmh/EWYKBenchmark.java | 0 .../thread/strategy/jmh/TestConnection.java | 0 .../util/thread/strategy/jmh/TestServer.java | 0 .../main/resources/jetty-logging.properties | 4 + jetty-jmh/src/main/resources/keystore | Bin 0 -> 1426 bytes ...ny-urlencoded-apache-httpcomp.expected.txt | 9 ++ ...ure-company-urlencoded-apache-httpcomp.raw | Bin 0 -> 248 bytes ...pture-complex-apache-httpcomp.expected.txt | 15 +++ ...rowser-capture-complex-apache-httpcomp.raw | Bin 0 -> 22940 bytes ...-capture-complex-jetty-client.expected.txt | 15 +++ .../browser-capture-complex-jetty-client.raw | Bin 0 -> 22754 bytes ...plicate-names-apache-httpcomp.expected.txt | 8 ++ ...apture-duplicate-names-apache-httpcomp.raw | Bin 0 -> 1815 bytes ...-duplicate-names-jetty-client.expected.txt | 8 ++ ...r-capture-duplicate-names-jetty-client.raw | Bin 0 -> 1477 bytes ...encoding-mess-apache-httpcomp.expected.txt | 11 ++ ...-capture-encoding-mess-apache-httpcomp.raw | Bin 0 -> 31148 bytes ...re-encoding-mess-jetty-client.expected.txt | 11 ++ ...ser-capture-encoding-mess-jetty-client.raw | Bin 0 -> 23881 bytes ...re-form-fileupload-alt-chrome.expected.txt | 21 ++++ ...ser-capture-form-fileupload-alt-chrome.raw | Bin 0 -> 22759 bytes ...ture-form-fileupload-alt-edge.expected.txt | 17 +++ ...owser-capture-form-fileupload-alt-edge.raw | Bin 0 -> 22824 bytes ...e-form-fileupload-alt-firefox.expected.txt | 17 +++ ...er-capture-form-fileupload-alt-firefox.raw | Bin 0 -> 22774 bytes ...ture-form-fileupload-alt-msie.expected.txt | 17 +++ ...owser-capture-form-fileupload-alt-msie.raw | Bin 0 -> 22814 bytes ...re-form-fileupload-alt-safari.expected.txt | 18 +++ ...ser-capture-form-fileupload-alt-safari.raw | Bin 0 -> 22774 bytes ...orm-fileupload-android-chrome.expected.txt | 17 +++ ...capture-form-fileupload-android-chrome.raw | Bin 0 -> 22054 bytes ...rm-fileupload-android-firefox.expected.txt | 14 +++ ...apture-form-fileupload-android-firefox.raw | Bin 0 -> 22105 bytes ...apture-form-fileupload-chrome.expected.txt | 18 +++ ...browser-capture-form-fileupload-chrome.raw | Bin 0 -> 22054 bytes ...-capture-form-fileupload-edge.expected.txt | 14 +++ .../browser-capture-form-fileupload-edge.raw | Bin 0 -> 22085 bytes ...pture-form-fileupload-firefox.expected.txt | 14 +++ ...rowser-capture-form-fileupload-firefox.raw | Bin 0 -> 22063 bytes ...re-form-fileupload-ios-safari.expected.txt | 15 +++ ...ser-capture-form-fileupload-ios-safari.raw | Bin 0 -> 22074 bytes ...-capture-form-fileupload-msie.expected.txt | 14 +++ .../browser-capture-form-fileupload-msie.raw | Bin 0 -> 22082 bytes ...apture-form-fileupload-safari.expected.txt | 15 +++ ...browser-capture-form-fileupload-safari.raw | Bin 0 -> 22054 bytes ...-capture-form1-android-chrome.expected.txt | 16 +++ .../browser-capture-form1-android-chrome.raw | Bin 0 -> 245 bytes ...capture-form1-android-firefox.expected.txt | 13 ++ .../browser-capture-form1-android-firefox.raw | Bin 0 -> 306 bytes .../browser-capture-form1-chrome.expected.txt | 17 +++ .../browser-capture-form1-chrome.raw | Bin 0 -> 256 bytes .../browser-capture-form1-edge.expected.txt | 13 ++ .../multipart/browser-capture-form1-edge.raw | Bin 0 -> 267 bytes ...browser-capture-form1-firefox.expected.txt | 13 ++ .../browser-capture-form1-firefox.raw | Bin 0 -> 258 bytes ...wser-capture-form1-ios-safari.expected.txt | 14 +++ .../browser-capture-form1-ios-safari.raw | Bin 0 -> 268 bytes .../browser-capture-form1-msie.expected.txt | 13 ++ .../multipart/browser-capture-form1-msie.raw | Bin 0 -> 285 bytes ...wser-capture-form1-osx-safari.expected.txt | 14 +++ .../browser-capture-form1-osx-safari.raw | Bin 0 -> 284 bytes ...apture-nested-apache-httpcomp.expected.txt | 12 ++ ...browser-capture-nested-apache-httpcomp.raw | Bin 0 -> 1203 bytes ...nested-binary-apache-httpcomp.expected.txt | 12 ++ ...-capture-nested-binary-apache-httpcomp.raw | Bin 0 -> 1577 bytes ...r-capture-nested-jetty-client.expected.txt | 12 ++ .../browser-capture-nested-jetty-client.raw | Bin 0 -> 1356 bytes ...e-number-only-apache-httpcomp.expected.txt | 9 ++ ...er-capture-number-only-apache-httpcomp.raw | Bin 0 -> 173 bytes ...ture-number-only-jetty-client.expected.txt | 12 ++ ...owser-capture-number-only-jetty-client.raw | Bin 0 -> 12175 bytes ...-number-only2-apache-httpcomp.expected.txt | 9 ++ ...r-capture-number-only2-apache-httpcomp.raw | Bin 0 -> 240 bytes ...-capture-sjis-apache-httpcomp.expected.txt | 10 ++ .../browser-capture-sjis-apache-httpcomp.raw | Bin 0 -> 406 bytes ...s-charset-form-android-chrome.expected.txt | 17 +++ ...pture-sjis-charset-form-android-chrome.raw | Bin 0 -> 354 bytes ...-charset-form-android-firefox.expected.txt | 14 +++ ...ture-sjis-charset-form-android-firefox.raw | Bin 0 -> 430 bytes ...ture-sjis-charset-form-chrome.expected.txt | 18 +++ ...owser-capture-sjis-charset-form-chrome.raw | Bin 0 -> 354 bytes ...apture-sjis-charset-form-edge.expected.txt | 14 +++ ...browser-capture-sjis-charset-form-edge.raw | Bin 0 -> 362 bytes ...ure-sjis-charset-form-firefox.expected.txt | 14 +++ ...wser-capture-sjis-charset-form-firefox.raw | Bin 0 -> 370 bytes ...-sjis-charset-form-ios-safari.expected.txt | 15 +++ ...r-capture-sjis-charset-form-ios-safari.raw | Bin 0 -> 354 bytes ...apture-sjis-charset-form-msie.expected.txt | 14 +++ ...browser-capture-sjis-charset-form-msie.raw | Bin 0 -> 358 bytes ...ture-sjis-charset-form-safari.expected.txt | 15 +++ ...owser-capture-sjis-charset-form-safari.raw | Bin 0 -> 354 bytes ...ture-sjis-form-android-chrome.expected.txt | 16 +++ ...owser-capture-sjis-form-android-chrome.raw | Bin 0 -> 249 bytes ...ure-sjis-form-android-firefox.expected.txt | 13 ++ ...wser-capture-sjis-form-android-firefox.raw | Bin 0 -> 303 bytes ...wser-capture-sjis-form-chrome.expected.txt | 17 +++ .../browser-capture-sjis-form-chrome.raw | Bin 0 -> 249 bytes ...rowser-capture-sjis-form-edge.expected.txt | 13 ++ .../browser-capture-sjis-form-edge.raw | Bin 0 -> 255 bytes ...ser-capture-sjis-form-firefox.expected.txt | 13 ++ .../browser-capture-sjis-form-firefox.raw | Bin 0 -> 261 bytes ...-capture-sjis-form-ios-safari.expected.txt | 14 +++ .../browser-capture-sjis-form-ios-safari.raw | Bin 0 -> 249 bytes ...rowser-capture-sjis-form-msie.expected.txt | 13 ++ .../browser-capture-sjis-form-msie.raw | Bin 0 -> 255 bytes ...wser-capture-sjis-form-safari.expected.txt | 14 +++ .../browser-capture-sjis-form-safari.raw | Bin 0 -> 249 bytes ...ser-capture-sjis-jetty-client.expected.txt | 10 ++ .../browser-capture-sjis-jetty-client.raw | Bin 0 -> 346 bytes ...range-quoting-apache-httpcomp.expected.txt | 11 ++ ...apture-strange-quoting-apache-httpcomp.raw | Bin 0 -> 797 bytes ...re-text-files-apache-httpcomp.expected.txt | 15 +++ ...ser-capture-text-files-apache-httpcomp.raw | Bin 0 -> 737 bytes ...pture-text-files-jetty-client.expected.txt | 15 +++ ...rowser-capture-text-files-jetty-client.raw | Bin 0 -> 660 bytes ...unicode-names-apache-httpcomp.expected.txt | 11 ++ ...-capture-unicode-names-apache-httpcomp.raw | Bin 0 -> 475 bytes ...re-unicode-names-jetty-client.expected.txt | 11 ++ ...ser-capture-unicode-names-jetty-client.raw | Bin 0 -> 379 bytes ...-whitespace-only-jetty-client.expected.txt | 10 ++ ...r-capture-whitespace-only-jetty-client.raw | Bin 0 -> 1048836 bytes ...go-text-plain-apache-httpcomp.expected.txt | 12 ++ ...pture-zalgo-text-plain-apache-httpcomp.raw | Bin 0 -> 1870 bytes .../multipart-base64-long.expected.txt | 4 + .../multipart/multipart-base64-long.raw | Bin 0 -> 29278 bytes .../multipart/multipart-base64.expected.txt | 4 + .../resources/multipart/multipart-base64.raw | Bin 0 -> 29661 bytes .../multipart-uppercase.expected.txt | 5 + .../multipart/multipart-uppercase.raw | Bin 0 -> 403 bytes jetty-util/pom.xml | 101 ---------------- pom.xml | 1 + 142 files changed, 1007 insertions(+), 134 deletions(-) create mode 100644 Jmh_Jenkinsfile create mode 100644 jetty-jmh/pom.xml rename {jetty-http/src/test => jetty-jmh/src/main}/java/org/eclipse/jetty/http/jmh/MultiPartBenchmark.java (90%) rename {jetty-util/src/test => jetty-jmh/src/main}/java/org/eclipse/jetty/util/jmh/DateCacheBenchmark.java (100%) rename {jetty-util/src/test => jetty-jmh/src/main}/java/org/eclipse/jetty/util/jmh/DateCacheNoTick.java (100%) rename {jetty-util/src/test => jetty-jmh/src/main}/java/org/eclipse/jetty/util/jmh/DateCacheNoTickBenchmark.java (100%) rename {jetty-util/src/test => jetty-jmh/src/main}/java/org/eclipse/jetty/util/jmh/DateCacheSimpleDateFormat.java (100%) rename {jetty-util/src/test => jetty-jmh/src/main}/java/org/eclipse/jetty/util/jmh/DateCacheSimpleDateFormatBenchmark.java (100%) rename {jetty-util/src/test => jetty-jmh/src/main}/java/org/eclipse/jetty/util/thread/jmh/ThreadPoolBenchmark.java (100%) rename {jetty-util/src/test => jetty-jmh/src/main}/java/org/eclipse/jetty/util/thread/strategy/jmh/EWYKBenchmark.java (100%) rename {jetty-util/src/test => jetty-jmh/src/main}/java/org/eclipse/jetty/util/thread/strategy/jmh/TestConnection.java (100%) rename {jetty-util/src/test => jetty-jmh/src/main}/java/org/eclipse/jetty/util/thread/strategy/jmh/TestServer.java (100%) create mode 100644 jetty-jmh/src/main/resources/jetty-logging.properties create mode 100644 jetty-jmh/src/main/resources/keystore create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-company-urlencoded-apache-httpcomp.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-company-urlencoded-apache-httpcomp.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-complex-apache-httpcomp.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-complex-apache-httpcomp.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-complex-jetty-client.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-complex-jetty-client.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-duplicate-names-apache-httpcomp.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-duplicate-names-apache-httpcomp.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-duplicate-names-jetty-client.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-duplicate-names-jetty-client.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-encoding-mess-apache-httpcomp.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-encoding-mess-apache-httpcomp.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-encoding-mess-jetty-client.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-encoding-mess-jetty-client.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-alt-chrome.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-alt-chrome.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-alt-edge.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-alt-edge.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-alt-firefox.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-alt-firefox.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-alt-msie.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-alt-msie.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-alt-safari.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-alt-safari.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-android-chrome.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-android-chrome.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-android-firefox.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-android-firefox.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-chrome.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-chrome.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-edge.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-edge.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-firefox.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-firefox.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-ios-safari.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-ios-safari.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-msie.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-msie.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-safari.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-safari.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form1-android-chrome.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form1-android-chrome.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form1-android-firefox.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form1-android-firefox.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form1-chrome.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form1-chrome.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form1-edge.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form1-edge.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form1-firefox.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form1-firefox.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form1-ios-safari.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form1-ios-safari.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form1-msie.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form1-msie.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form1-osx-safari.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-form1-osx-safari.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-nested-apache-httpcomp.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-nested-apache-httpcomp.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-nested-binary-apache-httpcomp.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-nested-binary-apache-httpcomp.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-nested-jetty-client.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-nested-jetty-client.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-number-only-apache-httpcomp.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-number-only-apache-httpcomp.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-number-only-jetty-client.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-number-only-jetty-client.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-number-only2-apache-httpcomp.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-number-only2-apache-httpcomp.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-apache-httpcomp.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-apache-httpcomp.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-android-chrome.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-android-chrome.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-android-firefox.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-android-firefox.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-chrome.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-chrome.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-edge.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-edge.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-firefox.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-firefox.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-ios-safari.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-ios-safari.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-msie.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-msie.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-safari.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-safari.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-form-android-chrome.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-form-android-chrome.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-form-android-firefox.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-form-android-firefox.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-form-chrome.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-form-chrome.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-form-edge.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-form-edge.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-form-firefox.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-form-firefox.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-form-ios-safari.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-form-ios-safari.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-form-msie.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-form-msie.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-form-safari.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-form-safari.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-jetty-client.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-sjis-jetty-client.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-strange-quoting-apache-httpcomp.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-strange-quoting-apache-httpcomp.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-text-files-apache-httpcomp.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-text-files-apache-httpcomp.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-text-files-jetty-client.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-text-files-jetty-client.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-unicode-names-apache-httpcomp.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-unicode-names-apache-httpcomp.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-unicode-names-jetty-client.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-unicode-names-jetty-client.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-whitespace-only-jetty-client.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-whitespace-only-jetty-client.raw create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-zalgo-text-plain-apache-httpcomp.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/browser-capture-zalgo-text-plain-apache-httpcomp.raw create mode 100644 jetty-jmh/src/main/resources/multipart/multipart-base64-long.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/multipart-base64-long.raw create mode 100644 jetty-jmh/src/main/resources/multipart/multipart-base64.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/multipart-base64.raw create mode 100644 jetty-jmh/src/main/resources/multipart/multipart-uppercase.expected.txt create mode 100644 jetty-jmh/src/main/resources/multipart/multipart-uppercase.raw diff --git a/Jenkinsfile b/Jenkinsfile index e20fdd8ccb7..2ff5e914b5f 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -12,19 +12,6 @@ for (def os in oss) { parallel builds -// jmh run -/* -stage("jmh-run") { - node( 'jmh-build-node' ) { - timeout( time: 120, unit: 'MINUTES' ) { - withEnv( ["JAVA_HOME=${tool "jdk8"}"] ) { - unstash name: 'perf-tests' - sh "${env.JAVA_HOME}/bin/java -jar jetty-util/target/perf-test.jar -rff jetty-util/target/jmh_result.json -rf json" - jmhReport 'jetty-util/target/jmh_result.json' - } - } - } -}*/ def getFullBuild(jdk, os) { return { @@ -120,7 +107,6 @@ def getFullBuild(jdk, os) { [parserName: 'JavaC']]; if (isMainBuild( jdk )) { // Collect up the jacoco execution results - stash name: 'perf-tests', includes: 'jetty-util/target/perf-test.jar' def jacocoExcludes = // build tools "**/org/eclipse/jetty/ant/**" + ",**/org/eclipse/jetty/maven/**" + diff --git a/Jmh_Jenkinsfile b/Jmh_Jenkinsfile new file mode 100644 index 00000000000..deab122aca3 --- /dev/null +++ b/Jmh_Jenkinsfile @@ -0,0 +1,56 @@ +#!groovy + + +node("linux") { + // System Dependent Locations + def mvntool = tool name: 'maven3.5', type: 'hudson.tasks.Maven$MavenInstallation' + def jdktool = tool name: "jdk8", type: 'hudson.model.JDK' + def mvnName = 'maven3.5' + def localRepo = "${env.JENKINS_HOME}/${env.EXECUTOR_NUMBER}" + def settingsName = 'oss-settings.xml' + def mavenOpts = '-Xms1g -Xmx4g -Djava.awt.headless=true' + + // Environment + List mvnEnv = ["PATH+MVN=${mvntool}/bin", "PATH+JDK=${jdktool}/bin", "JAVA_HOME=${jdktool}/", "MAVEN_HOME=${mvntool}"] + mvnEnv.add("MAVEN_OPTS=$mavenOpts") + + + stage("Checkout") { + git url: 'https://github.com/eclipse/jetty.project.git', branch: 'jetty-9.4.x' + } + + stage("Compile") { + withEnv(mvnEnv) { + timeout(time: 15, unit: 'MINUTES') { + withMaven( + maven: mvnName, + jdk: "jdk8", + publisherStrategy: 'EXPLICIT', + globalMavenSettingsConfig: settingsName, + mavenOpts: mavenOpts, + mavenLocalRepo: localRepo) { + sh "mvn -V -B clean install -DskipTests -T6 -e" + } + + } + stash name: 'perf-tests', includes: 'jetty-jmh/target/benchmarks.jar' + } + } +} + +// jmh run + +stage("jmh-run") { + node( 'jmh-build-node' ) { + timeout( time: 120, unit: 'MINUTES' ) { + withEnv( ["JAVA_HOME=${tool "jdk8"}"] ) { + unstash name: 'perf-tests' + sh "${env.JAVA_HOME}/bin/java -jar jetty-jmh/target/benchmarks.jar -rff jetty-jmh/target/jmh_result.json -rf json" + jmhReport 'jetty-jmh/target/jmh_result.json' + } + } + } +} + + +// vim: et:ts=2:sw=2:ft=groovy diff --git a/jetty-http/pom.xml b/jetty-http/pom.xml index 4f853c54b9c..7831f8ac430 100644 --- a/jetty-http/pom.xml +++ b/jetty-http/pom.xml @@ -33,18 +33,6 @@ jetty-test-helper test - - org.openjdk.jmh - jmh-core - ${jmh.version} - test - - - org.openjdk.jmh - jmh-generator-annprocess - ${jmh.version} - test - diff --git a/jetty-jmh/pom.xml b/jetty-jmh/pom.xml new file mode 100644 index 00000000000..71ebaccfc56 --- /dev/null +++ b/jetty-jmh/pom.xml @@ -0,0 +1,111 @@ + + + org.eclipse.jetty + jetty-project + 9.4.12-SNAPSHOT + + 4.0.0 + jetty-jmh + Jetty :: Jmh + Jmh classes for Jetty + http://www.eclipse.org/jetty + + + + org.codehaus.mojo + findbugs-maven-plugin + + true + + + + org.apache.felix + maven-bundle-plugin + true + + true + + + + org.apache.maven.plugins + maven-shade-plugin + + + package + + shade + + + ${jmhjar.name} + true + + + org.openjdk.jmh.Main + + + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + + true + + + + + + + + org.eclipse.jetty + jetty-util + ${project.version} + + + org.eclipse.jetty + jetty-http + ${project.version} + + + org.eclipse.jetty + jetty-http + ${project.version} + tests + + + javax.servlet + javax.servlet-api + + + org.eclipse.jetty.toolchain + jetty-test-helper + + + org.openjdk.jmh + jmh-core + ${jmh.version} + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh.version} + + + diff --git a/jetty-http/src/test/java/org/eclipse/jetty/http/jmh/MultiPartBenchmark.java b/jetty-jmh/src/main/java/org/eclipse/jetty/http/jmh/MultiPartBenchmark.java similarity index 90% rename from jetty-http/src/test/java/org/eclipse/jetty/http/jmh/MultiPartBenchmark.java rename to jetty-jmh/src/main/java/org/eclipse/jetty/http/jmh/MultiPartBenchmark.java index a7ff4275c62..8c985728875 100644 --- a/jetty-http/src/test/java/org/eclipse/jetty/http/jmh/MultiPartBenchmark.java +++ b/jetty-jmh/src/main/java/org/eclipse/jetty/http/jmh/MultiPartBenchmark.java @@ -20,6 +20,7 @@ package org.eclipse.jetty.http.jmh; import java.io.File; import java.io.InputStream; +import java.io.OutputStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardOpenOption; @@ -33,7 +34,7 @@ import javax.servlet.http.Part; import org.eclipse.jetty.http.MultiPartFormInputStream; import org.eclipse.jetty.http.MultiPartCaptureTest.MultipartExpectations; -import org.eclipse.jetty.toolchain.test.MavenTestingUtils; +import org.eclipse.jetty.toolchain.test.IO; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.BenchmarkMode; import org.openjdk.jmh.annotations.Level; @@ -219,15 +220,23 @@ public class MultiPartBenchmark { for (String multiPart : data) { - Path multipartRawFile = MavenTestingUtils.getTestResourcePathFile("multipart/" + multiPart + ".raw"); - Path expectationPath = MavenTestingUtils.getTestResourcePathFile("multipart/" + multiPart + ".expected.txt"); + //Path multipartRawFile = MavenTestingUtils.getTestResourcePathFile("multipart/" + multiPart + ".raw"); + String expectationPath = "multipart/" + multiPart + ".expected.txt"; + //Path expectationPath = MavenTestingUtils.getTestResourcePathFile("multipart/" + multiPart + ".expected.txt"); + + File expectationFile = File.createTempFile( expectationPath, ".tmp" ); + + try(InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(expectationPath); + OutputStream os = Files.newOutputStream( expectationFile.toPath() )) { + IO.copy( inputStream, os ); + } + + Path outputDir = Files.createTempDirectory( "expected_output_jmh_jetty" );// new File("/tmp").toPath(); - Path outputDir = new File("/tmp").toPath(); - - MultipartExpectations multipartExpectations = new MultipartExpectations(expectationPath); + MultipartExpectations multipartExpectations = new MultipartExpectations(expectationFile.toPath()); MultipartConfigElement config = newMultipartConfigElement(outputDir); - try (InputStream in = Files.newInputStream(multipartRawFile)) + try (InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream( "multipart/" + multiPart + ".raw" )) { switch (parserType) { diff --git a/jetty-util/src/test/java/org/eclipse/jetty/util/jmh/DateCacheBenchmark.java b/jetty-jmh/src/main/java/org/eclipse/jetty/util/jmh/DateCacheBenchmark.java similarity index 100% rename from jetty-util/src/test/java/org/eclipse/jetty/util/jmh/DateCacheBenchmark.java rename to jetty-jmh/src/main/java/org/eclipse/jetty/util/jmh/DateCacheBenchmark.java diff --git a/jetty-util/src/test/java/org/eclipse/jetty/util/jmh/DateCacheNoTick.java b/jetty-jmh/src/main/java/org/eclipse/jetty/util/jmh/DateCacheNoTick.java similarity index 100% rename from jetty-util/src/test/java/org/eclipse/jetty/util/jmh/DateCacheNoTick.java rename to jetty-jmh/src/main/java/org/eclipse/jetty/util/jmh/DateCacheNoTick.java diff --git a/jetty-util/src/test/java/org/eclipse/jetty/util/jmh/DateCacheNoTickBenchmark.java b/jetty-jmh/src/main/java/org/eclipse/jetty/util/jmh/DateCacheNoTickBenchmark.java similarity index 100% rename from jetty-util/src/test/java/org/eclipse/jetty/util/jmh/DateCacheNoTickBenchmark.java rename to jetty-jmh/src/main/java/org/eclipse/jetty/util/jmh/DateCacheNoTickBenchmark.java diff --git a/jetty-util/src/test/java/org/eclipse/jetty/util/jmh/DateCacheSimpleDateFormat.java b/jetty-jmh/src/main/java/org/eclipse/jetty/util/jmh/DateCacheSimpleDateFormat.java similarity index 100% rename from jetty-util/src/test/java/org/eclipse/jetty/util/jmh/DateCacheSimpleDateFormat.java rename to jetty-jmh/src/main/java/org/eclipse/jetty/util/jmh/DateCacheSimpleDateFormat.java diff --git a/jetty-util/src/test/java/org/eclipse/jetty/util/jmh/DateCacheSimpleDateFormatBenchmark.java b/jetty-jmh/src/main/java/org/eclipse/jetty/util/jmh/DateCacheSimpleDateFormatBenchmark.java similarity index 100% rename from jetty-util/src/test/java/org/eclipse/jetty/util/jmh/DateCacheSimpleDateFormatBenchmark.java rename to jetty-jmh/src/main/java/org/eclipse/jetty/util/jmh/DateCacheSimpleDateFormatBenchmark.java diff --git a/jetty-util/src/test/java/org/eclipse/jetty/util/thread/jmh/ThreadPoolBenchmark.java b/jetty-jmh/src/main/java/org/eclipse/jetty/util/thread/jmh/ThreadPoolBenchmark.java similarity index 100% rename from jetty-util/src/test/java/org/eclipse/jetty/util/thread/jmh/ThreadPoolBenchmark.java rename to jetty-jmh/src/main/java/org/eclipse/jetty/util/thread/jmh/ThreadPoolBenchmark.java diff --git a/jetty-util/src/test/java/org/eclipse/jetty/util/thread/strategy/jmh/EWYKBenchmark.java b/jetty-jmh/src/main/java/org/eclipse/jetty/util/thread/strategy/jmh/EWYKBenchmark.java similarity index 100% rename from jetty-util/src/test/java/org/eclipse/jetty/util/thread/strategy/jmh/EWYKBenchmark.java rename to jetty-jmh/src/main/java/org/eclipse/jetty/util/thread/strategy/jmh/EWYKBenchmark.java diff --git a/jetty-util/src/test/java/org/eclipse/jetty/util/thread/strategy/jmh/TestConnection.java b/jetty-jmh/src/main/java/org/eclipse/jetty/util/thread/strategy/jmh/TestConnection.java similarity index 100% rename from jetty-util/src/test/java/org/eclipse/jetty/util/thread/strategy/jmh/TestConnection.java rename to jetty-jmh/src/main/java/org/eclipse/jetty/util/thread/strategy/jmh/TestConnection.java diff --git a/jetty-util/src/test/java/org/eclipse/jetty/util/thread/strategy/jmh/TestServer.java b/jetty-jmh/src/main/java/org/eclipse/jetty/util/thread/strategy/jmh/TestServer.java similarity index 100% rename from jetty-util/src/test/java/org/eclipse/jetty/util/thread/strategy/jmh/TestServer.java rename to jetty-jmh/src/main/java/org/eclipse/jetty/util/thread/strategy/jmh/TestServer.java diff --git a/jetty-jmh/src/main/resources/jetty-logging.properties b/jetty-jmh/src/main/resources/jetty-logging.properties new file mode 100644 index 00000000000..799aa62aed3 --- /dev/null +++ b/jetty-jmh/src/main/resources/jetty-logging.properties @@ -0,0 +1,4 @@ +org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.StdErrLog +#org.eclipse.jetty.LEVEL=DEBUG +#org.eclipse.jetty.server.LEVEL=DEBUG +#org.eclipse.jetty.http.LEVEL=DEBUG diff --git a/jetty-jmh/src/main/resources/keystore b/jetty-jmh/src/main/resources/keystore new file mode 100644 index 0000000000000000000000000000000000000000..b727bd0fb777fddb3463c81cb56963a7541f7b45 GIT binary patch literal 1426 zcmezO_TO6u1_mY|W&~r_+{*0KN+9!5EW=$#pv*3VCZ=r$d~96WY>X_7T1LX-9cnmv_92vyZY^nksPD zdgGz_%YMiA%<+G`?zc{_^OTmKsam}GdFt7neK!{P|Bco8Yq|9PvTGT0HqQC!@x9l1 z+kfrLjk$U4PfrzX4>?lEY_X)NU`c_upzVKwLzZV_Z=OB7;%H;~#q=-kB7C15mGAK^ zvQDWpwV1Q=%|)J*vS+h8eD_X&KBLa;y!Ym4fd?y?u6<@yiQRcgW4YSWJ1qI-Q@4qE za4m1Vxao>O&#^E1)!s>&+m1~AFk#ErRgE9c$R|1RHZn>ST)F2PCX`h;GftH|P3C*s zWzB^ZGW^U2Io6G9jl> z6zzz+mrM40Funf&SL@T49sAWnZvUNcc-}kaM`;+(`I*O}e=OTwz2vdB%C^t0KV2dN z8|5bLIJC=m`3p1S>EdUM&gly9o_)k?62R=&u_P~(KYzPEv+V7u$GBF7Yt*targsEg zTQzgVqnKmgxtO%H)!0fto_uWX^v1c;QdM?#toT{0*tgvCKBx=r`VraapZ2`+cgggB z-Pvqw9={ifyv(DLz=%jkh_cpEkNBn#fQtx!K-V#22ApgPb-K(wNrdO3Et=(zk zH%r#4Uj9|=lZlRA5;d`xvpUaban7~tb)L?vqO(?31t6P_KXXUmI|NTdEW^*XD%W$kc6J6C`ZJL_TRc(ux#yKj=Ue_0-Rb!XA^BcIEU@^esCUfRc7B*q_(7f!t{PH}Q2nU7; zJ3>UpKnkRbOIX-9zos$!bwcyY3l3?6uy+&YLB9AjrXwMJ9=TVxnh^gTTRrgQDAx z_HixoIbPSC|G?I^w5omSz6+C2WR&Q742Af!tZ{F_B0c(^#Lh& zza|JWF*7nSB0CQl;mkmH*$SFDWnY}}>VU(o3#<5V+huGG`Dn2??1_qdd2)==i--F? zs#KSqOx?Wrm7jRA(!0Yuu5HVhrWZZce5Lb}5Bq8!uvR=V-JM%7`INM|?JE9h{&PR9 zPS5OYv=7|qeAeX{<0}8%Th2N96wN*x(D1*r!0!3JEkDAd&tKmoUZ_-IpH*z9SS+KQ^VC>!*F;^K7NK=$K3noyI6^*dDNoQq7V$QftS d%5*TAr1dLl2cv07Lt`oR4){4acVX^@l(d=};O`y1Tn! zVPWs#`kHojhH{v|l~<&{1`Fls9$t5|Ved^?B^( z{m#@~nODuu^_8B>Gg9IwPL6I?j&8h9ZC#z6Ty5QKogAfLZ=75lcrDG{%%x$D<_=ae zY|gf9|Iejb-p*E1FgGhNH-6{0=C+Q~Fbf-V7gsAc86{0MUI__NNnXMK*VQiOj;?R4 zTzC~6Eu1WE9j&Ec60dFDNQp^_h4}ua3;Z$-&v&(fj{1JacE~x3(7MH}k>o#p~(m z$@|}=xVyZyx*3O+<^Qh{zIJ*IdjNX_PJum#E6ml#$qMFTmd z*uJ%5lZM^A{LjMu@2~!k<8!ibvvT8gb#t*YclbXJ>$R<;xr_JB(tT7{eNIZuKnwr? zsgmMT4FG_EUqS#veDKA{CGQRRg6sNNNsAEt@FTPg1-~b9R@8R|0K(~;Pe}T@=_BwT z>D?6c+%%ouxOtkpSOMTX^VvGuyIPn#Tk$!$SSRm3VgLXbp!8H;%PVEa-`kH`VG>*8 z`+!3d7VZ3mLLUA!#8~n-$(|==>&V<ypP@?kuik8F;;qF%;4y`tbaVKr za*kOpu&iFJ2g zX6n2T8K>}@ILS;SKk=a-r+ZM}yzMj6K@|qq^Tt;-?hT@mf5+f~jnXCHUM|H%T0{ao z#B%P%>nW*o!9K-=9lfu9CZH91a80Tqc_LgKMP<$uCEDB{Kj=k3)Ug&P#-G^ zJzv?WrPPv-&t0FZ?eOa!p2a$|POF>$9<0F0-GXxhg$^x#e^}h1>ePsl zj@!Hb6Yt{fi|vdlU3+)i#qhZ;VHc(*Xsv;eAZM#Ji|>^R&y)O)qs65sDXba04ov3!~V zc?ARRwv}cnJY-EMw(5L(nPtI6(Wod_$?Fr)&_O{)7ZAv#p~G$(e|ZE8{}jGy^MO#S z*Sb?EqlepPui=cBn3(t@Y*QYNucP9p|4ow}!c7`q<3!g$r|6J;7gGP_DoX3_LpJKn znv0bDiu`9C+QGfVT0MC$pjwh%J>dFqIRsozg;JrOUQW>ZNTwE#XvoWHs8M{LXVe-nEmjQ^1C9j@+XaYtcLYED4Kr$dw_OcRfxJ`A1c+O zc>Bx{8+8N zRbbg8-RXD)^O^HdLJ`EDW(?BaY8}Jt?8jz8$f!`ipQft^r*o_qbZT{@bRQfg>2lyu z_g307L(2H|ts~KYVShW`(G%qvK-h}ui0KO-S)Vp5lyPAeV1T~i_ffX4$w0;Zi8HcQ z1{|riuPn}?08i4jM@TxA%TbaPT_k=%K|X+J|7`2e+?%Y_GEFF=cMo#3m+uq&xT7E# z`19kI4z9^F+DBzO+TV*S)+R2?=53K_0!Op-+~@O{H1m#c>=P9JMM2BXw7u?TQOhoE)AKBh?|K8kJ3aXrry$jx+t5fuwUu~SKl8vh*@=b zu|H9L(ANLdtY`vXULSY0<9?v_0(qw}{x7RVTa|x5XsG5#l8t)_;n^@RcS_2ydA$2w zY5rr|jrvrCu;8-Ws20o`QJ7+=7C0A<6K&V33WoV&8ZkeF_P~SZG4&F+gU#;FFxEE5 zwW022n{9>rbi9=u7wV~MQ|D?I&U3`ZcQF8%%$33?gijNsD zay*KFm^KYoh%{~sw_G8vUU-!Mz&7&EW2aeiF17oF@MD1pQQx#Ply;xL&b%@4RK>Fw zl#o(cYAptyz3;ujv)m6^>dQs}H32@#U5u-0}l7 zJXqlwE?aAEu&I^d2m^S1X=YNZ*ra-}>2nz6dXB>v!tphwpU}6G6Bl}vh#o3U|Bh{B za_eoAMEv-l(A7)*k!vB67>zI?DD@i1#-dG-mZT52k3oG9u8p@@b0!WVIquUet>wv&O<9q(IWDt@N?qD)x)5@2jb@ z$Ce%;bKJG!hWv62MnH=tX)xGkT(7MrXZ=#wTMKObxWj3972*?%(;+kw-xs&Ga;g(? zKM930;6)Yn#aPA&!@#VSpG%p?CzxF3p#l&kNB>Z%HVu%5iv*q(wctyta$ki&%^eR(W8Ub9t z=}%(X8!a~cxBl-N$z+X_X@7oY(eA2)&N$8~2{Ca}!}(%(qsQLtOe}A`cX~k(dL(%g zRep{^H1kVKU+RsO7@x^u_S+4mJhr<=m6kW1mEd<}{c1C=M_bAPugTd4m2yt2P0gg) z{)rMf9X-9Tg6|f8$>03Q0Pkke`)jeg*7)9mqGB)o-cnJeb1a^&*y{AE{-=e5v$P;PtA)$ zaQFMg=a!9-S0`%PIyz#mb<@<~%+;>%)XX8?bw#s&C%g}&?Gsetr6PNy%}4qOmdR7C z5d{>1cTv7ACj^ZNk<=NiA9a+Eg+y7`0 zz<87Y<@X?bQXj-jox7yXLt#S#b7QlDp-{?u*Zh-h6bgWr{1;hhzF zR6&}!W^h_u!9V%6xI%NE9a2tuMaPU>w^sX;OK(~Keoaq8$H#ct!(HkIO{dmQ%lw4v z)iz)lTToc2SyHAtq;|!hVNn@XHx;mXI<>ujO7)KizwujMhzo(|7%f0s(YDN^GO!n=0RFfUJ zGiAPMI77jOXDYWINYmP1d2jD7Ee{k-rZt+pAyP-=ma|x1V~^6Yj4)2kZ%@6wy|2ei zku!`K6UxG;X0(o($#~B~Rns0N)>(GPZrxKi?#(MH`Qx=+-pPk!Iv=tNx3aR@v`+V@ z{XA-^qM}my@7wb^Ld01?Iq6XOUn02qA$j2e5T94sXIku(C+)fWXb!Qnc=u+Jo_SR@ z6`)yQPow0n&s)O6!cqveMrgnAo6geFUSYujV;aB@TelZHojEGWCGV#(AIc+#)y+<$ zw0-a`bx>6SU*h7jnIv8Ar*n;8@qYd{%#@DbcIZN`lWy6G5&8JfRlez0%~CDv7Z{U+2VMBd zj>%mgL~-X~KY64M4h{8E@QAM-us{y!Hr&j(bL0j-l)r}5%7NSak8HY{UgxcZ_X$$p z+i21cqmq%-ByvF9moIO!0+vN_$;gBl-sjzoe%>IoP>MYL{6M9ywyLU1RJ&=e>Sae9 z8K))F+vNHTtg%FJw8bb4`#JW;~xxmDg#z&abT=| zugRBJ`-ceAouNrd74PY#&g2ijlc<0?j~#9#ks)-0 zpyt=O8Ax+Ceeh238%`(fjma4$qSa`2OByVf*(E!hN?A%;mH5$qf9pM+m?6$n^Wd#b zy&FiA*~z>7{W#UR8jdfC8stF#%}e&8vnxcjvFL60SN3P>2~KbFkQy~T92(IJswh%b1*bE zPUYh&QZ96bEYi%S9Y?PXNUo(o_e18!b6x{H5bk6wi~sSf`kkp7&u=}ay{k&=af{Ow zah}R{&e>l^TRuDP@4( z&};+mYqqdkUcoST2rZwH7oT<)$)Iu9rzN1Jh6>xPmM;4qJ#gF6HLUz62a1F6OCNS) zDA$xoY3VXGC~0tuAWiP6eGk|SG&OToXP^pL?9a8dtzMBZiTJBplRSFPWAK)kx)S)Qq4DkyYe^v3_^2@lR1t?YTKa>Mpm~`Xqf~S#1lv9R%Z0{wG#Ha^78T=1u&e&uYgYKG4aqD0F#kv zT)fySm3u#bW}o&Xx(9#xw`n%6fbC#*t1L^ZnOI4&E4XprbcgS)h zr$6#`N!Kg=JhfBebMTvvZv3ZbEe}A0or^>}(Yk3D@z6E6b!t71| zJTk#e0*7c9jgrJ~31kOMJnc~=W%gqwMWsy_1>)Kz>DIN*`d?h1t*v#+jH@fjCEsUTJuXYMW?iTmbE{n?;NqmOnH*{dGOd4Fk9vX=2T{eH8O zv(*K=C=y0eQO{kYLCjus);IqOSIFI5RuaI(?Vp02JjT&m5SSI!A#9N`ZwrQis9-y< z4*2A>H4V@MUs=cEX06k_-`orA{-;M!Rnz^M!&FaG^GT0l)mHXao%LjuE!K)`2tsl@ zOOPs>jVKLW%0Q53s#9t*W7CgikSogx93_16{?9=%3{AfJ+9$*@_$(IA6AodZ!da_0#F@4{Vz}b3Sb8>fi3Qaj751RC8ab&$Dbja zb7UNlT1agg;$lNKS2dL_SJ$^e`5u|d zG3rH{?T`!X6xY>Fp3M60#pq|3tLO3=*A;<wQ3*(8FU`+%nR!H;Z9L3 zYHJRA?I|lNXpy7bjz{J(AwimmMS|spIas1Kga&bH!P;>-k7xXoucgX%$cGt(yq~#- z+KV-#-*&#y`jrxtEAJT#QG0ao>&?Cev;58udM$m=$iQGS_~z)?_I(w6zo(`T@KEA1 zMp;UgmH(gumVW|S%n%UXq7PTlTJjfGb&R4@DesF2%=YJ7f2(r<(zNi#{YyXDGwHns zS0e4Sn{HR_rmD$YaIl2KCPNGOoNnv;4XKF7vyCs}emz||LLZCIdIb$%gTp=DncDMO z&-_3POQSNP#vz2^_TriiVb|mpwhHaA7w~zog-UB683wMA^3_p{WCgYij!o#*_IU!p zU8Ik2>$w>nth8R;4$^Sg!@b5V<(4O@y-HyCKw4_?@O#!!Ud*os>>l>oiF=(n>f+)C z$n1cdA@}Vj0(|rO-MZfOvs^;>kKnhE{qeY&nr~P6^XbvlAkHl;D=Wj%p7%P%T1_@P zO#SGbthQfMnDMnrFJEuZXplTm;Df^%=SOr+ujsYYw3zN}nfYuJm9jV~4q6-?9YxK! z4#+6jc#&zHrC%?G^T)m^4VFb19a((FrX|K|;v@vO5Cv525`?*f?eljcwo)j0INv5}!m~gohlDf8jOM zkp+3gWoFJ*wSMKBm~YqMZw5>7cd#>FFq7^@UDZ{EY0oQC{0*}#=Wl7?y^Ua{FEXzG zB7!COeXu`g!7TS9J!`3L%-Azkuodrex-XqJ;U}PV3r;Y90dfYzuCx>0{?E>;1+ELD zXD{rW^?pw=K37%tMU+?4gdxN{rzHT@nxB$N)owSnf<03hD; z$mEgnFp3+psH~_^jbf2QkpC*Nfy;p9Vv=`s3j|g=g4TahXedY|>ec5^w`BrP26T%}40{=p2*87Dw(G-DRk<`*J z@sN-?ZLct(elcj_)O>YnoS2xnI^o<;n78)BVJeBoxGoOUqsBA5u~}Gpeb}d)p*@3>eTQMMJK6!L9tQkU4(~t5|1usx88sp^T+&Bg&rzy}q zfP*eqJFDx3z-U2I`q&+uKOnw{!stDDl#H!L%o8X<|HkW@ctic56be{<=zL=W${IP} z5>TZkcNN!Hh0%Xcl3*=8R`exp->mVzjK}%@g0Df1qr>rcTiB)-SSqv<4?{zwNEt+I ztU$8B-Gc3@d`Ju1p;s@7|Ann#TW_#nqcX!Y&Pz-ZbMQ&x!iK0ANw991eAF%~-49Fx z9d<{8aPf#VLarNEiYwIQBDBZuj z>KYhmK7L8j>%{mZ$oYxeCsdBDd+ETA$0f)mOe<{uW&Ic?uglr2=9&imUj9gnI00O|yH}|L)UC*H@PbnW|s=WdI>v*diaQpr!YZVfigL zz#yEKSCJ$`@LNvKGk!k42Se|k{BH0*>RP@7coh{_Zj=kNzj9F-+8@?b+Y#}gWSkQi zWdQs;KGCB&)Y9&c_*QMIt}S7g=+MEXYUlvN5~VDa3ZZ{LL7b zdJunRzq$dtGKXFF(!Z(BM}V@FP92VezIa?B`5%L0!}>SKXe$A?^}qIFj?;=2-q1g+ zQ{NX51Va|#c9`>wV6lC^hW)m0;?vGSf}*rE$%CN&aS9%a*trOB3$3iJ(ShxvbA+AQna9m~G#=SCzEPGBgR&g^TD#dU+2UoFeoTsEG~ z+E-f-FuPEF*2^0zMP6-vx1sRS-f^YqP zwF81bbgJj9x1O_i#yY(Klfhta=S96KUsWD{p@ah zGUJI<1f%332`+Ji_Cmr>DEwTZr+pf~jGTacAARiTqV11yOv@ z#p#rjp~l(Wn9sp~$Z|0~n{G$_;{3|W%7qFU^My8uiLPc~f#9(x#ET*($apTjrWo?~ zhJg)YoDzzpxiCQ4_d(?(S1DA}yOa;G$Ogt=9&$Tc4xtdJNYoK*+d{4I=>b2TzArFsHKl<}w6Y5+X09Mh@*U0;_09Wr& z)S8lFKpj7&=AHS!9|W~E5FDy0dV~r)a#lTYu8)|>yML*2Ty<^6rKI@zfStG3TxPxV zE=k5Rz8)*U^_Alu^vIn}XdWL8E5j#akxlX0pO+s@4-ek&CWNI8MSCjcuo9rI$%gmB zZ!;Ht&c*E7j}*lJY2AG)+OGi0#jxRzt0!(J@or zwo(SQ?R&EivpX+tFgElLXUT6#_swC|k&zL%p3?T)h^|eLF?enc=l5pto$CZ4M~zSv z805q|?g!0zhU%9f@#+T5=5EoYcr;pFzq=&FWljB6vl6Qx$^@%%k2m4@oZV^SIpa?7 z2LzW~xb`B#BEUm_e$OiqTleSgj zoEN<{1lWW@=F9`~9U*R5D503s?8^(Rp!s#@0naZ~nD1@GXZ=+U`=s|DZ*%NEF8h15 zZjvl&uk+#X&_!ycMx~;Xvzgcwoho1s<=^`m$%wlwYlKT&-Q(_ogM!#c zb$+9xrH!SWQ6!vu@p_+}Vr~_g*crvbo{Cv0F_o_-X90Wu4dkCLHI;Mi;g2E|0Sr`B zB2GsQonn+;7k?I=j@e2-$vuUAV2~_====T}< zl-nLh0rxOK75ZqcM#}%9YJX~nulNt1GgZ8-oLFisuKNwe1$Ttg!l<)}f!9e+M4YM6 zV>BpNRLS_Amx-*5DeH z2t&z~L+-+%u9$oJI|C%w`F+s7dr-n34kyqqv*+Vht?&{wwwoh8`d-~6$Cgd{_S?D3 zQB9M>m5xj6E?vd0Vzu|&Zv!fanxr%nADfuW<_lVMFrthuaZqCZ7j7DtTh6j8x;nYr z+uIgHIVu*K2nAYHm_h~>i5cZKH254sF)L_d)FQz_j3MGh?KNFS-U6OwU#gv^Ha)wh zKXgvQvVezo)^pCkBF@yp(6G_ReYGc^yPI{fJ(**{h(Hr8q#|#}1zz=(GMUcVVUhj| zk4d42)6iEhTf$c9RDlZjtx*rH1-3=3@&$GYExe3+3|0S%51`e@RGzVNa~H09Heb%j zDh48~GgMNgPK@+>N^X_38#KbJLJyS)X>oA?@JVJ4)hx@ z?ZWDgT!XoRpa@8?EtJ9{{rN4fBohfCXOJjc0s^#DsKqPcfhhm-kTV%i&c0M-pABuZM*ix$;5y#ha7WTS{FYt~7|`GS9IPLTmAi zhkva-iHIqBs8Ce5QNfXl>_9h_7K;Ljyn|H(G==Ss3VZ!TjL zu#kWj;WZ@?u%9Vh%kDAI%%zK8rzZf*vFw1t<8wHX2D7m33@GFY0%^|4QI%_Y zt-5J|sjl3)?LJR@D|cVg-ZIs2~iYW8GAG)mwyFX1H39|e-V5Q#ErzF z{^6?Pv7^G}(Q6#@bV@=(-bsF9z^(!}gM{tx8J{xH<6$e&9K!*GTm+L8_qNMp7gEn}gXOUY*T3 zabET~-Pb@^xiiT49IwsWU#LI8sFR+f@uq;sB+&P4+u#C;Vy%eaOd4)gt`ZQNDNdF| zV0jd!47LW#U6s9CbdTv}O?OY0)MAgvF&Mv*I8(rmvzh$Ailu2{Vp6`r-K>*~sTkTL zZrj8sJnqJxEmuxZTSzW!ly4Har%_1wOP6#_c!L?qtM9#51B^HbU zhC}<2EfWy9`$l?;#3pyg1>gU`-V~g%6p}%j%rKb9CgEI3aWYLnPvgIh}BI`9! za4ow+G&T z4lLLbPunuYj%PgQtcvu?178x?|MaG+llbp2W9iqlforI zBDObypQ9do@hoG{zu5A4PBOplTT{-E^C1bGC1Lb+u0c;J0r4afbe{7;9?53h#$7qH zzLTM$o<9UCQ%u~P&5v^!1z!i7)=&bL17IX6k)5Kf5i|rU2w+s#&D%$w2h&*cyqC^) zb9JwjZct7e^Y1BJ&77AX!{g>aV~FQN-M)0?!>2r7d2^SOG_ypq1ODD^_n3@sVE&%{)Q=roT=De`F)bq_9u;(B zEm-g*|C{3g9DYe{_Owk{z}3J%6rew1I(ZT8Lw&7voo?*zW*vSYYqGY!bwZ0 z`uzuUeP6x;hN|eYl{iZg#T2&A;>_fJ5WVNP{WNOIP4fvmi#KHkh0h#!P(@?=K6Mah zs+8(xdZ+(}t#zOpTW#aZj z5>qs()Ng4q-_va}kPd{RjyJwoGPcuz{pA}RTcw7SXP>k;!#g!pW94kps& zzvc)IV@}NP+*xcz*S&+~U!L5*c^2o$BTx&0!yxJqS=vV=C@Hm{z;tHI)>!EPA2;{s z`+!2pUZX?Bd(S`Ym8y4X-ixcXRWb!H&`}Mr6a-iX^K?Y93=CZx<@v36zQz5oB1wA` zdAE`4Bby%{mTsPDzCy6?kn2T3LbWoCg-xj$;~oGC7Ki0qNUjhTa$x)QI)8FWy}k4KBR!MmJA}_8H7sT5k8TFUj1WCb zT0$iMAGHrNiOnWIz8rEpWPoV~`Cf2xtY3{y&j}Gtkm1{DZ@R5=H+z8FX5&(qJ;bMM zRSvd`j~j@WDwDe?ly`9@|FjH*KVSE;-Zt^s3*}LYP=AtypOR3p)F$vLMS26Q#vi_a zwn%B%Dya|qs0@wkI2w>sv%}WKnfjK55o>M6B_|s)zAwdS+`EEF;IBTa9tinI{m^`s zsLFfJZ(0?IuDzO#e*daTXU{K>mLXiS}eWqkkoIO*=)_$02Lc&X~LdFjIkg($b zI9qsY*eSWtO&2?mMdxfUC4(6YA>rVvaO^`R@MA zg-J?I*vtc&txeeL%TG>C==U$t5g}4DZbK@j-@kwNHZwifu9mZ+iKZZugAWk2NWXbL zWk__Z<0Uj&b6kJt2~mu1sV##tAaris_cew~CCXi0^8)D8QA9JzAuzIwu>grC=ZbjG z4T_Z(bzSX?&+te7`;pqhLawo+)=FC5a)g^&_dx5&6z4SuB=o~=6S*eNvn-8K)|X~K zEnmloIZU3@^5{{_=V=ByZ;uOJv0%>$=<%fGW|>zs}Z26!B7|^g_$YI>iQwnh5Wv<}L>H zjSEoa&`_UbA^Zf%t0D}eek_WOr$VvGpjZFcv0NLjwgxUS7xA3Ih2E)lNqFsNAUc^m zErXBJ4At=7aKHH}GCepQ@yff~oKE-p^1*KZ|( z22oHLRYOY&h0%H$8qD1qfn|gln$51-Vqm7}o<>Q)@UM^ulu3R^&7F_#TrY9zZ7qlU z$AP45O_6t2QX{-1U+POrx}&eoN~x;X{*$ko2(XWJ)gdEpDG zK5g8PI8$t5DW(7p?v1rY)|D|&@LX2}$Stg2ED<%ncnc>g=!RFgE)W8C@VEB?ro035 z^{8C+4cGD6C`v!g-QUAFZY|*-B0xPN2Gk?`Peus7#+hcG>MEgkQVJ}dM!H(iYi$nK zd+xb|+f#~Iv{(&|jiUi1imn3ip%g^IzI~fwE5v1OrB2hef)A)r&vuJqJ+LBTk9_Av zz9_HaTe1$tS!*ETtFa&@l46uY7$qHUEg#>ikb>;XfpLMigXH{^rBnoEg;(BFKQb22 z%b%Lf>bR5Sm19qW_YXQ*KCdDXVUc2F8~}~ZWwz_G=(BSGvy~?W*)BOXFIf(+y%9#3 zC7kDpaK(o+ez-hXIb+;J@PdFD#PwiS>qpcb!A0O)(^sGVtd#12z}m2`wBQP2e+2m& z6~aI;pM)*cEsgZSVk>TsR+(7@zU?Zc=h`S=>WHwYZf1ej99EB+*c%!drKrw0z1>=l zmQ{NY^tz`MEsf-gLG~QyW?j!Sk`$g2tUJPIWt9mVsuf%EuaQisCWk4pNo-WhIdXy# zy_UPRPM_NzeT6V{v@I4W^EMKs^2#2K@?_sAzsV>~sEE(FQ7@WlqaJ&0d{5{yZw93Z z@+vpg%fjLOCm+askw?jMcTCaoCs&4oR}o8a0s69NeVi{XWVlpl?EJRjze6DsI6o(+ zlBDxIYMBK7=MpP)gnV63jTvn9UQ7A43myxVueAlVsNZp>!nKoFP#(57F*nZ?S*ghn zx-FPDypiU+Yo2>a)xU2)`z9nM7fre^(zGtcSM(K&I^k@6+BP8l>^GR|z~1O8Oz}Y6 z&fwqn1J2I_S z)8VC;;aXMmi`0sWipX>&^osjYz8-D^0vW&FOy2;QcbReERWD&HFWEHHUjke_JolT= zXo(g+Q^M~DMyoE=c1AhGMkREm9n8J3d#9duX!tcYc2U9X$x6YVsQsuV;_76~a(XR? z(fU6X0<;TClSFJaNbH5L)oI}mmw?)`Z&wg^I{3&K9U7C3R|bx=!G;4!Jw%twA5#AH z`f-!-h~?$vS8D$moPmb)$z~tN&o$mOpZP@Vw2kevOQosVZgWrxf1#ox1HNYwP3Tgb zDe-$)#XK6zMk3F?srCn`0)KC$7AwCU)$Fl0Ga_$4&;@4+Nz3-p{T^$LTF;|#*2GKa z<*t~wJ^Zl0*PyL?Lw#VH2>t<&r8SU7_H4PGjOacWUeP7;07VXF;#+Uh*>MY-nnG`h z{8EHQ_hF*W^h0&JFi54nj+fobcR>1Cbh>w68O^jdAIySkPzCc0)kC>zSmI1jJMTlH z_>Z|pO?+OEC7k~^sMZkbFG4EcQHEY4ilWPUTEJSaw%(==ehp)D2H4> z3He(=5y#+Oe&5%K1`Wlm=MDLT;lIJA&idp%qXg)=aBKHy=<9Fz>@}WsWv9DpxKA(6 z+bG9N8T%dl-U9QcMo^z$=@0jxM_g29U3v4#>$MII3l#Tf1R@J`;1rZaCXG_~9oV6W zOkJPlH>@sDZg!j$d@9;6k9~?HR}#kHIMhAc6O~h)@;&?@sO48iYe(ROzJ|i%s^!e) zpaSW15&N2lSSwQ?Oc79D#6I5?URG^&ByUL@lEplaWu5}vr*^OfEPlr%WkOIrx`?A# zk?9q)8=dh+!QN@ctni;bVcgMW!rXqr(!2yV=LbLxo>?dFJmr%X4FiKD9%Ue_O0$;2 zj!vKFTgK#vd&45jzy--B9SHgG^&-H~t50%PR@PS#s?6W`6cjAnY`y;e*L$m-<`8>d1uZ;S{WzNo-Zaxw{<{VoAfYc2 zqkU^T;ZPJLTmtpms=f(r^j6hZeH73kZp z1Qe*hL^rOb`G&!m^V;yS*`Q7#{U3*%o}O+8J?P^Hc|^@G&eDmA%FNPpEx?H#o(4>( zDlg;GOW#t0H0UP!HQWpge+(01gID3EXk^( zvk*8J5#0D|s9^+)mwYU2C`%!{;5oCmrQA8GxMEm3IBLG(D>opj<{e1CbaMOp`fh`E zT=aKLPq1moEx>(;B^Z=s;m&-hFf{)WR@(?-3|3#o`+z@E1LWD2N*F3sA7%{<+Le4c zG;GPn5SM%GOn$oQ1u`;ET&E@Y`+u5&d+jD1VMWNhSw6bq!Zw+3a>ZzFZ#8!^6Ys&4=7d2|9CqQt8HNLf&);>$t9+d1?EH-aWkrEOw`-&dJ(~e*^`7onD4tPjeH?r z2_uoyK~7WH=^4onocZ8W0){4%mL$gxgV7o5UJQ2m zvzj6no1(>39Gh~2t46xW<_aw4?X?1bZlf%5QpQ0A+=Grd)dx%y^nW3fhd?kdemXSH0zyr;4wA;GI6hXVp>6M z!~y~RTdM|C2sD`=aq`oGyS21#vjFEtW@P_`YgYEXxuRn5>iTjIl+|x)sa#o>Ms7G? zoz2xsf+>Rfv;$*Ee`5W6Eb1#beji9+Rt<$cHiOciIJ{RcAwK>)1`M5gYh_Xq!86UD z$CE$*c&$PjV2lFq7?=l*iD}5YAToh?(8L~DI6qjjw3!1%l@KXG&gQInQwa?OB#D}h z>-bIC3`!^KN+-mWAOndx=yb@(&3NNTI>V$2NU1Nit3^ma6rVY+;%0z#XdndA!k%EH z;RmKUm~iIOM_yhgbuRsz1$A7PaVL}5_w|P1Grn{fY*c9VW#LSO1FFB^GGn7 zF-c29BbvD@p5rdW$arSKzM^aOgC+hIGAkoJ>{R^T;uq8eo;oRDK;;>p$*aLAdIkUsHn(~(n*pki zMXJ08RT7WDC`UvY^SMPoLhPKwHL5R^=)YUmS^7W)xcOhB*Rs*bcefM1HL(JIx(n=A z?Otj(J>=Oj)&UHKfffNWxn%1Z4gvITk$%MGP29NBydA&7)7sK8_FFkkywufULbFIN zMgvsLPYWY2D!0gyzahQFbyGh z0v4FPXHULaFFb!zzYqFp#nSF_q=@t}wBBnnL3^JbWvQv^t~^w(HmGo?Fz*Csi@FIoKKoWJq5fp-AX0jFJS{2d z1^d;oT-RPRR@N1Kxa9s%^8R<uCBZQ(H%9ShIq3KLisf|t81Lo zK$K1(@}w6GZ&gGx%e?qQME9}jEQc!6`)3|LKV3IL%&&W(6yr-$*tK|tP>H8}D5jkO zd@QtUzH&hJp6JsxEhdn-0np_erE);nNYAe?XeU+x&08~F(dd1&y1IusAcW(fQl&j} zcugA4L82E_X|%qT;d`c^*r2Lw^zOGf7!4H7#TblS>tK-1r{19jrv&G?8Lp8Bk%lff zU;$G|#!`kg)Vv&A7=$rB9K7>RQ#DqjXD?gn^AC8@6+~0|D>xqVsLm%%k2p9mz_11) zS1tXI^2Mti=&~)6nH6}wGcXk?mFEcmQ8@5tUC#esmIAMCiP6L^7{Bk$C8o+RsTu8N zcu=j@IwbcmBBwl4xghdL!+qnqdMTL7WCFd~*PjvN>&^IZZazL$G+3&;N}9oJdhMUq zxH+eu#zCo*oheW4QjmS<)!!Ln;I-E05t1o;~pCpY29J^r6Y` z-@kuy;l1;LQV6HnBnN^*L-{uDjMb>#-|6Coq1_EHHz!f=)RL|1+;oHw&L*xrEoKOO zDry)^V}`xl2tN&GNyEr*uGUK9#ZMOWazesPHdK7DL;garf2b>0&d zRzbzoS&4>EJaY+vuNgRAd($Gv6I${Ju|h$ZKF(@tLgbLF*@9pW;L>Thqce@?lcdk8U<4?iKGtW`^E9choRa!^me^*F}=o zWt*#iQI?X#2Ofb_YM=4ufiHIdgPfbpyG2}ds@$3;V#S?7+;N%>#8M-fEjrLZ_$@mm z@E3zXGBdE9^9}3cbxe}Nx~s&#EDI}Nor2GRIq%AxO&@*jTq=Kw7M99c6#QWQAya+f zWT{<dy4{bFh#iM=(5!HE*8ZQCAN@euP19{RG^oEq9&1wf}|FliI zk+t@Y%+8aV6Pjh}^+unQ$s67g_4jWV1aZv59QE7@G!kZ>M>0}IUJj@XmeqUaSlp8a z`@~PzwPKKVA#v4}d6Axi`3Gxwlu3)ed^>FVU>z1&8Oo{L z!ia;iHKZjV+`qg5!Jb_F{2X#u_uG~nVwdWiOimB_3ktX@T)=cqv+YXCiR11rxDPSp`Gnljnj)1oc+to*qk9p5|ckzyKJIz#fIkeX&Q=iYyRa<@+jMcDTxzfop=}I%f^Hi-oX>LQ`0$nXR&~2y`dt@sf6R&{~(sG0p zKkKun;F;g%6g6sJIyvY_L$QS#|%0X@ukTSSe-wU~Ud3isfhHvBXPz$hpULB?Z zm>S@<^BtgowvAr>TZw(QQgff@?XBadi@`DHPhb=lDBN%>CjzJ!;T%5%C#@m8CBO}+ z^UUlM<$vxrl1)Qi4F7%!-nCDErX8Ak zSei?4$UKs0__8_y2A7-xHCBCt)R3Fxzcm#>F9!|)9>bzxWhZ&NelQ=>Sp#R%jA&%9 zaN!R%x`TR<77zXl4oQzfk#%|?`PLFp1?0N>`^iYlfcX?Vp>Z(W zTQNb?ktyBX-BuZqZ|D6#Wq}gZTNfOp@F*%Nm7clQX=*xC{(5zy8dy@Ka7}CPTN}Tu zlKOI&{Tsd3H#S-UTeDUJKFMcSdr`0Gu2&8wRrcmC?jhD)AP%^U3>#cklr^_vB4$20 zg8=^L6?`~jOb2QK#QslUEo}(_Q`n@WS-M|0fQ>UT+9ArlhFP!yz!P{G4+rc13<5k& zV4A#h9oUm_|G}%h}SJQVX+D0o0c08%jn2H6}XtW3E`i_#u5>fUB?c|c@kUDod2fX&CjkhmNo`~2lbqoJ4CHV3NwO5}ez(cvm#+43T8bbyL$K|O zDb@~M9u9km$kUKe++QYm2}rST^h6Y1sySRsJ_D-;zV2;6Nxx>jjZoekzwc{|$9Cxz z?sy)DPBz#&!8SuS!uk?xm7bj!3n@RgHqpP!%>*yxMc)a|aj?>18) z3&+L}=E5Pt2e$fmX`p%z{WWA9p_jd5 z!GRZK)iWYt`Ky360MEzE#|*DH2d^St!;-Gwd!XRqG8R1T0KIqIRJ;e>o1dSLpV&V| z+PvH+H1UfG53nm5wK|7Jk=BpXC`Gl9+DnAylC;hCWWnA$_>vKo+yE{3a-4P)L2_4l z<`5fws;(WoEh|)`i}ry@v$j;4Fbh9o!*_UL!W*Bna3`}f7Zw)UHiLOR4o#wk^{LKB zKd4E1h$tI^%kSXI0b)HSO<@a8IA5|Ap7rOWffeIbi`M;%%CpU!$3l;1?xeDYb%Roay!)+qGuaiq{h{ zDk&~yWU9M4k-hY!mimhIo-YW9iUStwxrqFm0ZP)z<=r>=;8Li&k|I5YNK*`)WU@h339bn9;n@{&R6Za_W~Ya*;+= z+H3MgZhiZVDEz@bx_irPGng0VB%ikUj>q+0sb_C$%Jj7?D|x(^UeCUeuzHc`{EJl|C~XIPg3{XLkYkVuA`I#A|eY1Q3DV|dD=<9Uk_N>Fm7bZ zd27#_?;-qo+F}`yH^P-4?yduksFD9rdEPhS(c$xZ{iU{*PW$N!4#RsGyQ)7JMqk{Y zeyk@QpUN4cnVG{NF(%`vYs1>sBv?+o8{yTTslvF3VZ1W?X#3BahKHcWIaq+$DQ?Z;xiov7{C|HP7*&Gp4X+$ld~OahE{zq;aD zQWG?5y@v>t*9%Z?fJE)^{!E`imcw_jT7;4F^P~2!IyLEoM@|$m(0K}c^HKm*qL}D9 zF!I%cvBORFEI4C5c})6DnjqJgm@Rr!RdI4IMc}8)aOOn0aTAL!dhAoDmk3bG9koDm zgN_P7UpoW*{aM6Z5HUj~*wPN*nOOV|T&n}vEOTRJ@^KXpHq8V?-E~(Hw=M$Mp z4^fn|V9y&hpd{navsOk!2}n`{lz?7No1LAl(WUPUI0KIV^YFa?jraLKLTD2!cixPR z1PWd|zM-mYu2e_MEWB}TWKg+(V0;rnZFG`vExZwK{_$R6EjzyQXMcBh@#@E-fi-Z9 z>^LY{STfj)Y8!BfIlt}MIp({Z&MVX5WAvlf9cuE(W2qBEj@zSz`6H3SqHwI@w4A8> zPzHTLA}w||HQ0^eetqn#8N-%>u7O(7eG0u84XIBKJKi?)oMN#dIHy1)|1N?}0hqH6 z%DBRX6?pJc(s~9w!e)D-)YTb-H}-IY!Df^=KbtZPUwxIHCKpZ8@)-|8x)F~Uj#h2W z(^^ZWV+C#-jAe%_^gzGd|>)&n7OBVjYvhf1ChMRWIKMUF+H>)UB%n;dRDFT z3hqfXIj(YmML^<(BKhX0(R%)0h=7OMAA~&WgZHZD@_$@0YWV#v*DTL)L}n|JhP#i#97lHb=8lC6`$<>8u%c)cHzims;p>A1J3)&JH_X1~ z>mwCmY0S;o8TObF9zp9rd5)f7kr)mo39)Zg3M<>rFl|pUDAcjFkBUgbl}z@Ie|NA|Abn~C^GH~L?(g9Nl*eLEr$UFV_os9zcxWAT;wv%hPG!(AGrA? zrFUeEh?(Ys+N5CBjDzNr@AE|}W~y&N8Pk`B4rH9qDV_wd#T{an6s5@{UvX^&1f})$ z>{#Y0R!G?p9F5O=YVaec@UalyjZ=Z(V2E6JhEOG4-@jl8p(#&COVAu(F|CWOY3NZ6 z#SGCO^q}0I)}PXpkEYx$iGC@{{E1%UR99`f4O=T}KT;v?hEhmC^+mlr1F|K;N;`1x z7!+`mBCsCCL}r~@YR~hFOjcn=C_96?kQ_^3{G^Yr;-IXsC|sKlEcTw-IedSs(uY0s z#r{dYD57g^uSKoZUxX=p@DIEo0WBnHdU9yDDqu)Yyq9Y|BAXnA!>=$TGWglURBLoC zrX3V3N`7N&fvh$d8!Ieu#m#s!CV!`RPSmg@GUoh7H7ayx;7*=ev>*!EW!hG@0&B5d zyb*DZ>ghOjjz{=4Mux+3vFv*2>!_E1+k51l>D1>Xn4q*VGV%~wwhwPl4USrUv9Oqu z@+CD1A3P~961&>Ihbbw`4;x=Ynwg-Q_<|6TP~b^D?6%0b>dSF3nj5u-EB!cOfo!;^ zjvGDlrRU+2;z(`fie^Z$UCp&~wUi~4l$k@rm1I#=L(PaN%1vu;m+?1}+st_;dfW>q zAhZeGwhT%|_HEg4hj8cQXx~hM`X+73@Y2p8ZT)^PnnE);jZ3k1Tb;KXe1dmiS@ z_oNGTFC87f^%}%}kq^$^HnVXl){`RWMEXTlL49EKK(EG?N##5;4K8VOn z*LN%m(Y2DKP~v0A#tC*u*Tz4$4!em+1V0jGsAfR>WsQMELY(WJ&n#Jz@bP9tPZLxG z{4@gW>*HR{1a;aF9VC}#RChcrISjGx71gISY!e96QfRhxX2^21D{s}BE}>ZjPr(;Z z>>CJL9OD+kSKB%DXt#!bvvle=V;D}(K|#6Y^#&}%+9^G$=mTUv^U&SBzIKiATdL`c zSE7&p{%XrCoYncSCb`3^*zfkl;Zb=x$B%*SrA>udAi2~;WcNpvIh4JV+3`GbVI zEPaK8aM%j(!Tao(qfojU?wMe_4b7aS|8hN4>PvLuft1KL^IMr^<~F>!D5=$z5bnWr zho~SvV-B9K@}V$XLCjE*L{CuoEOrqUS0M>HKL}ZXp=c(mB$8A8e4;QOT;h`ceOaT! zn3k{FudpW{0STp$snG?)a(%a`|8!=nAMUQF|NjVP{oitRu{LMr)c?<9*8h&wT`sE~ zY@ueS#m!a~P_t88{?l#tx(w2CJp(-dQM0YD-?)0)^_;2oKWcikY2>BoJJFA$oxs)p fKi%-_o<2Uf|A$sT-c2-lWE)rWPunXe$Hwwsm%3b0 literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-complex-jetty-client.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-complex-jetty-client.expected.txt new file mode 100644 index 00000000000..df6340cc7da --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-complex-jetty-client.expected.txt @@ -0,0 +1,15 @@ +Request-Header|Accept-Encoding|gzip +Request-Header|Connection|close +Request-Header|Content-Type|multipart/form-data; boundary=JettyHttpClientBoundary1275gffetpxz8o0q +Request-Header|Host|localhost:9090 +Request-Header|Transfer-Encoding|chunked +Request-Header|User-Agent|Jetty/9.4.9.v20180320 +Request-Header|X-BrowserId|jetty-client +Parts-Count|6 +Part-ContainsContents|pi|3.14159265358979323846264338327950288419716939937510 +Part-ContainsContents|company|bob & frank's shoe repair +Part-ContainsContents|power|ꬵо𝗋ⲥ𝖾 +Part-ContainsContents|japanese|オープンソース +Part-ContainsContents|hello|日食桟橋 +Part-Filename|upload_file|filename +Part-Sha1sum|upload_file|e75b73644afe9b234d70da9ff225229de68cdff8 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-complex-jetty-client.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-complex-jetty-client.raw new file mode 100644 index 0000000000000000000000000000000000000000..04514a19dcb58314dfd2cf4cc75fdeb84be013dd GIT binary patch literal 22754 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 literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-duplicate-names-apache-httpcomp.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-duplicate-names-apache-httpcomp.expected.txt new file mode 100644 index 00000000000..796af8952ce --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-duplicate-names-apache-httpcomp.expected.txt @@ -0,0 +1,8 @@ +Request-Header|Accept-Encoding|gzip,deflate +Request-Header|Connection|keep-alive +Request-Header|Content-Length|1815 +Request-Header|Content-Type|multipart/form-data; boundary=QW3F8Fg64P2J2dpfEKGKlX0Q9QF2a8SK_7YH +Request-Header|Host|localhost:9090 +Request-Header|User-Agent|Apache-HttpClient/4.5.5 (Java/1.8.0_162) +Request-Header|X-BrowserId|apache-httpcomp +Parts-Count|10 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-duplicate-names-apache-httpcomp.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-duplicate-names-apache-httpcomp.raw new file mode 100644 index 0000000000000000000000000000000000000000..e48b5a6285618d7faf96ec090bab649c2901dff3 GIT binary patch literal 1815 zcmdUvy-ve06hQk8u;S5<*BZukI}yb!~VmYvVl*-DE(G@>y*opV_ZVEV|bTA1PWj3M%6vEpSt z7Zn_rq)isR68 zZ43R2P{+@C^n{!BA0TqAbD8p8<$EeM!l2qzf*0TW>_x2#{qlP9{Kw15dr5C`xbiFdFfF}lH=0Xq>xOKVk~(+6;ht6Bovf@>8v-jG*nq7I!i&@yEI z>-5uoQTk#K$7jS)x7Ij(@Sm>H{mA&y965RbXe9d*aa4PU=Ky`QL-2z|>)npL`@W-% zM!hFacc$6|yZMbC#$a{?%?Y=m)za_o=e6N+%e8_nH4$YLY5LT5WL6= z4j>>aWu9h2a3)JuNRSfBoTYI@*P&hkWJb^zU?(#?d#JZsUjm literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-encoding-mess-apache-httpcomp.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-encoding-mess-apache-httpcomp.expected.txt new file mode 100644 index 00000000000..5769e300b10 --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-encoding-mess-apache-httpcomp.expected.txt @@ -0,0 +1,11 @@ +Request-Header|Accept-Encoding|gzip,deflate +Request-Header|Connection|keep-alive +Request-Header|Content-Length|31148 +Request-Header|Content-Type|multipart/form-data; boundary=qqr2YBBR31U4xVib4vaVuIsrwNY1iw +Request-Header|Host|localhost:9090 +Request-Header|User-Agent|Apache-HttpClient/4.5.5 (Java/1.8.0_162) +Request-Header|X-BrowserId|apache-httpcomp +Parts-Count|169 +Part-ContainsContents|count|168 +Part-ContainsContents|persian-UTF-8|برج بابل +Part-ContainsContents|persian-CESU-8|برج بابل diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-encoding-mess-apache-httpcomp.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-encoding-mess-apache-httpcomp.raw new file mode 100644 index 0000000000000000000000000000000000000000..17948f0419e32a0b2ce119e390e655780751a220 GIT binary patch literal 31148 zcmd6w&2HO95XW`$!GND27d0r56v(3DhbS^ZV285n$c|&fvQp<1(6$mYkwt})Yvoup z=&Lk`Uh)*pp_ks=V}U-0-QlOG1Ze+Tc(hxC5mfvK`0a2wJ3Hi3LcDz&o6miJ-!gjk z^jUah{}4Po?~LP%r_YV>Vr97<4JZBKM68G7Q8W%GVKls7e;LJR;v|>^59-67+A&Q?QXjZ6K8V8-0h8SPq+|sCWUw}KU{vi{IyOW zzg&L!^Zm`cd!yGDTYC_8CWWy1!Xts$-iLX&_Z9PQ`i9%E8W3=r+?vi zaGP4h13X{2O%3vc>)`S0=n%gS+{JVqxQEFYzYc!AIXYZ#4!nMI9eDl5>0h{ha2>dQ z;N->gnWIBKbKsVV>%bioPXEH|W7mP#$DF)y*Uxp}o*yG`3!g7q@O-hxR{y#!e7wg1&O$=|KJe!cvXeq~sU&fo+%XICvW z9uWAPOL=ybKkSl_xNg%E;I&)Ip_4$lhATgoAYc(S(`!QxmM0~-@*1Te!LQjgw3OG{ z1-E3VD6hE-Zm{ky<+?<;WPocE-(VeH_#3OmKmGB0{nKxs{^prZ(+dskhZNk(dm;r0 zScjEzUE&*DPZZp$*A!cw?u)~Q*}$gyQmxqAIfr2i!vpVV&6_~{x7X+YZvHCW-tD+z zAA0U2lS15l6;=w-!+Cp(dAq0K%gGBm^$>EYR!n`+=?VwDk(g^06Zg8}QMcXcKyEI? zs+kYI69zV`_fjdudv(2Zcga|~SF6+K9Xi%;K5Jw+{s!jll-=Ke=oiKQM27td#-6%; zsb0(7zQp5q3tQ(Tr^v$AIJMf+T{;Xp?$v6wdj9=R{>cQ-vLyqWIY@<26((7wDu{?Dc87*+1J6Pxtu1_RJSn zdW@nQ4T3lvL#H4gLT;j*zkhx#UXR2e9G*`>{;G*`{$!v1!S^6}CRWZ&4&2%kyQBUP zp^W|B|%PY!u0^t!w)%!E#+$)yDh^vBjwcKu7*;LMhLI3 zJ*)sIs8!GY8HWMB@1j&|;cLUh7Iitb39sl_Bg8PVbIF zO{#^+IWy!=aQr9^j>2P*y3|ADd>iqmf=Jr*BOh@v*f@`)Q6C?`oEbC@<}=WaqhLZm zMIteT+(HZbcX2ov$V5;(x6pxpoqoCHD45``&kb~7-;DeHH#m7J*Ma+S|0wQX;NY2F z2lCEwe-I2$aP-_j2loBwOeV#oa&5T70QY%H9tJwFci){IMFSi?)9XME|LRIQ6DMjd zsL$g!;rJAH_(5i%1AFgHOg}d!QOD#4>e;)VWxi;b2HIKNDGhXBZ#E=;QH`R#>lGF{ z(Tl@9H0oyqAS2~tI2+Uc0O48ajqp;hoP4j1{fyRBkWx8qH+fZq#6?=_m6K;1v!84T ze|HCr@u~^Le|^Qj(fLqh`&0&vEYw(F~Gqwr!k5Kl$1 zgQ-cc1;pMI`I!wgy7FCsi+C~MJRsUCtU3aF;6%}&@Q0L&A&~`imNKMa=SMUf8L`qw-}mOtd*e65*j|`rx4T(3Z1$rt z&b(wCp9SeHzv`Wz^{pR!MO_CUGYJfNe#iVKR!cD2ZR2=SezXXF(RcG2>tm zzFirH=_m?f=0z8^mFNG|z8!|I%`BW`-wyjh6j#cX^2Wx7DaS^o%yd$)-F?657thk% z_B+f0IPO2+f4TqFlwZHxfBy56MrpP?O}2Lg;2@YN=h#0ko@2-3j%8Z_$dCM!C5J0V z)to*2lt0K{{_JS9){ZA^E&w+C`=n9O>8onRLPJiWC=*tsgu#9L54&jvLRW=rJ;#U!#3O!G~AV2 zRT_$j294+{8dUV4F?WSSBPS6KjWtg=G*&#}60wU*W4=@cq(^srvDy8u`$c1!C$spf zpy8)gm6guaUtiTM$SycFO{1YOZxQrxY6^Owa46JOC>&Jmq7cV0^r#c@kGjGR0E!+& z{Isr+pQ7lYu)d&h5Sh1ig+dBN4~2Xkg+rmz#^7iu#Ia5N`G?a`h+_yGE?4jm?Hv9g z6P6J0o1<4>dtZH%e_pM5=F`LUQD^@A%*UXx{{&SGA%%BdEh(4d)Lf?E;@YSD6AOiP z@(G5*BDH{lJX!`rG%Hau5`~0jVIxZZ0wp$gfBbIV{dV`a=72nnFcgZTg^d&zQnYzQ zAlce$`6pdVSOgY+HHZ9p4zq7M+! zRHBk;%q1#m*2soZJi{oh$-(7VHw?p^Kd;Web=%Mupbh6F#Stpl)G&C-FxKUe0!rH& z#;P3o_m&)*Z46}}crBneQGAx%j2IUb-YG265XeN9XrMWXu(mAG5GcHsXb6;EOEd(E zuO%921)i5*e`$<2OEd%uuq7HO2qMlYn_mHG2?ESydSGI9R6*{rQmDn|NPf}}(r83M zqHx?}S3}m1;_-w6PkwZv{XGQ|sm$IHI~;~F1sd7K!YvC5e<-tRiXs%&g-wa0^CZ%Q zO;M_JRH4v!HCM$YupG=#xXK|L9ADu=A@RgQQOG*6Pza=)b6-*E9Kcbs<#D-g4>!Hf!_w37`^1>N4K49yP*U>jAJW!49b*tY-mP5 z{Od=z$2c`Axr@_)w86?P9hIhF6n}9Am9XoQi7PI6oEvLZbiufSM*{ zM>oPe&YLt`8rhQUNSn4(H$SrGN1sHzT|(ONC=f-XWZtAq!e+ARN%qP?!FSgC{`{}j z;%qOu3{EMS>LBR7OM}y>2f!dSo=%vAY0CS`(xAURPLp8>Frh@joGDF$Ox}=21?M)6 z`hC!1Sn6y=@x^J75fNu64Z~|9EW6=p8r~3rY4yT>5T6mDIZg&-=F^lV3WzA<-wsZb zJ`otTE8FxZfHDZT$LV!6x+Ee@=Q@>FV$xWkeAgBymf$2x?gQVgSyb-tlo`b{4(lFK zaGt?P_Ea&~Cb2Vr)Ff~>r_2?r}=-Cly7>MK{^Vvw|PvIw>VeIy#9YKb7rhk{s)0I(E9)Y literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-alt-chrome.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-alt-chrome.expected.txt new file mode 100644 index 00000000000..7b689768bb9 --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-alt-chrome.expected.txt @@ -0,0 +1,21 @@ +Request-Header|Accept|text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 +Request-Header|Accept-Encoding|gzip, deflate, br +Request-Header|Accept-Language|en-US,en;q=0.9 +Request-Header|Cache-Control|max-age=0 +Request-Header|Connection|keep-alive +Request-Header|Content-Length|22759 +Request-Header|Content-Type|multipart/form-data; boundary=----WebKitFormBoundaryafpkbdzB5Ciqre2z +Request-Header|Cookie|visited=yes +Request-Header|DNT|1 +Request-Header|Host|localhost:9090 +Request-Header|Origin|http://localhost:9090 +Request-Header|Referer|http://localhost:9090/form-fileupload-multi.html +Request-Header|Upgrade-Insecure-Requests|1 +Request-Header|User-Agent|Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36 +Parts-Count|4 +Part-ContainsContents|description|the larger icon +Part-ContainsContents|alternate|text.raw +Part-Filename|file|jetty-avatar-256.png +Part-Sha1sum|file|e75b73644afe9b234d70da9ff225229de68cdff8 +Part-Filename|file-alt|text.raw +Part-Sha1sum|file-alt|5fb031816a27d80cc88c390819addab0ec3c189b diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-alt-chrome.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-alt-chrome.raw new file mode 100644 index 0000000000000000000000000000000000000000..cb7809cf0d41fd3d69aefe7a7ba0962d080f6e6e GIT binary patch literal 22759 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�^R73OX67wz+p-s%}PSx19s*u$|V`^<;{Q+-FA4 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 Nuc!H+Sr_mB`(KlU60`sS literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-alt-edge.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-alt-edge.expected.txt new file mode 100644 index 00000000000..9c3e2549453 --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-alt-edge.expected.txt @@ -0,0 +1,17 @@ +Request-Header|Accept|text/html, application/xhtml+xml, image/jxr, */* +Request-Header|Accept-Encoding|gzip, deflate +Request-Header|Accept-Language|en-US +Request-Header|Cache-Control|no-cache +Request-Header|Connection|keep-alive +Request-Header|Content-Length|22824 +Request-Header|Content-Type|multipart/form-data; boundary=---------------------------7e21c038151054 +Request-Header|Host|localhost:9090 +Request-Header|Referer|http://localhost:9090/form-fileupload-multi.html +Request-Header|User-Agent|Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299 +Parts-Count|4 +Part-ContainsContents|description|the larger icon +Part-ContainsContents|alternate|text.raw +Part-Filename|file|C:\Users\joakim\Pictures\jetty-avatar-256.png +Part-Sha1sum|file|e75b73644afe9b234d70da9ff225229de68cdff8 +Part-Filename|file-alt|C:\Users\joakim\Pictures\text.raw +Part-Sha1sum|file-alt|5fb031816a27d80cc88c390819addab0ec3c189b diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-alt-edge.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-alt-edge.raw new file mode 100644 index 0000000000000000000000000000000000000000..13fa9572fdd5fcf90366a32ceb8267048897f765 GIT binary patch literal 22824 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 literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-alt-firefox.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-alt-firefox.expected.txt new file mode 100644 index 00000000000..f918d12a4f6 --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-alt-firefox.expected.txt @@ -0,0 +1,17 @@ +Request-Header|Accept|text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 +Request-Header|Accept-Encoding|gzip, deflate +Request-Header|Accept-Language|en-US,en;q=0.5 +Request-Header|Connection|keep-alive +Request-Header|Content-Length|22774 +Request-Header|Content-Type|multipart/form-data; boundary=---------------------------23281168279961 +Request-Header|Host|localhost:9090 +Request-Header|Referer|http://localhost:9090/form-fileupload-multi.html +Request-Header|Upgrade-Insecure-Requests|1 +Request-Header|User-Agent|Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0 +Parts-Count|4 +Part-ContainsContents|description|the larger icon +Part-ContainsContents|alternate|text.raw +Part-Filename|file|jetty-avatar-256.png +Part-Sha1sum|file|e75b73644afe9b234d70da9ff225229de68cdff8 +Part-Filename|file-alt|text.raw +Part-Sha1sum|file-alt|5fb031816a27d80cc88c390819addab0ec3c189b diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-alt-firefox.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-alt-firefox.raw new file mode 100644 index 0000000000000000000000000000000000000000..ca094b5a9fc1eb6f660d21f82d5fe674bbc1a62b GIT binary patch literal 22774 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 Wf7VSInZKUqzcC>GpZ3H1fB!Ekh6gSH literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-alt-safari.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-alt-safari.expected.txt new file mode 100644 index 00000000000..12c657e8258 --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-alt-safari.expected.txt @@ -0,0 +1,18 @@ +Request-Header|Accept|text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 +Request-Header|Accept-Encoding|gzip, deflate +Request-Header|Accept-Language|en-us +Request-Header|Connection|keep-alive +Request-Header|Content-Length|22774 +Request-Header|Content-Type|multipart/form-data; boundary=----WebKitFormBoundaryEQhxWUv9r38x3LyB +Request-Header|Host|192.168.0.119:9090 +Request-Header|Origin|http://192.168.0.119:9090 +Request-Header|Referer|http://192.168.0.119:9090/form-fileupload-multi.html +Request-Header|Upgrade-Insecure-Requests|1 +Request-Header|User-Agent|Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0.3 Safari/604.5.6 +Parts-Count|4 +Part-ContainsContents|description|the larger icon +Part-ContainsContents|alternate|text.raw +Part-Filename|file|jetty-avatar-256.png +Part-Sha1sum|file|e75b73644afe9b234d70da9ff225229de68cdff8 +Part-Filename|file-alt|text.raw +Part-Sha1sum|file-alt|5fb031816a27d80cc88c390819addab0ec3c189b diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-alt-safari.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-alt-safari.raw new file mode 100644 index 0000000000000000000000000000000000000000..125321970b1b1f6e1dff93ffb07a91c0f3efcc63 GIT binary patch literal 22774 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≪YBlk?kPYQz^;%u_5@*uYyy5+ z2{&-&BmH{T_L;pR^w$hg<$G%~;z2BNQ>Nz;Y^gEO6hV&3vy?9XM4HBrh4 z_fYw7@jt*MC*Eus;!3~eXpGv|L9NQI)@+@&aGmdv9FL;%C(#}?c#vkj@)~SoV8LZZlnzekQ3z?DkC$UB87i@WX-`V-;HjvdXYN=9b zmUeEqNX^T$#RPK{<6$e_g!RDo*KpJ)Fn%9cU{*Dq10jRnpEA7DFd;tv3m$|{y>&Ag zD3FmVAjcwk}=&L01pw|+SdM3oRZaei#pjQMSC z6fB96M_~U&=_E!!>r6kyoGb&4|JUaDl{n*t6ZIsA1|+97-=Z0D8>afeX^A)k)S;db zSR-$OskR?Tb8rw%rw=|pO=_F}I|X#yHzUqwv2Sa4QzQv`YXiW1-UMd`3SxF0qz4UD z)`Kc~?g|`hfDK|HlVLB4DQZ{xL)TSngmw}+Ou?|UCFk$+WB&2SCHo||_X!q>Q zjQ?Y9n<5BHjAt@;^??u$PxH>}Qm+4#ZGb}~a}aMnD55CugnayewUTL5 zw4B_Oj;;xuDA)snS5^|FJ9}W|dQB6`vbYZEd7XI`8RqkMf@W#`pxC~ZZphDI zmiMg1OY@?KJlH2Vf>0Q+2++yJ>ko*?;8zQcB2F*j#ub(=q~)Hr)=sgX%b4Qj&UO>9 zQn`3-pqL*PM4nWv)7)pz7sqIQCWt^M0438MoDW$w<4~Buo21cuJ0fX zp>zNW%=UwOpKWI!-mBdKep->dyAt)E3uT^PQgZJYI57q-X4UEOW)ML92?E~w*IuqFYtQcz@4R`haGR;1fD+PH6MC*(V(Eicqs@q!khW|y%Z;hlS zB|YLj8&GQB#u5}=!QqnYKWMvOe@^}YykGa4f2~)sUG4380n(eA6m{_y8RW{#JT~V< zhk+RVK=eT;2yc}~awv90%2Ei9Dl*%4SQ$xS5pv_n@oN)C-dA;}E($Y5mA32f;lPd3- zBWzZ842WJ(h3U$AhVPM4Vx5M8>FZxIAQ~v0i#HxT*T4!uM356O;+Gh8G8MVh=J z0tHMZnLr;_SN*tewhzH^v+v4l9gSG+j_qu<58sf5XD}W4PhdQ>QEm4c?(p&9p#g1F zu4eil^^>QY@C7?GCpYwbvu8X~F3$=1t)S=6ijx1|EEQpcV$;zr5WnxtrDXV8Ts`!g z?M9VmQ@_&Rh@7%a_58>^ZTHoOS|uQr$pO6D=O0ibD_BybpooYD4wUNlVl2p}fB(}I zH|^X}-zRslIqs=fVpgw#6v1b{L}QrUMo~WjOB$lS$$;YK7BcxJv<*)GY}EVVcFlhM z`t?JA{qmy75~i+BO+toU+r&GJ>l*q zgoRNaVb2drsPax1b636(f-3e|w2lwWH1nf*6f1{w~0qD*?@#iG;!( zlYcmsP_<3k&@+D{QD|81ioC}w^MYpD0cwr^++G&Dm%j~}?0@~xN!wHtubgRH6G>Z> zZK?H9T~3x1x&x-vA>+jjU&78iB{zlFbHun*rDYw|qC1<6(*zH|QiGX|`tU&HC3`f~ zi$|e3*?5jc28>8r$EXp%D{p;VkW@cA1ZTipwiJ#g_CB@Emp#Tw%H_<7zq5UpsWp2r z-y%UfCHnOj=kMD-%vC5Q8nv7hkJ?F8RNFO1k_6JqCqwscC{s7$R^^;tF11p3PrOVw zwbk2H*t}PLz_h@)QtxvxcELNMdVAYpsC_QZsE5wLNSJ&W$xa`6+ViBZwAM4n>Y6<0 z6F*#+ivaCH6KkmparTeZ<+W1is=^TM2;(uX(lqLqLnjBP?`Sw4T?JUH-Xj?M)ud(R z&T`j%ChPA~6N$;e@~%Y*^YyXD??vd23czWJoWtJCdkYciP6>e&nPtUy(Dr};L;79>rZO+$g!Yp)2Wi0f_PYv~uHj(Vas6g9i4sdCdaalb zhO5Yj@Jwk0b+xx?jf>B&ap92vIJL$9r^dZoKiWaytbHrOd|5V`^VI$+wFYkGmdCXJ zk$hnK4#shMvrd3xrY3;o&^X|F4!akA|}E z|M)eF43aGgVJw4N$WGY@Q4wNn*{7+jV=YS<%)}i+g-BT{#+p6K-eM1TvQ|h^LW8o8 zdA{!Zcc14x=XcKUJb&E3zvenKbFS}lUEk&N{k-09FHg@-^+=bV3p>R|LG)`<6%H%Q zW=Z;@eI#0pQh$#ElBB}?V%SaGz)IfH8t&M%>=cA+q z*&h61vOPu+nSA6IS|@nimpx8MApWPNz1$igWr)wd74Y)&^S?t41(8TlGmv~<9HIl5 z8sN3F?I3`*iCy|bnPaO`bBFJx{~^U9aLoAw2!)Rnth$y{0Mv_cN*aVyml0kVPylU~ zg=4(@IR9&Idjn5T&vyVjf6DE?C^Ceo04b-cLaFiK(`V1>{OSM#vp^(UbLRfi{acp) zFuRvYYs@itNcN69TsV2IRGbtHcGmdow{G8#P*qh`)NI(}eH-$@O2IqD%ou%L0@DKr zg$Inw$-{#n%zXux7af*beeGgj($~$GO>4}Y3fsI#3&bkfPsodtUVnvm?l2x`ho|p_ z<`^!So0$3!OXFa0$r;e%HCCzhxv2r`lTnOvpa9@AEF4mCl(+2z^C5#Rcsj#~UgjBz zep916pa*I3kv{P4Lp3=c<40UhJVXLH0FY7mEfm0PQHd7*veSSebMXTbh;&iA&c|dw zaERTTd^!(vSSy6~eh<5iA?}vkq}zU5sV<`%CmxX<=WTYd7L^`nd>}gstC50t5J&2K;QHX=asK7O1C@~ z^hdKJ2vb_n!f%PCp)o`X5~O5a=B+WqouG*nW|&|G3k^K=n^q!|Ln@44BQ7rcbJvbV zZT3{1y?;U|$?@Au@M^uN+f%ao*qupaK{I9a;FJMwo)H)rxPG#EU)$xk1$_m$5}PJu z<-i0#WVlI}y;Iv##(H9Z39?n`fe6WE9Nm3(lq2lb5Ma$$Eub$jOAHe$sY;)2V_u*22F*m5hz<7RJV zlEHnR!G|(Ob)aTI?Ee7L(&jKQg-uAB-u3GOuyK}%c9=?!VK%HE@C2U5L!r7qLI6(_ zoFVU22lgbq-$lX~D*MVDYTdWDL&X_}>>ARN0KfmT`6G(4J!mWvQ4_ZEx$DKvBgg+( z14-CWot$LczAG+~7WZ%8x>c+hJYVAma3S49z^fVn$y9N!TDQ5{C-cV)7l)IS8Aay4 zAL~yIrW~O!l>2OG*8>nT+ZV5d13~u3 zZ=;nD6%l39gN6r#3zP;gjP%suwrU%kNEHtxUN0fq+Ab&?61cV1o%PHQex1S4$tMm# z**<=C_~9MqdGbB4;d^VM8ZIpx*P5%{kB~+<8f~%X8#5dOPU(XbV2@i>GEnJgEgx31*fBPo_+d^Vh(uhhmhW~ z@~t3)bMVwfM#JhGP4(Qi9a{__s3x?HosM!x1~Qd>zD|{0(C%}cICTDEH@Af-axDzk zHkW2)--);1Mno$@!U?~dkT8%^@5td8l2lWqmV72o9lYHefRcXB7KBh)8@ujfOu}{Q z6>Jg?K}YLt9ARr=s}a2^waO39h=-LQTpsV+;<1MoloLGM=Az%d$IA8FUxRi4oBn9$ zM7`>^Wv*TOUF~<$cY66kKp<8=65MpiooA@ghXS=XloiwaEO;YNe_!p5TGQ>SyY4#u zSQd^;>emq*tp1diVOZ)Fl`Fc>)t;8LIMb2*Hj|Xpy2J1~CAVvXy-EksbNJ6e<0!rR zo90|3AvQfDDo(HpNCQX$`~ocSiqr5a$|W52^0gZZc<0g3DSPO(!(zx-AR#-l6A>Xl3=#7auM~2T>$% z6(NVx;9Yg;V34eEjV`A*Oq#8^(u4(llbzJ=DH7T6kd^lq2TMUgflU*b*AqCY^oU-y z+1ML3skky<+wTbi8s=U-D3bP@T^l6tES`e0COiKMt?Z{f70FOohtmWoU)|p6jsp5D z1<9G5NzxgLklZQCIeSJb2T1})NuOQ#oPsQW`?`DiD2NM^d#74_ zHplgAuV;tCPd`6I!u37!{CJ)>5}y+hSS-=1+3_)!ITd~m152wFDkGlSm|?%v#8&Zq zJWe&uxwMStZbsoKIjW_xXtnJF45AW%#Cj$w-}lHf(`~E4uNDHuyl`kv>+X!K^#|x< z-Pd(3DmO`npS+^gHfDp>0)gx(QwpnAbqGkFMeg+0zRw8HeVsh5dA9Ax+)ni5PaEVM zou<6q=!IPW{2o#8onvIn-*hdMALb~ZG53nk~^x&%Sikr8aI7N1LTnjz=FR1{}x+0o*G} zSN7B6WCe$s%au_eb52YKLJjpHic0|<*Jool8u$5dZ6Ed>Ys!6|59Sh%`C+3NFxvg< zifXBi&?l>HM6kSGph`U?W=jfSeh<7HzJb*uqAWi@X6K?~BNj9{Mbtp&9?;E80Z?hd zMAv?wKrI+Myk&&P`c@MMrS&s}cs|6fGa9RkZsjf<`Qbd2HC}Gq$g0aZ`mV!M6lBUB zw19Jijw(Q3I|2g&SjC+Yaf8LUl6Ih(nEM7)tNplaGh>yqL#lXo&150f>auQG^*g-z zxA+TJc8%8aO;WW_rWW#M+`!;cgE8UUJvys8VE z&u;d12k5zt0F^!Z7Hliq+hUpdz$z3l$#3QIXiz$-FkincYj?_fub_`QOqs6dRq2G; z6c%bCYN0fg;86oYGA=zU6;3D_Nv(&HIp;Gzefm_R%h>F90v!MQq1gbB*ZJSW=;Mo5 zUW^V03tc+2s-|M5Tu09;@VGQQpwibrwuYcJILfyacto1Ly;e}mL8|=G*VR?D^tP~n z85|=!3`iCf5A>i~`|ab-Y!Es|edh1-%d~qNeeZFH8u59ob>he|I}}96|Nw$6r z=B(XPo=CI;A4y7D&wvkYx-CXqnl^Z02R9gKLP-d+tH4Or7a19Hu~aSZu@IyyWxwG_ z)%q;GrFbgNV4{RokS+D~@Lgb^l@^!}L|^sO*VHaiXb5+ZByTj?NSbW88(x1`)r)XB zyVhxucqg_jp|YR#2BoF5QVEv9(uAAlh#Te;vO3Op;4mv@D4Z(Hv0jN*v6*Jxm}F9@V{aP~m4qqVO`lWT zG(tjlJdt$^cU+grsl3)WY;Ji5OLH-;#CP=pf~h1ai}e#l@CvGzOU%2sodemALaLyi zRI(#)lT03FF+I>enYnX^RmWP2+ zT5tEJMV?ZHlr`DG_zdBMAaarv50PBC70C96$S)5NYSha+XAL3Fg?l5#oLpcrt&6Xz z?^X*J8D!k(M!Da6dQ4M3cHwGq>=QATcZ?dxy6RIKu;s$G{S^|fD1~HHZ_E>Y;4KkR z(oTHEq(Gbyg>@^Xu;|p%x*winwu~@B*&5V^-r@z>N(lloee z-)x)B^-T!GP+V$z%xf)wCr{deJMaSsw6N5viNUR^z(GBU9-ft``(-gi(jrp|lb;<- ztwz^;%3i6W_!q7gq}2xEb~P>C`2D~}&**5nWMXRFp^t5@Ww_%EOXLsM8XW%y|~i=54UtUBgXId_oR`;MV5 zdn2N=Twbv%#MVku!zs5RYe(1>UF(3{I@}r}1^h{jshWw?FMAX?5)xgmyl2gpgpV~D z5=>B0a76^z*C#xi4(YI_*h_w$R@)?4a2ev%wq@C8C&bf=sXBoV@-P?9z z%wO&9+=bW!zdqWqptC#vtdcvdisNc`JW0DlP`6c6*lg6F1FOwPBGaTek8(CZpNU6w zM1G^9+@vpXk@srhHE^9n zAxGkwuTT^urp-X>DihIg1#v?qDkE9pz4$p)LWLyg{1DhF=py;|{q+RDugzK-l6P71 z%+bPmrjV9~39DigF9p2=H|aA^@{h;QLAl36c+RyZX;j? zxwORpRhzwP9`o~d^YGO~<1f1f1QLR@an>j0H2z(Tb%2|1;6*}!oRKe{c)`Q>(h0PN zyGPJoeT@SMgdp%uAX@RCtvtp^8Ka?yIj;QYh0@;_iWq(D|NNw{`1i$0jFAcktARPL hhA~pd99P9?82rCAQ|Z5JrkvbgPxHTXGT!_5zX0?b7B&C? literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-android-chrome.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-android-chrome.expected.txt new file mode 100644 index 00000000000..ef15f1eba25 --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-android-chrome.expected.txt @@ -0,0 +1,17 @@ +Request-Header|Accept|text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 +Request-Header|Accept-Encoding|gzip, deflate +Request-Header|Accept-Language|en-US,en;q=0.9 +Request-Header|Cache-Control|max-age=0 +Request-Header|Connection|keep-alive +Request-Header|Content-Length|22054 +Request-Header|Content-Type|multipart/form-data; boundary=----WebKitFormBoundary2oBNepLIldUG8YwL +Request-Header|DNT|1 +Request-Header|Host|192.168.0.119:9090 +Request-Header|Origin|http://192.168.0.119:9090 +Request-Header|Referer|http://192.168.0.119:9090/form-fileupload.html +Request-Header|Upgrade-Insecure-Requests|1 +Request-Header|User-Agent|Mozilla/5.0 (Linux; Android 8.1.0; Pixel 2 XL Build/OPM1.171019.021) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.109 Mobile Safari/537.36 +Parts-Count|2 +Part-ContainsContents|description|the larger icon +Part-Filename|file|jetty-avatar-256.png +Part-Sha1sum|file|e75b73644afe9b234d70da9ff225229de68cdff8 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-android-chrome.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-android-chrome.raw new file mode 100644 index 0000000000000000000000000000000000000000..2263dfdaf686fcf138d8189eaa5073691a290833 GIT binary patch literal 22054 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�^R73OX67wz+p-s%}PSx19s*u$|V`^<;{Q+-FA4 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

#dCoO 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 V%uUW1R~UN4{U6D!ii+Hv{{fi79?k#& literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-chrome.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-chrome.expected.txt new file mode 100644 index 00000000000..491fe431b37 --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-chrome.expected.txt @@ -0,0 +1,18 @@ +Request-Header|Accept|text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 +Request-Header|Accept-Encoding|gzip, deflate, br +Request-Header|Accept-Language|en-US,en;q=0.9 +Request-Header|Cache-Control|max-age=0 +Request-Header|Connection|keep-alive +Request-Header|Content-Length|22054 +Request-Header|Content-Type|multipart/form-data; boundary=----WebKitFormBoundarylxcKjAyTlRs3jNP2 +Request-Header|Cookie|visited=yes +Request-Header|DNT|1 +Request-Header|Host|localhost:9090 +Request-Header|Origin|http://localhost:9090 +Request-Header|Referer|http://localhost:9090/form-fileupload.html +Request-Header|Upgrade-Insecure-Requests|1 +Request-Header|User-Agent|Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36 +Parts-Count|2 +Part-ContainsContents|description|the larger icon +Part-Filename|file|jetty-avatar-256.png +Part-Sha1sum|file|e75b73644afe9b234d70da9ff225229de68cdff8 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-chrome.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-chrome.raw new file mode 100644 index 0000000000000000000000000000000000000000..b31c88589892ec7febf716e58b78b243de115654 GIT binary patch literal 22054 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 UlQYH@h8}VMe-NvpA~)xM0KxJn_y7O^ literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-edge.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-edge.expected.txt new file mode 100644 index 00000000000..3086e324bc9 --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-edge.expected.txt @@ -0,0 +1,14 @@ +Request-Header|Accept|text/html, application/xhtml+xml, image/jxr, */* +Request-Header|Accept-Encoding|gzip, deflate +Request-Header|Accept-Language|en-US +Request-Header|Cache-Control|no-cache +Request-Header|Connection|keep-alive +Request-Header|Content-Length|22085 +Request-Header|Content-Type|multipart/form-data; boundary=---------------------------7e225f6151054 +Request-Header|Host|localhost:9090 +Request-Header|Referer|http://localhost:9090/form-fileupload.html +Request-Header|User-Agent|Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299 +Parts-Count|2 +Part-ContainsContents|description|the larger icon +Part-Filename|file|C:\Users\joakim\Pictures\jetty-avatar-256.png +Part-Sha1sum|file|e75b73644afe9b234d70da9ff225229de68cdff8 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-edge.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-edge.raw new file mode 100644 index 0000000000000000000000000000000000000000..6f60b77cd3ef4f8e3e3e9471ba95c10736665755 GIT binary patch literal 22085 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⪙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 literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-msie.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-msie.expected.txt new file mode 100644 index 00000000000..e2f6482cadb --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-msie.expected.txt @@ -0,0 +1,14 @@ +Request-Header|Accept|text/html, application/xhtml+xml, image/jxr, */* +Request-Header|Accept-Encoding|gzip, deflate +Request-Header|Accept-Language|en-US +Request-Header|Cache-Control|no-cache +Request-Header|Connection|keep-alive +Request-Header|Content-Length|22082 +Request-Header|Content-Type|multipart/form-data; boundary=---------------------------7e223ef2109c +Request-Header|Host|localhost:9090 +Request-Header|Referer|http://localhost:9090/form-fileupload.html +Request-Header|User-Agent|Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko +Parts-Count|2 +Part-ContainsContents|description|the larger icon +Part-Filename|file|C:\Users\joakim\Pictures\jetty-avatar-256.png +Part-Sha1sum|file|e75b73644afe9b234d70da9ff225229de68cdff8 \ No newline at end of file diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-msie.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-form-fileupload-msie.raw new file mode 100644 index 0000000000000000000000000000000000000000..9b27e7677b4023dc866b4337dbb484f3c33a240c GIT binary patch literal 22082 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 UZgR%B!q6k`{|{nSROIIT5At6ot^fc4 literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-form1-android-chrome.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-form1-android-chrome.expected.txt new file mode 100644 index 00000000000..271e31b1181 --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-form1-android-chrome.expected.txt @@ -0,0 +1,16 @@ +Request-Header|Accept|text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 +Request-Header|Accept-Encoding|gzip, deflate +Request-Header|Accept-Language|en-US,en;q=0.9 +Request-Header|Cache-Control|max-age=0 +Request-Header|Connection|keep-alive +Request-Header|Content-Length|245 +Request-Header|Content-Type|multipart/form-data; boundary=----WebKitFormBoundaryD4GyXQgjBRmK3aBz +Request-Header|DNT|1 +Request-Header|Host|192.168.0.119:9090 +Request-Header|Origin|http://192.168.0.119:9090 +Request-Header|Referer|http://192.168.0.119:9090/form.html +Request-Header|Upgrade-Insecure-Requests|1 +Request-Header|User-Agent|Mozilla/5.0 (Linux; Android 8.1.0; Pixel 2 XL Build/OPM1.171019.021) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.109 Mobile Safari/537.36 +Parts-Count|2 +Part-ContainsContents|user|Androiduser +Part-ContainsContents|comment|Dyac! \ No newline at end of file diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-form1-android-chrome.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-form1-android-chrome.raw new file mode 100644 index 0000000000000000000000000000000000000000..f5ce1cab07d88ac495a0aeac78534cb62f9ddaa5 GIT binary patch literal 245 zcmdPZ1%dF?B=5`;xBQ}9r~J~ql*FP+7Zdl&h`{tLr=VPK<3y(_UM}bSypq(s5?z^JOJ!oRBJoz}>hf{{05@(>N&o-= literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-form1-android-firefox.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-form1-android-firefox.expected.txt new file mode 100644 index 00000000000..9f7d2307e87 --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-form1-android-firefox.expected.txt @@ -0,0 +1,13 @@ +Request-Header|Accept|text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 +Request-Header|Accept-Encoding|gzip, deflate +Request-Header|Accept-Language|en-US,en;q=0.5 +Request-Header|Connection|keep-alive +Request-Header|Content-Length|306 +Request-Header|Content-Type|multipart/form-data; boundary=---------------------------6390283156237600831344307695 +Request-Header|Host|192.168.0.119:9090 +Request-Header|Referer|http://192.168.0.119:9090/form.html +Request-Header|Upgrade-Insecure-Requests|1 +Request-Header|User-Agent|Mozilla/5.0 (Android 8.1.0; Mobile; rv:59.0) Gecko/59.0 Firefox/59.0 +Parts-Count|2 +Part-ContainsContents|user|androidfireuser +Part-ContainsContents|comment|More to say \ No newline at end of file diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-form1-android-firefox.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-form1-android-firefox.raw new file mode 100644 index 0000000000000000000000000000000000000000..75dbbde1a6fd329258df3769965d472ef2a8a93b GIT binary patch literal 306 zcmb`>F%H5o3(a8$sbnc!tl@1ITl30}E$|Zd^ bFgq~fKj^#WydC`NH!aCFwUu5!$cSLxU&~Bn literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-form1-chrome.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-form1-chrome.expected.txt new file mode 100644 index 00000000000..d36342fb640 --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-form1-chrome.expected.txt @@ -0,0 +1,17 @@ +Request-Header|Accept|text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 +Request-Header|Accept-Encoding|gzip, deflate, br +Request-Header|Accept-Language|en-US,en;q=0.9 +Request-Header|Cache-Control|max-age=0 +Request-Header|Connection|keep-alive +Request-Header|Content-Length|256 +Request-Header|Content-Type|multipart/form-data; boundary=----WebKitFormBoundary46EP6zTN86hbbaJC +Request-Header|Cookie|visited=yes +Request-Header|DNT|1 +Request-Header|Host|localhost:9090 +Request-Header|Origin|http://localhost:9090 +Request-Header|Referer|http://localhost:9090/form.html +Request-Header|Upgrade-Insecure-Requests|1 +Request-Header|User-Agent|Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36 +Parts-Count|2 +Part-ContainsContents|user|joe +Part-ContainsContents|comment|this is a simple comment \ No newline at end of file diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-form1-chrome.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-form1-chrome.raw new file mode 100644 index 0000000000000000000000000000000000000000..7f8bfc267d89df495a5e182113a57188451fe2a3 GIT binary patch literal 256 zcmdPZ1%dF?B=5`;xBQ}9r~J~ql*FP+6EoKUv#Jn33$u)*q(m=gUM}bSypq(s5?zLm9a8xK literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-form1-edge.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-form1-edge.expected.txt new file mode 100644 index 00000000000..0b7f887ddc6 --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-form1-edge.expected.txt @@ -0,0 +1,13 @@ +Request-Header|Accept|text/html, application/xhtml+xml, image/jxr, */* +Request-Header|Accept-Encoding|gzip, deflate +Request-Header|Accept-Language|en-US +Request-Header|Cache-Control|no-cache +Request-Header|Connection|keep-alive +Request-Header|Content-Length|267 +Request-Header|Content-Type|multipart/form-data; boundary=---------------------------7e25e1e151054 +Request-Header|Host|localhost:9090 +Request-Header|Referer|http://localhost:9090/form.html +Request-Header|User-Agent|Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299 +Parts-Count|2 +Part-ContainsContents|user|anotheruser +Part-ContainsContents|comment|with something to say \ No newline at end of file diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-form1-edge.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-form1-edge.raw new file mode 100644 index 0000000000000000000000000000000000000000..48aa4e73f1c2e6f585ca688d8d610f392e3a6091 GIT binary patch literal 267 zcmbWxOA10U429u&AbSXR9k-fzCtL!;90 QCQ;RH6i%Z&e?gfMUV5xYSpWb4 literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-form1-firefox.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-form1-firefox.expected.txt new file mode 100644 index 00000000000..9f0e4ee9899 --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-form1-firefox.expected.txt @@ -0,0 +1,13 @@ +Request-Header|Accept|text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 +Request-Header|Accept-Encoding|gzip, deflate +Request-Header|Accept-Language|en-US,en;q=0.5 +Request-Header|Connection|keep-alive +Request-Header|Content-Length|258 +Request-Header|Content-Type|multipart/form-data; boundary=---------------------------41184676334 +Request-Header|Host|localhost:9090 +Request-Header|Referer|http://localhost:9090/form.html +Request-Header|Upgrade-Insecure-Requests|1 +Request-Header|User-Agent|Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0 +Parts-Count|2 +Part-ContainsContents|user|fireuser +Part-ContainsContents|comment|with detailed message \ No newline at end of file diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-form1-firefox.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-form1-firefox.raw new file mode 100644 index 0000000000000000000000000000000000000000..a7c653154502451131ca5f077f8de7562cf453f6 GIT binary patch literal 258 zcmbWxJqiLr42I!8kUI?9r&xAaMX}P01ShKjGm)8y*Z1cDi}-bK^?XDt%j3As^Jbo= zjBxZCQiD#~@7^`k>n<(cj0y+uQ)QFG@aWP81cXJKd;(zwAo_ziyV?85S9xk&Q;}f3 ONl7NX^F@9qi4a~O(nCZ5 literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-form1-ios-safari.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-form1-ios-safari.expected.txt new file mode 100644 index 00000000000..4d0533dfb0f --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-form1-ios-safari.expected.txt @@ -0,0 +1,14 @@ +Request-Header|Accept|text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 +Request-Header|Accept-Encoding|gzip, deflate +Request-Header|Accept-Language|en-us +Request-Header|Connection|keep-alive +Request-Header|Content-Length|268 +Request-Header|Content-Type|multipart/form-data; boundary=----WebKitFormBoundary56m5uMm4gNcn4rL1 +Request-Header|Host|192.168.0.119:9090 +Request-Header|Origin|http://192.168.0.119:9090 +Request-Header|Referer|http://192.168.0.119:9090/form.html +Request-Header|Upgrade-Insecure-Requests|1 +Request-Header|User-Agent|Mozilla/5.0 (iPad; CPU OS 11_2_6 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0 Mobile/15D100 Safari/604.1 +Parts-Count|2 +Part-ContainsContents|user|UseriPad +Part-ContainsContents|comment|This form isn’t pretty \ No newline at end of file diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-form1-ios-safari.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-form1-ios-safari.raw new file mode 100644 index 0000000000000000000000000000000000000000..9664c903572ff3638ac76a6c70f2bde1df33fbd0 GIT binary patch literal 268 zcmdPZ1%dF?B=5`;xBQ}9r~J~ql*FP+Q?p#tQr}#Ybid?0lOi8OUM}bSypq(s5?z_CHY)eQ+W--_i3Yo=uj~Zr{C=?W>mXuT~q~_(9re_duxvnlR7Xax@Sy=!8 literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-form1-msie.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-form1-msie.expected.txt new file mode 100644 index 00000000000..60cbe9e5956 --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-form1-msie.expected.txt @@ -0,0 +1,13 @@ +Request-Header|Accept|text/html, application/xhtml+xml, image/jxr, */* +Request-Header|Accept-Encoding|gzip, deflate +Request-Header|Accept-Language|en-US +Request-Header|Cache-Control|no-cache +Request-Header|Connection|keep-alive +Request-Header|Content-Length|285 +Request-Header|Content-Type|multipart/form-data; boundary=---------------------------7e21b6f2109c +Request-Header|Host|localhost:9090 +Request-Header|Referer|http://localhost:9090/form.html +Request-Header|User-Agent|Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko +Parts-Count|2 +Part-ContainsContents|user|msieuser +Part-ContainsContents|comment|with information that they think is important \ No newline at end of file diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-form1-msie.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-form1-msie.raw new file mode 100644 index 0000000000000000000000000000000000000000..e562e72139768f9eef5900121678ba133d50e3ac GIT binary patch literal 285 zcmbV`K?=e^3`O??bBEAaixYCQnn$jT2l$jLq_Re^Kg8s#Wzj_aGV+S7k`+gew z-EoZJn#|c8Z&H?2#3k7Yrj!*Q!6kdK9g7QyF%; +Part-ContainsContents|timestamp|2018-03-21T18:52:18+00:00 +Part-ContainsContents|comments|this couldn't be parsed +Part-ContainsContents|attachment|banana \ No newline at end of file diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-nested-apache-httpcomp.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-nested-apache-httpcomp.raw new file mode 100644 index 0000000000000000000000000000000000000000..12ce1761a03957c3d27c4d67b6effd23011ccbf1 GIT binary patch literal 1203 zcmcJO!E3@W6vpp`{trP0JB;VrIwh@h40MXap`fDkGSW7!(Kd-m>gIpHmciU<+oAFf zxx9Su$M?Pm(BBt#%j2_}4g2f;dY4jev=lJHZrd>?EJYT`C5r`nKQUIN^6TntVNJa^&ZpzQ@NzHywu zaq8nQ-N?)B=u6<6Ez>9xMHcgGgF=dAwZ6DMcw!8RwiW*+@B#P>e&e`EcmAZ6j75Gp zEjwF(CBx3jK2BEC{9`ge<-%WQU3Gl|6`qH0 literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-nested-binary-apache-httpcomp.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-nested-binary-apache-httpcomp.expected.txt new file mode 100644 index 00000000000..12e9da8703e --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-nested-binary-apache-httpcomp.expected.txt @@ -0,0 +1,12 @@ +Request-Header|Accept-Encoding|gzip,deflate +Request-Header|Connection|keep-alive +Request-Header|Content-Length|1577 +Request-Header|Content-Type|multipart/form-data; boundary=xDeLGHDDsXrlJSXfqDmg5IRop7auqTTBXuI +Request-Header|Host|localhost:9090 +Request-Header|User-Agent|Apache-HttpClient/4.5.5 (Java/1.8.0_162) +Request-Header|X-BrowserId|apache-httpcomp +Parts-Count|4 +Part-ContainsContents|reporter| +Part-ContainsContents|timestamp|2018-03-21T19:00:18+00:00 +Part-ContainsContents|comments|this also couldn't be parsed +Part-ContainsContents|attachment|cherry \ No newline at end of file diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-nested-binary-apache-httpcomp.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-nested-binary-apache-httpcomp.raw new file mode 100644 index 0000000000000000000000000000000000000000..bf8c06a969d6601aa7294aae46e602f6f32bdc3d GIT binary patch literal 1577 zcmcJPPfz185XJA6`W-BU!~qQ?rG+#ss}%%7tFrV@U@IbQ-i#CGiow0wFRabP7R z#38xZml^B*-n=ouCK99gHj3Qb=EK>1xsHleZ!p#749j(rT+YiuyLF`%2}KY|XS9={T2D5tzf?gl||Eeu2 zw-gqx71ya$tB?f?N$pm<^{aHk{^7bXsJ2JD`**tqb&4lh2uE0$Ce(L4KLGCpI)38! zL(dES;Ba?(Ud<3YUy9wFToVkGNyjjEnsHs`sX8FG5X@B5Ol!tKBIH>`@&yEq$tA}s zfybJYAaG;_7T<eeL_7o(2{j&Ld z?fb+pZ7IKMtRe0^6Sh)ZvtF)q-N<^{j||jmF4wLRZ}jHmaRc@?w|)StbvM7f q&;Mq@%~al=-i=8{nE*ca;RpYJRr(J2t^~{g literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-nested-jetty-client.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-nested-jetty-client.expected.txt new file mode 100644 index 00000000000..294f1eefd47 --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-nested-jetty-client.expected.txt @@ -0,0 +1,12 @@ +Request-Header|Accept-Encoding|gzip +Request-Header|Connection|close +Request-Header|Content-Type|multipart/form-data; boundary=JettyHttpClientBoundary1uz60vid2bq7x1t9 +Request-Header|Host|localhost:9090 +Request-Header|Transfer-Encoding|chunked +Request-Header|User-Agent|Jetty/9.4.9.v20180320 +Request-Header|X-BrowserId|jetty-client +Parts-Count|4 +Part-ContainsContents|reporter| +Part-ContainsContents|timestamp|2018-03-21T18:52:18+00:00 +Part-ContainsContents|comments|this couldn't be parsed +Part-ContainsContents|attachment|banana \ No newline at end of file diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-nested-jetty-client.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-nested-jetty-client.raw new file mode 100644 index 0000000000000000000000000000000000000000..38f849cc89b2bf592ed2f49c6dc74d2ddff698f6 GIT binary patch literal 1356 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 literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-number-only2-apache-httpcomp.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-number-only2-apache-httpcomp.expected.txt new file mode 100644 index 00000000000..aa49e327f1c --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-number-only2-apache-httpcomp.expected.txt @@ -0,0 +1,9 @@ +Request-Header|Accept-Encoding|gzip,deflate +Request-Header|Connection|keep-alive +Request-Header|Content-Length|240 +Request-Header|Content-Type|multipart/form-data; boundary=L8vdau8TpP0o-AYJDjCuYFQYnjB5gcHIFyap +Request-Header|Host|localhost:9090 +Request-Header|User-Agent|Apache-HttpClient/4.5.5 (Java/1.8.0_162) +Request-Header|X-BrowserId|apache-httpcomp +Parts-Count|1 +Part-ContainsContents|pi|3.14159265358979323846264338327950288419716939937510 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-number-only2-apache-httpcomp.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-number-only2-apache-httpcomp.raw new file mode 100644 index 0000000000000000000000000000000000000000..641c1a14837371db91279bc727f3717f8672238a GIT binary patch literal 240 zcma*iJ+Hzb6oBEKg#XaEA1$2HLXCr;QRASAOGmV5FnS;@8vXZ<-to@wv%CO1{c7z~ zALBj`Fm1Mr+x*$A4h`LA>Uv&pRv#NVn+Hmc5-fZlL+_IhRA-maJ)pJ8jx(|kHyK1f z_|fAhx;jhloksC)J^d-2rT*eNSkgJPp00JKPd;(R84g7ul#!)ErA=i}qAp5V7Kj>U ZWmGP;E`+H>Y0wy~l*l=Qe_a4@_66HFN8JDb literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-apache-httpcomp.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-apache-httpcomp.expected.txt new file mode 100644 index 00000000000..77ad18f6899 --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-apache-httpcomp.expected.txt @@ -0,0 +1,10 @@ +Request-Header|Accept-Encoding|gzip,deflate +Request-Header|Connection|keep-alive +Request-Header|Content-Length|406 +Request-Header|Content-Type|multipart/form-data; boundary=u7tfLQaHJEHHUJjnVDbFdc_Oqz4jmkA25mgWd +Request-Header|Host|localhost:9090 +Request-Header|User-Agent|Apache-HttpClient/4.5.5 (Java/1.8.0_162) +Request-Header|X-BrowserId|apache-httpcomp +Parts-Count|2 +Part-ContainsContents|japanese|オープンソース +Part-ContainsContents|hello|日食桟橋 \ No newline at end of file diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-apache-httpcomp.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-apache-httpcomp.raw new file mode 100644 index 0000000000000000000000000000000000000000..dfe4e57ab4970b8d8ad3728b453c3d7a5072c0c2 GIT binary patch literal 406 zcmdPZEj2Gm^9fA!@N)I=2=&U!3v)?wOG%FRFRU`j%FT8(GR;j7PvPZq&d)1J%`4G$ z$t*6&FU~B<%+Iq@NXswE)lEq(NwikTOUzBRRmw^%NX$zuPE|r^2&pVcwNfZattini z$Vtr1vsOsXNGvK&EwK&G$V@AV_wo!zQe2dnSDcnwr0bfOoS%}Jmu{tCk(61&%f-vp t?AaLIT-H3fIR;2a@N(%=*X0?hIXU?>aQ5V16FmCDy0;MRU|n5aE&xXEi#q@S literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-android-chrome.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-android-chrome.expected.txt new file mode 100644 index 00000000000..1ce9ca18e50 --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-android-chrome.expected.txt @@ -0,0 +1,17 @@ +Request-Header|Accept|text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 +Request-Header|Accept-Encoding|gzip, deflate +Request-Header|Accept-Language|en-US,en;q=0.9 +Request-Header|Cache-Control|max-age=0 +Request-Header|Connection|keep-alive +Request-Header|Content-Length|354 +Request-Header|Content-Type|multipart/form-data; boundary=----WebKitFormBoundaryN7pYBoDaXhEcUl13 +Request-Header|DNT|1 +Request-Header|Host|192.168.0.119:9090 +Request-Header|Origin|http://192.168.0.119:9090 +Request-Header|Referer|http://192.168.0.119:9090/sjis-form-charset.html +Request-Header|Upgrade-Insecure-Requests|1 +Request-Header|User-Agent|Mozilla/5.0 (Linux; Android 8.1.0; Pixel 2 XL Build/OPM1.171019.021) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.109 Mobile Safari/537.36 +Parts-Count|3 +Part-ContainsContents|_charset_|Shift_JIS +Part-ContainsContents|japanese|健治 +Part-ContainsContents|hello|ャユ戆タ \ No newline at end of file diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-android-chrome.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-android-chrome.raw new file mode 100644 index 0000000000000000000000000000000000000000..5c77075588e90ef3df6c6a77f1d5d2f4a873970b GIT binary patch literal 354 zcmdPZ1%dF?B=5`;xBQ}9r~J~ql*FP+Kl6e}r+k;hhz!@{&>TZ!UM}bSypq(s5?zLw>q`rmJw<04oCnq0lesgnko0_tbsez@5b#ol?HtFi}asdEy CX>-y5 literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-android-firefox.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-android-firefox.expected.txt new file mode 100644 index 00000000000..0a05edeeeff --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-android-firefox.expected.txt @@ -0,0 +1,14 @@ +Request-Header|Accept|text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 +Request-Header|Accept-Encoding|gzip, deflate +Request-Header|Accept-Language|en-US,en;q=0.5 +Request-Header|Connection|keep-alive +Request-Header|Content-Length|430 +Request-Header|Content-Type|multipart/form-data; boundary=---------------------------117031256520586657911714164254 +Request-Header|Host|192.168.0.119:9090 +Request-Header|Referer|http://192.168.0.119:9090/sjis-form-charset.html +Request-Header|Upgrade-Insecure-Requests|1 +Request-Header|User-Agent|Mozilla/5.0 (Android 8.1.0; Mobile; rv:59.0) Gecko/59.0 Firefox/59.0 +Parts-Count|3 +Part-ContainsContents|_charset_|Shift_JIS +Part-ContainsContents|japanese|健治 +Part-ContainsContents|hello|ャユ戆タ \ No newline at end of file diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-android-firefox.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-android-firefox.raw new file mode 100644 index 0000000000000000000000000000000000000000..b3c4ae8f72e0d2bc4bc981ec07c2a5eec8c64f65 GIT binary patch literal 430 zcmdPZ#RCit%?*qVjZDoEOx-OZ;1^LC9 zC7JnoRtjnPMY*~ui6x2F3VDgSskTb-$r*`7#i=FnO1xaWT)`QcX(jPqp256acx=|y zrHCQ-(ByQVtYq(EUM}bSypq(s5?zLw>q`rmJw<04oCnq0lesgnko0_tbsez@5b#ol?HtFi}asdED C-*%z^ literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-edge.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-edge.expected.txt new file mode 100644 index 00000000000..4b4cc724c95 --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-edge.expected.txt @@ -0,0 +1,14 @@ +Request-Header|Accept|text/html, application/xhtml+xml, image/jxr, */* +Request-Header|Accept-Encoding|gzip, deflate +Request-Header|Accept-Language|en-US +Request-Header|Cache-Control|no-cache +Request-Header|Connection|keep-alive +Request-Header|Content-Length|362 +Request-Header|Content-Type|multipart/form-data; boundary=---------------------------7e227e17151054 +Request-Header|Host|localhost:9090 +Request-Header|Referer|http://localhost:9090/sjis-form-charset.html +Request-Header|User-Agent|Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299 +Parts-Count|3 +Part-ContainsContents|_charset_|utf-8 +Part-ContainsContents|japanese|健治 +Part-ContainsContents|hello|ャユ戆タ \ No newline at end of file diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-edge.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-edge.raw new file mode 100644 index 0000000000000000000000000000000000000000..71dac77ca76304fb602b4419f506e2ec17dcb060 GIT binary patch literal 362 zcmdPZ#RJS!jf~7w4b2Tr4Gm09c)6VO^GZ_lN_1T^iwp9LGfOh_^Q;uo@{4kHQxZ!O ztrhYTb5m`V;*&EHi;7cA;+1&0c)3bT(sV6&x$xMct4p3eS&0RSd8x&zU~8T>E`7FX iH%;uxNX^N~2V3&EdGX`sWzRa=9yjeL$tqo4UM>JmC1c3| literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-firefox.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-firefox.expected.txt new file mode 100644 index 00000000000..f085e29368d --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-firefox.expected.txt @@ -0,0 +1,14 @@ +Request-Header|Accept|text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 +Request-Header|Accept-Encoding|gzip, deflate +Request-Header|Accept-Language|en-US,en;q=0.5 +Request-Header|Connection|keep-alive +Request-Header|Content-Length|370 +Request-Header|Content-Type|multipart/form-data; boundary=---------------------------114782935826962 +Request-Header|Host|localhost:9090 +Request-Header|Referer|http://localhost:9090/sjis-form-charset.html +Request-Header|Upgrade-Insecure-Requests|1 +Request-Header|User-Agent|Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0 +Parts-Count|3 +Part-ContainsContents|_charset_|Shift_JIS +Part-ContainsContents|japanese|健治 +Part-ContainsContents|hello|ャユ戆タ \ No newline at end of file diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-firefox.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-firefox.raw new file mode 100644 index 0000000000000000000000000000000000000000..921df609d8a7ade96450aa58f61fb8bd7789056b GIT binary patch literal 370 zcmdPZ#RCitP0THfER9VqjLa;}jCi@6^Ycnl^GbAGGK&lHi!)0y^Yg3}((;RPbyE^c z60H^T5_3~+mEw~#5{rscOX8Jyxp=vPGcwak;=MeBdAaadrK?M(Wm$;@iFv8TsbIT$ mCiN|(jWrpmIXU@YJDQuD+tieeObsketefLVvrSi*mkR*%N?#@b literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-ios-safari.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-ios-safari.expected.txt new file mode 100644 index 00000000000..2d6fbab768c --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-ios-safari.expected.txt @@ -0,0 +1,15 @@ +Request-Header|Accept|text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 +Request-Header|Accept-Encoding|gzip, deflate +Request-Header|Accept-Language|en-us +Request-Header|Connection|keep-alive +Request-Header|Content-Length|354 +Request-Header|Content-Type|multipart/form-data; boundary=----WebKitFormBoundaryvshQXGBfIsRjfMBN +Request-Header|Host|192.168.0.119:9090 +Request-Header|Origin|http://192.168.0.119:9090 +Request-Header|Referer|http://192.168.0.119:9090/sjis-form-charset.html +Request-Header|Upgrade-Insecure-Requests|1 +Request-Header|User-Agent|Mozilla/5.0 (iPad; CPU OS 11_2_6 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0 Mobile/15D100 Safari/604.1 +Parts-Count|3 +Part-ContainsContents|_charset_|Shift_JIS +Part-ContainsContents|japanese|健治 +Part-ContainsContents|hello|ャユ戆タ \ No newline at end of file diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-ios-safari.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-ios-safari.raw new file mode 100644 index 0000000000000000000000000000000000000000..9892c9c05feb67b7aef8ab316ba200af798004a2 GIT binary patch literal 354 zcmdPZ1%dF?B=5`;xBQ}9r~J~ql*FRSvf_-u2zRG6&*Gr0G+!q_UM}bSypq(s5?zLw>q`rmJw<04oCnq0lesgnko0_tbsez@5b#ol?HtFi}asdFP Cn{}Q5 literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-msie.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-msie.expected.txt new file mode 100644 index 00000000000..5d84aa6eb75 --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-msie.expected.txt @@ -0,0 +1,14 @@ +Request-Header|Accept|text/html, application/xhtml+xml, image/jxr, */* +Request-Header|Accept-Encoding|gzip, deflate +Request-Header|Accept-Language|en-US +Request-Header|Cache-Control|no-cache +Request-Header|Connection|keep-alive +Request-Header|Content-Length|358 +Request-Header|Content-Type|multipart/form-data; boundary=---------------------------7e226e1b2109c +Request-Header|Host|localhost:9090 +Request-Header|Referer|http://localhost:9090/sjis-form-charset.html +Request-Header|User-Agent|Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko +Parts-Count|3 +Part-ContainsContents|_charset_|utf-8 +Part-ContainsContents|japanese|健治 +Part-ContainsContents|hello|ャユ戆タ \ No newline at end of file diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-msie.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-msie.raw new file mode 100644 index 0000000000000000000000000000000000000000..9a043e69d6482eeb3f67bdc1557db3955ea59877 GIT binary patch literal 358 zcmdPZ#RJS!jf~7v4U>!v4J?y+xt#O!N>cMmbX_uw3-XIIOEUBGtQ6Ani*j{S5=#=T z74i~uQ*D*vlQR;Fic?GCm3X;$xk^jYbS-$f@K~a&OO`cRi3N#ysl};aTb?#9eYR;g hEv(5%&B@6J+wr)0@#E%Y&pO&3H|;0ICS6@#E&%6NWNiQd literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-safari.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-safari.expected.txt new file mode 100644 index 00000000000..18452b29e95 --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-safari.expected.txt @@ -0,0 +1,15 @@ +Request-Header|Accept|text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 +Request-Header|Accept-Encoding|gzip, deflate +Request-Header|Accept-Language|en-us +Request-Header|Connection|keep-alive +Request-Header|Content-Length|354 +Request-Header|Content-Type|multipart/form-data; boundary=----WebKitFormBoundaryHFCTTESrC7sXQ2Gf +Request-Header|Host|192.168.0.119:9090 +Request-Header|Origin|http://192.168.0.119:9090 +Request-Header|Referer|http://192.168.0.119:9090/sjis-form-charset.html +Request-Header|Upgrade-Insecure-Requests|1 +Request-Header|User-Agent|Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0.3 Safari/604.5.6 +Parts-Count|3 +Part-ContainsContents|_charset_|Shift_JIS +Part-ContainsContents|japanese|健治 +Part-ContainsContents|hello|ャユ戆タ \ No newline at end of file diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-safari.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-charset-form-safari.raw new file mode 100644 index 0000000000000000000000000000000000000000..ce14357da864c71ef29e58bcc287aa6bde027394 GIT binary patch literal 354 zcmdPZ1%dF?B=5`;xBQ}9r~J~ql*FP+4>#wK5ZB-$XY=BSKqL1wUM}bSypq(s5?zLw>q`rmJw<04oCnq0lesgnko0_tbsez@5b#ol?HtFi}asdF> CjdJb) literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-form-android-chrome.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-form-android-chrome.expected.txt new file mode 100644 index 00000000000..f5e2236ce9b --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-form-android-chrome.expected.txt @@ -0,0 +1,16 @@ +Request-Header|Accept|text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 +Request-Header|Accept-Encoding|gzip, deflate +Request-Header|Accept-Language|en-US,en;q=0.9 +Request-Header|Cache-Control|max-age=0 +Request-Header|Connection|keep-alive +Request-Header|Content-Length|249 +Request-Header|Content-Type|multipart/form-data; boundary=----WebKitFormBoundaryjJR29nbr1TDUu2yh +Request-Header|DNT|1 +Request-Header|Host|192.168.0.119:9090 +Request-Header|Origin|http://192.168.0.119:9090 +Request-Header|Referer|http://192.168.0.119:9090/sjis-form.html +Request-Header|Upgrade-Insecure-Requests|1 +Request-Header|User-Agent|Mozilla/5.0 (Linux; Android 8.1.0; Pixel 2 XL Build/OPM1.171019.021) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.109 Mobile Safari/537.36 +Parts-Count|2 +Part-ContainsContents|japanese|健治 +Part-ContainsContents|hello|ャユ戆タ \ No newline at end of file diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-form-android-chrome.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-form-android-chrome.raw new file mode 100644 index 0000000000000000000000000000000000000000..618c30e3c987470aefd3533a55c02c9b0499c35c GIT binary patch literal 249 zcmdPZ1%dF?B=5`;xBQ}9r~J~ql*FRSEUzFV%ecMmbX_uw3-XII zOEUBGtQ6Ani*j{S5=#=T74i~uQ*D*95(^UZQj1fSc)57FdM5QPcMmbX_uw3-XIIOEUBGtQ6Ani*j{S5=#=T z74i~uQ*D*95(^UZQj1fSc)57Fo;EIhwrMvn7amJ=b;+_OBQ+-{A8g0t=EaYjmp$uf Od)&026q|H)dAR`jUPib8 literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-form-firefox.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-form-firefox.expected.txt new file mode 100644 index 00000000000..ad25c45b321 --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-form-firefox.expected.txt @@ -0,0 +1,13 @@ +Request-Header|Accept|text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 +Request-Header|Accept-Encoding|gzip, deflate +Request-Header|Accept-Language|en-US,en;q=0.5 +Request-Header|Connection|keep-alive +Request-Header|Content-Length|261 +Request-Header|Content-Type|multipart/form-data; boundary=---------------------------265001916915724 +Request-Header|Host|localhost:9090 +Request-Header|Referer|http://localhost:9090/sjis-form.html +Request-Header|Upgrade-Insecure-Requests|1 +Request-Header|User-Agent|Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0 +Parts-Count|2 +Part-ContainsContents|japanese|健治 +Part-ContainsContents|hello|ャユ戆タ \ No newline at end of file diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-form-firefox.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-form-firefox.raw new file mode 100644 index 0000000000000000000000000000000000000000..5c8def3fffcd250ff2ce61274f52726a3ffd8028 GIT binary patch literal 261 zcmdPZ#RH7YObrYSEe*{q4Nc9BOnAAR^Ycnl^GbAGGK&lHi!)0y^Yg3}((;RPbyE^c z60H^T5_3~+m9i2G67y1vQ!cMmbX_uw3-XIIOEUBGtQ6Ani*j{S5=#=T z74i~uQ*D*95(^UZQj1fSc)57Fo;EIhwrMvn7amJ=b;+_OBQ+-{A8g0t=EaYjmp$uf Od)&026q|H)dAR_&uSjJ8 literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-form-safari.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-form-safari.expected.txt new file mode 100644 index 00000000000..2acbd52718b --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-form-safari.expected.txt @@ -0,0 +1,14 @@ +Request-Header|Accept|text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 +Request-Header|Accept-Encoding|gzip, deflate +Request-Header|Accept-Language|en-us +Request-Header|Connection|keep-alive +Request-Header|Content-Length|249 +Request-Header|Content-Type|multipart/form-data; boundary=----WebKitFormBoundarytsFILMzOBBWaETUj +Request-Header|Host|192.168.0.119:9090 +Request-Header|Origin|http://192.168.0.119:9090 +Request-Header|Referer|http://192.168.0.119:9090/sjis-form.html +Request-Header|Upgrade-Insecure-Requests|1 +Request-Header|User-Agent|Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0.3 Safari/604.5.6 +Parts-Count|2 +Part-ContainsContents|japanese|健治 +Part-ContainsContents|hello|ャユ戆タ \ No newline at end of file diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-form-safari.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-sjis-form-safari.raw new file mode 100644 index 0000000000000000000000000000000000000000..82475faa9e71e7f4d8fb22d26c6249fe2dab5057 GIT binary patch literal 249 zcmdPZ1%dF?B=5`;xBQ}9r~J~ql*FRSl43VcAKxl}C#Ud4*O1UGUM}bSypq(s5?zF$;n~7{>Aa;J$;nA5BFlF4dr}Mg+AS`HE-fdx!T{I)-BqfnTLh*OXhc(DW?- z2Yy1NK-9%VcC8g4t;_{;*>u<~3(U{%R?Q79%9gXWK^gsVS0+Fgj87gSit~9g^UQBXLED~R^FSPXO2@(>F49RfY zo%H?xDRqg@hcJ&3>}sAb%XQ;@vwVr4cGbpjF8iViZ{GKuJ)k3Sq#kYPFj%ta5^+S| zs?v~2g)=Q=(zsG+xz$p<_edar@AA(M5Content of a.html +Part-Filename|file1|a.txt +Part-Filename|file2|a.html +Part-Sha1sum|file1|588A0F273CB5AFE9C8D76DD081812E672F2061E2 +Part-Sha1sum|file2|9A9005159AB90A6D2D9BACB5414EFE932F0CED85 \ No newline at end of file diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-text-files-apache-httpcomp.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-text-files-apache-httpcomp.raw new file mode 100644 index 0000000000000000000000000000000000000000..b8fee37ca7eda44df676d6be74a14000ce8f6ffb GIT binary patch literal 737 zcmbV~U2lRg6o&6f_z#`;owN!R{78VpcC$}0n^&f4(I!|Jbcz1^S>2}2M7Lcv?KvlX zpQnW|B&)IGw#M{%z(+S}IlP+}8GO4(QdHBIr@%C#LMkp5q@pg1S}0LSA7n+fgfpgC z2S~Q$y@ui|)z~+u>yrCGA2!RJ3E2VD1*>YVdc!n<<e;%)vd(w~V>vBmLe70aCPJBp zY3OM%;~9I;w|n@9uov%tg@fAw`M@S5uoCRHqR<YK*oz2t9ZD^N2*R=B;sjd`it#@2 zc@LS$Icju(UUz2LwK`UFN<0ygRcp=sDH{|S*v@T^{)xR%%lyRp7qu67mSrQ`3qsEd z9EzzI1{(uy)Q&e2S~#(ym=gOt(1q96wD<?L4siG*&S7`2=tGo_9%G=V`duYd&ih9) Rbm6+&+*QoqXo1i)J^+si=z;(M literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-text-files-jetty-client.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-text-files-jetty-client.expected.txt new file mode 100644 index 00000000000..7e0b528d284 --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-text-files-jetty-client.expected.txt @@ -0,0 +1,15 @@ +Request-Header|Accept-Encoding|gzip +Request-Header|Connection|close +Request-Header|Content-Type|multipart/form-data; boundary=JettyHttpClientBoundary1e87p8a551psw1al +Request-Header|Host|localhost:9090 +Request-Header|Transfer-Encoding|chunked +Request-Header|User-Agent|Jetty/9.4.9.v20180320 +Request-Header|X-BrowserId|jetty-client +Parts-Count|3 +Part-ContainsContents|text|text default +Part-ContainsContents|file1|Content of a.txt +Part-ContainsContents|file2|<!DOCTYPE html><title>Content of a.html +Part-Filename|file1|a.txt +Part-Filename|file2|a.html +Part-Sha1sum|file1|588A0F273CB5AFE9C8D76DD081812E672F2061E2 +Part-Sha1sum|file2|9A9005159AB90A6D2D9BACB5414EFE932F0CED85 \ No newline at end of file diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-text-files-jetty-client.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-text-files-jetty-client.raw new file mode 100644 index 0000000000000000000000000000000000000000..534054254316cab414ff005be102b7b1be758c4d GIT binary patch literal 660 zcmcJM%WA_g5JmR}|AU&n5=n_|IWLeco6t=QO`%<iL?!~+683~Pf8VGnls=#o+SM>~ z2j-qT7+-6E(+0qo*60ojckK46KT*vy&sCC8KRi)o<EV5UoENY(gLi`g<GML&T;Jlo z0<}P$YV~Ra`WZ&=%iELJa}<UXZ<Xm5yMyWn4XgWYjd>i!QP9v{H|l61^!TqGHO6W> zTA)xb9@QAWF{!+_W~Tzz#O*)>9-!B%jiU#Aw-I!X63zvwSvD<;MATJYa+#%45>7c~ zRhqGyk(5>}V7#S;T!UWE{TCVgM0SAIe#!r5v|QwbBs9rIkrR<hCi6m^F=upEok^#x oCS@gg63~`c@}}HA-c~3aTQ9+Y)$0$yK^QM57bX71Q!$RC7iJ&Si~s-t literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-unicode-names-apache-httpcomp.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-unicode-names-apache-httpcomp.expected.txt new file mode 100644 index 00000000000..446b69d34fc --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-unicode-names-apache-httpcomp.expected.txt @@ -0,0 +1,11 @@ +Request-Header|Accept-Encoding|gzip,deflate +Request-Header|Connection|keep-alive +Request-Header|Content-Length|475 +Request-Header|Content-Type|multipart/form-data; boundary=yRxfRSltW63lJPc9oHOOVyCn-SmDG6i4Ts9M4E6 +Request-Header|Host|localhost:9090 +Request-Header|User-Agent|Apache-HttpClient/4.5.5 (Java/1.8.0_162) +Request-Header|X-BrowserId|apache-httpcomp +Parts-Count|2 +Part-ContainsContents|こんにちは世界|Greetings 1 +Part-ContainsContents|%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%E4%B8%96%E7%95%8C|Greetings 2 + diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-unicode-names-apache-httpcomp.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-unicode-names-apache-httpcomp.raw new file mode 100644 index 0000000000000000000000000000000000000000..938bdbdce6ba7febb978e680cf3a7368eaeb85fd GIT binary patch literal 475 zcmcJKze)o!0EhQL-XRn+2D#pOCRaMN*R&!?r9E|y*PI6Kk|W8`8_(IT=<e*`>ib0S zH59SvD(Lp{`!jrmbgON(TG#$Ejq8)Ml9}V>@}kQ%SvRvqs*=L7(}brG<VJg`J((%j z8mGK6IzyGQ4cQ1UMo5cBjt8ONh1*@|pF;l_`sde|hqwE?!S}o9TA3j)xBj55h0-Hb z-U#cYAD<U<LVpac(5{k}a9x^>($^WHSIR>G!NN-EKN5!`2*_U>U>;){VHSVFa1Rll gOuwp0w1+w737%5SQp}GqJH#~qH`n1WTnT~T9XVf_>i_@% literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-unicode-names-jetty-client.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-unicode-names-jetty-client.expected.txt new file mode 100644 index 00000000000..bc9e8e69dab --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-unicode-names-jetty-client.expected.txt @@ -0,0 +1,11 @@ +Request-Header|Accept-Encoding|gzip +Request-Header|Connection|close +Request-Header|Content-Type|multipart/form-data; boundary=JettyHttpClientBoundary9iv9jofnq5dkzmgl +Request-Header|Host|localhost:9090 +Request-Header|Transfer-Encoding|chunked +Request-Header|User-Agent|Jetty/9.4.9.v20180320 +Request-Header|X-BrowserId|jetty-client +Parts-Count|2 +Part-ContainsContents|こんにちは世界|Greetings 1 +Part-ContainsContents|%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%E4%B8%96%E7%95%8C|Greetings 2 + diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-unicode-names-jetty-client.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-unicode-names-jetty-client.raw new file mode 100644 index 0000000000000000000000000000000000000000..4188d3e81d2c5f94ca29b5f84ac1d836f3705360 GIT binary patch literal 379 zcmdPZ^-3)%sq`o*DR9ooOwB8C$}i1JNi3?g%q+9a%1_HHG)>8_%1zJV<#Nu?D*-Cd zb;&F)$S=+;$;{8QQb@}$%GFItEJ?Ih$V<#kwN-lDIQenY<j0MxA2%+1+_?V9j%m-Q z_9!8Ahg24%S}ByIR+Q)$<RoV1@pAEUxfi9TmSpCo7b_U@a_LgrMXIjGsuqT-md0R) u5sYD|>gWWOax{c7+*DmnRGlnTEzMM2%~dT;RV|!}cDoS?Zr9c2<pKbyZGou( literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-whitespace-only-jetty-client.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-whitespace-only-jetty-client.expected.txt new file mode 100644 index 00000000000..8b7f3212c67 --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-whitespace-only-jetty-client.expected.txt @@ -0,0 +1,10 @@ +Request-Header|Accept-Encoding|gzip +Request-Header|Connection|close +Request-Header|Content-Type|multipart/form-data; boundary=JettyHttpClientBoundary1evz7ehqg8tvo10h +Request-Header|Host|localhost:9090 +Request-Header|Transfer-Encoding|chunked +Request-Header|User-Agent|Jetty/9.4.9.v20180320 +Request-Header|X-BrowserId|jetty-client +Parts-Count|1 +Part-Filename|whitespace|whitespace.txt +Part-Sha1sum|whitespace|353E2CCDDE1069706B950414B230B6C047F98491 \ No newline at end of file diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-whitespace-only-jetty-client.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-whitespace-only-jetty-client.raw new file mode 100644 index 0000000000000000000000000000000000000000..64f39f6ee0f9b6ac04e7c4de67ffb3405f9e1ec4 GIT binary patch literal 1048836 zcmZ72O^>D5Rfgelx4QmADRYCJI3G^LfH*-BQy4I{k`A$y*d}fQ;n#Ct&w3jWT~+72 zXYaMwdcO9tKl$Vz-+%b<*WY~j@ZFbx{QCVjAAb4mzkl<)um1ek&))y#zkd4u5C8VB zKl|{PZ$JC=4=-=O{Pvp<6@2omufPB9+wZ^r@b$Of{QULz-~RbepZxBt4`2P_^_#E$ z^#1RD@E?Ep`osJ0zx(R9?|<-%*WZ8r$M^q#`ENe_=Z7EsZ?}K`>v!*e{`%E--~I9H z-+ra%-+ues5AQ#G^8JTDzyIn_FK_?llYjcn-+%V=*B|}(N5B5zmtX$sSHJ%3)1Q3t z(@%f$%P)TX>F1w){>vZ!=+j^R<jYS#|LH$`@w3mr`0VAapSSN`US3|`y?K4}_T}BX zm)F;q9$R|%`nC^m-n@I$;=8vmZ(iQKefReD#nQW%{@%Rw`R%)RZ>#RTRxQ4L?aA@i zmv^<OxP$L1?o9j5(BzFaW;SaW8ujMQo41{8(3>}%Q&sbqDt5FHZ%lvP(rq{9Ed+sm z7iO*6uE*PYBNYgc0@18UY+w*O_gYOYg9l4z!-8y|4@Hv^3Q9a|XxhK1H^jW2Hu2R{ z{nD@D&cRQ-b~-g&psU`jmv^B~iw1@;4k7Cwj-9WK;`C~*UhqVi5lD5U##F}ICn_lC zWsPlt80gyc27c3YzLqIG2r&=R3(xd*SPuGKE2oWbyM2*3I}?UxaWfUzy^t3fa-Zs? zTTg)@><Uu|lC8wG{?$hi&7Qy*)_{S-m}-pV?@4XX!G`%wOiFanPhA9(<h?Z-vK9w4 z1)P-EoZ_5c3M!LpTb*ttxGnSD`Dqe5LrK1I$x4M@XxzwfxH+cE`0Q(i`StH8bF_aF zf6dz=kjYG|#!n>)SeJFvj0Nt;sMS(eQ0!FBk&2CgsehBRF5I&LW^5+;#Le19B%o$G zxHY?+DrJL&q{gLR(p4@G?d^ojC3$xP^E{+K^1CCmBM6-nD6%UiQ3}nD>F(<z3~rdd z35nVwGqGSxRY!H8b@XZoMh`tr?WRsgeJa7$wNCXgSJ+_6(2%)Wgl&dcrD&suGsNLI z3>`L|j9W~`5w67TSP<?UU~r+_Z_{bFan%u}fqF$_D$PfR2PVx!WUDBqr^Oa>Xt|p% zTvW{_shSR;!ONwVS-i1I!$q$qSHV%v_OZ?u>z)H0Ait1=p&kxC2vj>q{7GM2SXv>! zLfJ;xT#WX6GKcOqqX}vvFqL`3jH8P7WUW~ppKL@{<9jD5`%q5+8n=;iVR_OJB6KUO z10uaQD?1?yXCbj34U+G+MLw(Bj;rsR3bd~b_5N{jT}bLM@ml4jU<P^`2DH8|uLsEy zqxn{EIhe7CKmjj5>W5m5S{1FkoIN)p*(TBu)%A4SjjCXi_m!vY%!aT|bcYmIK?(?( zy5U-f@OP>u%JVg?gOW(Cp%)|pII@vxtuwK1yLc>R%S{ayWdXtj7NTi8k<y`MudU9V zd*e?si=4Z~-zv;#C(r{FX$nak%yq`pk*G3@mc2Bh-R6V>l}>M*xj`1O;<3Z@;Vl`! z;Z9<KTeHRi))6H>mkp{_kQn_0Wzw`{Xdeb*148S%1!Quhe~*<B>?V*QPz~7?3VFcX zw>BcN3)0kzM5E5_^jR{38D<k|Puj5g+QE!Kp@F>*;=u2X@dapv((pIOIBmVSOZ~b4 zsfw~g59yBfOLS>Kyq;vQI*+L_d80VidC}RX2_Ja%++qAXSanY|B@!813l68|WbLrs zLX8^E|EA1YzSX*y2f6>3=`UV{4o<k-IrkVISG9jy_JXM_&6>&J9G&|O2%DH6&zOP| zRv3s<Lk`6zK6MRbc}zB+(9t6_Nlf*t6-};fxYnRn76^w4D|B>k*tS0UfQFkfKj_f> zN?3=D%wgC#0T$?nC4AZjeF6@Z%M_hvZz6h&8M}$P0Xn9F%g~TG1cz?g3Y01-WBe%f zE(rm`+VR4KU3SV^OQur}RNZ%?-Hk^FxlpYmEtj3pD~v)Kc9@O=AeC6ho-!5trszEp zWgrNrb<WM5)Z=(<WQWdv{f(6Onhk-D&0;|ln;chZ>@9tI7p(}n(E(={LVa9_IMix? z;o88Ch#K15sj9t3^traxlMCeeGI^_Al8G!sA#ay-jKj9xKu|sye57o9eU`k|gF8v0 z;UD8WU{<rEz3ik)EPT%dT6~u)4eH(}P^%{o;D%J!u#;LqrnF(57T^k(c<Fi85Xh36 z(xIMB8Qv7f-x($KaH8BcW+CXoM(gPX{bI$G5ZA0fBG6!Gb0Y53p%c7T$TI&e*qxB( z7))cq0vFagJdU5DsnX0&t^tW_&@Y|Q45sgBUi;J(nNOwqBdMUaRz+^1U09{Ssa5Ei zApOZhqEL52Hm5F>I6gU+d2Ao9IE&G6)G!cyO%3`>cBh$m4Ch)H8lqh#o$tLK!7vvz z_aHSo;=}9%Y<EPSIvtl3JEZ8vvB|9w(PKWV0=#FgnbGM)S?+>p_JSIhL+r-Nfm;Cq zy#i2U%=)+4ELN265o@}CWKtptKn9M6gsDj#o7Vn>LU|!<;nL}w!s$9A%BqmtvoKqb zFpJ%e>(7c7i5*Z{?RTA849YeLpeIEs-3NqVAFS}+wP<1$rt&Rpj)jL&Cuv)|0XndD zyW~YNaAp8^R9fXjTyjNQmTBu;bhKW>R%zLOz?z9^58+mahA$LNQFo1)*+B9(vsEko zL7rr4T!W5J%Y<K5mHR$v0=@VZmi8)KTzJ`HsLsO>gUi6Mbzong=ug|&rEWvO#16li ziEtl6HEj-Vn<5bF{<7!7=33<AC7`(oG4mLL+F*C0Lw#^mimSLgLMRQ}l_#>0hlq}v zb50@ZTOmi-H7CTNwBi%TDb~~G^#MCLq^v%9Py-(KDyX(8+T>Hdl|BbD<1=Kjp08Rh z04Huu^tm)nu{l96!pG1zf}aI47dA^r$$ac>#Hv%U<NdLzv%5Py=>r22Cy3hh9&sgy z4JYKqP6VUl&A(0)whFf}5e8U6tjJm%>wdvpUMp_{7BKtQ7@4_ySV&H#Ms;NfmNHxG z0MJt|sG5?A(8<4W)4|y4gJg6nEQPfdPva^U!4UL0MLLlW3vcIIFs_P(82%YGnd?@Y z_8$B<D9;H&UXgKD4t$9|5Flu=&&{uC7|7OV-vdn+x20gIEsxM9DP|N85mct6NzB6@ za3frk(W2vIRh>4Ju<K3|xl2I|#&*Je0f8E(G)Glj+a{KF!C0ruX{G&+REPrPE(U06 zYMPlH>_T<A-zqCll1&ky1{vsBtYR_|mcM4vG5uTY@Ah=t!I;sb^F2I#j0mH)%&cLk zT7+LVKr>!Ov$g2+Jp_WUA$pSM>q6hSZ)^I^C(yXyB3Gy-|06oqOAmohEqAU1Bb{l* z%eO~|mNaHrX@+p6f1AB`KD`Tqu7MB|epEz^eDoiPnO$!_iWRGcjA7)`2ysSt_N3Y< zaci$FV_VX{6BXCHMJFJS|1Bi5Y*4jco6-y)D5W)v=JY;vN*vsH>eF{Dt7=y5DU{4C zpx|QRj%1P~m@hnzhPM7rwP`7yyt2aJs;f0E%&uz{z4&RBSlmn3#mLe41p|2V>Y`z< z+-TXU{W^-yJXlP$m(prFR8tdOlxC5_BUKyakTlU4Rc-*<vOAbblP@G4mc`K2r$bIS z!nV1@i<=oPXDh*5K*C3>Xf(d`MKwYDNLofOCyP{2ch2N}kq~_1=+s|YnHb?-Aq|fk zP#ejJI9*UQXCy^sC@8A98NAs+(%$9MvAt>?;H-#g*x)wj1Fmi!0G&(Hoq-YLVb6s$ zAM<KE2%^us^Qjbt+SdW>WO1oNRz9J|F^%)uS42SbsV5FJW*DVDy2JpdbKarR9A1Q5 z+6ZnArw9(TdkXTJ;#C1%TSC8Od$3DcFO<E0q7!q1^k5Q=`UH_Lhl&><2I|vDikrwQ zR0-G-m_*UK%QS`V%G3f?TJ_eHxW%i@4%h28V3B@Gv=UVMkII%qOc+BPx=lo@=2w&V z(}whnSFe4jDe-l#vBD<c$)IqcRh#ijo2Gyi)ljIc!3|fBdFx%J<k1ef8{uqfr((@3 zb<Jzu;zC~GhOsYl!crMsy^j}YF>0?x3>*kFk%`f+Lp}MA4UCiwxvA0bWUZOoZ)Y0O zpkM+}nKWEow0ahFQvx;?)u{pwM-jr1P%-Zt05FKE@MY4#k|_X4x7SNdI#oL@Iv5C` zg5D3LJ!4yc7S|avSe=sAdM;0}nYYd;#a_}lo-jo4jfnZanZXWtf6`yIK|MG?wj`rS zs)?Y3YXA>5C^{aHjpuA@R!k~FCQ3uWCrs$?d1|#{!mbQmD!5}<cJ7%;fO<xbL|U%{ zg(*hg)~v#$6sgwt4O6eSaJE`eB|;QgRgRCU`@_zRI93d9$&rAV-wuTA33JOmFEL4# zijavrO3P3V1bBZHH^8c%&23Nny3}~1Qy>;;FNaj)tgnKBZg|XEnN{HQWz!M+*mI+1 z^$dyu%msP@Tl_n}yk?&pioSZb!=t^6bMCaCBLa<moatn<H6YzNzSzK|Pdp=U(<x5n zw4fHfn$<h*?J=Nvb!252wnj$bYs(D~zR|8PAXG`Vbpz7T3Lr^SQqpEN(LkHVxmgXb zMSx~aTQ_#zv>f*Kkm;3a?bo+v;H<w+?Z#M6EANl{He1HGm!2uo$RX>cs%CSeV_Ma` zL)Cbu_M9WNZ>+}6cqs|UG{h+ygk>lIq3NNcEuz?=8j#B=uY%I&n4`w1N)xCOtTjvq zT2|ZPe%s|$+=p0Af9I@DeXQHax5yj{vnbSbGug+`HH7`N2wO$FM$iXt`nSHpOrnun zQ8nGYBqU{mN4DL|{4nhqv9Bl&g?-p|Doi+;pBW)(D>kwcwK}%Ykug4Y6<Mh~cRItu z1-vy%O**>yT_i$YSy%+ol)BfVPlasmr-K?SnkDfnLeLQ6&~W!W=DSL^uRKv2n|LwR zHQh<$Yv`cULsyVCGJpojZ?C~=*zB3kLN?lDjm%N66}rA48K=FWF5TpKh<CRA`O$or zr%68c)B)pKkOLfP?_=1LCD6nSH2`grO~N{YJ!Vr8HU6A&?qPkE0884Y;JbjDFRB(L zo2UVZbuB4n&P1qZ1>&KJtVw!XE88;%`xwLuA=aic*0v5*n0+ShLpe|#raYfUb(D!R z7mXr{fX4w3cQl%{M-7N7G-0HL9C*G1HJ?o`Z(zfK(|U3P{TfKTZ9nD!;||uRExsx9 z5d$bn9<=ei<hIjdy<2io`t_+w2SVYis2{zX(pv_3PK(|5wyLCkAKBfsMuc>b*H~~z zz8AD*25)#MYEC!_0U#{x2?)}x$O43BzUN(Ra&)L^6$a<HEde#H0cW*tYJyEuvksX_ zZhf?1LvQa5uY4%+>ZuOBhhn-l3o4Xlc3OA~N(69=fQHjibz9&(=sPg-#_{dry{xJg zw0BpmPpDjIZh9-k7FJM<6T`)UySoh$tp_%|uS-x;+xJlapyQh{Axx&Yxyd|lsYrQR z@at4Z(*=(L08~z42D2sBtx&p0p<o;+OTrMd2JQrtgZ=>&-XKj1VHHw(N;>!vq*5Fz zBqExvzyz2f<5v&(IxIpRWL^h$K7>2I<!}JejQUsCBl!|Rz?y>LNcg^pgP_nN-4-)` zG{`I|9joDM?v!d}O4Qxs#7MWA=W|?)DG1<ciQ$xj!nen0R1l6p3cH&4=u5GoYpsE_ z<3Z0=0~o7bgO!6F6t4wxUzAU4(}!i3sG;FCcw~KbBmg6b94FVPBgABghk>|=FV!9^ zx)@cQq%re_TLOKN4lAvD$Vm<Q13udD8q|3tTLxcNQ&??9wbrMi3~*y8^mL^Felst0 zwJb@MlD#4>ASLKRkwTO+vHMsY%7IxL3%_vQ&{Quw^`~ft23G>>fkeJ_TDJ5s&Cli6 z<s+<De1wW5jb3lY2dlG-9?X@A2XND(O2gQ?8&H?pYed<4_p$z7;TOI*Qcp>{i1s${ z4hB4uZG)l2N;pQY>ICR<@}y4-p40XiKN0JrJAzEj!aH>XG!+1ts0^xgZ+0%9$&?)~ zI774nJt#RtiV##O*#2g|B=|ziZIlCLURnVU!5%v6a?c6K3D&*}WIM8mgoQdS)|UCB z2t`N4vL&8k;!aj@F|x&B1$9fcgw@k3kt1VlqWDs32x1w_zEq%PSXtbdu<BlG0<{i} zalLe2)5XYLaoFTYOag?4sV?o-#dTa>HLnRfT$CBXEGE=4A^HW=&8Rj+6!%3tFm1OM z6l_u*&3O0FdgO@LfyS5^!77&~nQ61mf&DnPF2YZ2kZF*Wt<`V{Bhd7ebphcDh~tsz zH2^b9AYIqM)~Gig;2Dn2L``PyJ2H*xM?vw}Rc=e4&a&mGLaAsG=}4Wc761oH)M5=N zBPqKh6{ngu!iWy2X*-!*5K*}cahf%CMoew7>JTU_(+Ive)TXAmwrXi9qE$l2jU9}R z4<%-JClKUEV0^oVxaI~(^G1b}KNE<f3uBDx)+tOoz59S~a`3(Qq`x;2Cpn5-Bu7hJ zl%}T8t-b_5e0cY}lvmQBc*(oo#Kfd2ofyB?TT@fJ<4*3|X7BR1yv4Ff9ZtYJ?KsVd zhVVnE6T1MWi6KpjM|?ON?fwvJL~h`+y!IF;Vse;vdPcm%FeC?~YB~={Z)Sa})S30q zoS1kFA-$tVgc~MSlc7;EzA;s%Lj8c$spZNWp$#-`Y%Y^(3Qapvp<Q*SF~cH3jj%Q* zp&7=qoFG_hAqs`7mI`(9B@hEb5X?zZ!bxxvi|Y=w_5fLPy<~V2wNlSGO;?kr@;TpR z=xQ}JcKI&HNf(7ML^>LsL&k+j_KHc7F%byg3Lw^cO@ttrt`u!s=S4sIr5^z!5(D8o zi>3sNY3N3ADV0%$K0Lml0^0`)AuCmFnFg^`-R&5#8Z9t2C7VW-Ro+W0K4neK;M230 zNXDXBwnT(uEg3)IO|M&!U|gfo<xFP}K;Rsx)}@lvN*9YDx+Nmh=V`N$-5NDo0|ivs zr%^iSmBg-TM3Ch{Wlhy+gj2U&!c`6)5!Lovv78_rfb)PAQ4qxhsr4>NJyT$57P*iK zKh64-{K-Iz4iBNPq~<V!9-1|#TmXV~2gxA{<_(pB`Prd;&!ITnc=NRBqBVni=};O> zc?mJGo@(usm=5>Pb;w^$<O}0{S2ronozOOxRL$&g4x)LTb3;S87#UUD8BO*?>@~<> zL@AAGA}gXnm0+|`E7(C6Ct(d9o(}9rpcPC&LlKK)A-ucAcNZ5qnl#nk!W7iWj%bIo z2J;}97bqi!um<Un5!-|bTZ3A~qc%VWH#$A-pD7MG<z76W+v9q)J4n|ya*zT}_JT_< zH2R2BF5ErxbVlXG64d(pbv&F+>1-PHnOCt1Y)q5ZuzsZMc3SFSJtN_P)d|ehR#VNv zdP~5ajVTb&406Ymvg4@wjIkjws)u>^Er8@Or4GHYE3lO}w^d6XL(<xG?kRkd(|XlR z3`L&<Q20i+N~#G-H3V-(prmOzfPp>;S{H%JLFs72=$o{tI6hm2MRi36)1Zm7&YMF@ zPu*Q7nXDY-xa-6Z*d|Hhc0lZ)1-PiDG|EKEmf)Bn+o1N3q;0n!fYhWf*d6T%omyz` zG0LRIHizgTM4ZuXnW81R49$A87jj`S)j`d}1~l^;)?Uq`BR<Y1MU756z%#Xtw%3m| zVAOQ!yScTI(y+!MJgB!MY)w8sNf!j(hF(eQwGhfaa2`fq87-u&_Y9_JD8#3!aChby zps);O#4agPct(blBdKE_BOY}G!*<9VohNli+7+h}U`|a%5tv1zZ&1)=2=E4UrgPdv zZ_4&rQpr(EV!05la>Ex;2*j%&%?8hvWDecjkR@r<*Spf1rI>o>*hH<GvO-5B=+xpu z=7batH>@PA&i#?bT+ayw*HQ%hRTX=H$ki0*psYvc*TPq#*J@}(g>)6nS=2=05rfbM zOu!Zq79PItNUZ^^VfY4Q^*dK@8ER{d!^`7-A4}L04S{Y(<Vor~n9u&ToCaZThfr*o z3)MD^K+Ab7&aRe-T3Ia`)ju@HjbV?n6ix$Q2>m8`kd}Z}-Q~r!Er4ABSOh8%8ZNZn z>#*Ct5zmfn5l~{9yh-{uZ?_asS*{m9%;P_@V?|xsx)(8tqK<(Op0tLf?%9_%)1G|w zi?Dn)k_0T1#rhyI8}(~U$6X9cqqtFoX_Z(ZNx4mdC5qQzj}5GIEnI#;v8>O&fu*>4 zZPGN~Hq5uevLsHG!q|u=RNtQJmd%+iEs?4Mcg$|Tsg!+tA%}1ZbA6s0C)kyTimIJ! z6N}b>HLfNd>(2#d9_3rnzEUfV9zQ^wtXs`GDpM0zBH_E_AQ77TLg`WL21JG%yqO@@ z{p#vGSiWsQs&NO1nMif*#q4^W_><HfoTxlg=`tK>!X))X_f=qIRT%HKR2(Wnix2Wd zG-?+~H)$9PGBvK<Q+0q-Wzb0OUMLWzL>-YtZi`YEVRjO3xW#~|sp1yLBEEx@I!&u( zh!JVO3fAe{&b$}jjy2NP<{*%z*wiXQx?CLV5;*)^E-|d8(?OnOTGYHj1J>|pZD7-z z*QdIP%hF?REz`2k9>p^*Y^W>&+8LLgTk6^2SO>16j-{3ayGONVvvEGvi5mzT++<=% zOCQ*rQ5LvFKZew&cGw08I)fOxJLt@5CjBuEM9p0!x4EC}>7d}$wGLt`X=4Z$#lkl) zw2(wY9I+Mf-on0PZ2-~q#&RZnJ-7|@Z$ua}V<(L2v?IbWZPE_9WwJ>X`z`@8C{XHH zbN91tc$?!+bE1KKq(lW(%gC&^zumfY)C^k@)}gb$t_TiBEE7=!cEmbs#iN}(BX6uG zUWegnwP78T@!C=c(+u{p-W>pNx+B}Dwqj#0!H!Zqe0d3LOLeJb0U%K4m&^w)#Qy6* zpKZj8-4_Rshb5{Sg(b}+T>-G{o|i&YZ<&C}<U0DHQ=gO4uM@4Ue`80dGb>RVlE{)Z zL3&{Sksxd!U{FmQ^-Un1`2ZRSYSS^Nv#Zm7z)4A?9H>2K1iwxYEuP%ep)$2RWQrR# zTiQ3=J|cK=*bs80U7X-)J#~5`24`X>p&bxhDd5!{cO4+8)x~M5Ef~Hv>fXuxt0j|y zG-zZQ{7#2Y=h_8M5k=da#A)QKgEn)bR^!ZE(TH)Ki6t$KiJFUB9az>mLhyF#vSGvH zV)SVdaF{$^EIWyb1V?mRA@fh_C;&;#gJTYU;P89_2n<FBnnpdBA`%>^lv%+#IRg<( zSjj}?YV~ii4|oYo=2994!I(JIsxZ`*h*TRLvz@F-VNySFsM%$$WnMRY>_?|hzVk${ zqE1JO3#~5@;pz$aAnZh2=E4Rn37<HqY`HekqCVomb0Ag=L);i^$n@wdB#0rJ2s0;^ zof4sHJ6$D1Tmb+&dvDbwi5!W1V5TrKsk<+vSTUeOee77HpJDY1r*WO%)dpGYD`6It zhE8&=fvT`G*kwhyA;4WGaH=>!H5gt87+pKN-7P1RA-o~Vou|J#gGm}$Uu2_DmvzY9 z=Bbtp{|%Y%Nr%1Qj&lrMnwm^bV%0!GYAYFT=4pnI!!71GgFBqOB<Xpqp$&Dw)}-|J zA)q?I>!AChztVAAKclz>58I)ruPBG1I#MyCb(gAgx=fQg*Hb}#+dM!u2}UoZoPbK= z$<vlY(!hOLWvm+^E<_(^Ogmb$4D5NJ8XG1^J;>pb#E7Wns_K5~x)73^zY}qqw;?>C zf{dbzfvQ}oNqe-U0B!NS%1$+Ml2td$_a$>*b`?wgOeTuIFdfsPGq@4DFNY@d=q3Uf zAg)Wq21uq}4d(7bZ60k?xZ-IwSqyA1(QLRjJwXDx==YE)Nkd*Ub8@WcOP6`N(jJMB zsq#{(4$Q6RD6~6`BIaOf)vzVJCBTJsyw+CgucjA*AVsBkx)9a31Z^nc###cX-mxV) z!8NShx252E6R_iz1p3-`0EA1`@;V^R)1o7OV+2B+Lo|Z|s90?GwMR}zdZVY({zO1- zh9|&d)`wxu6ohF6{(=LCXthOz#7MasN1?U)>QApo_w2^gv_{12CpyI6<a+VUUFMIq zCmr=NF>snXHeM)AY{=>BX2U|lI;48_tzlF{e`Jlq9Bwx~t=A|hkVK~b`c%4Ns2BRu zyYN!U`SZ0Y6l)X>>kgi{CzDttMvdDTHf3ng#0eK9!1^^b66Cxu2<A(!I)^n}bJDd` zF(WpzaUJZHs<Da^5(AdWqgaP_Do<6@0@8Y*O;2quno0M?q&(Fips{H;gJriDhJ){1 z`=TZy9W$Vk{t~^i&OvpVsJhwQUI_L=>ub4d)TtoVX_AWt$>%4X!wng7A@w4W5$iCg zF?M7hSk!h$Y<h3-qQ(hbm9<+N;v=<Nur`Us#Jj6<MTTh*`hB6uV-aX%OkfBM!um3H zwpA-u%U|&$DaB9V2F=076Bu^_OQ{*yM}``~(63#`WsI2aLPzz}sg({kYF|@o2uG!e zh()w}p1fSEc<Q&=v85PrZZ!*XxR++NzGwK^s@XLlb%iZeJ)8zg4M(P|e0Qvm;7x!F zT4d`S{NM&{I$(%d%(v0WG;2%)A{C8ESA@XOZzvL+V#{~vmdg%MS{g_Scyp4@xVF61 zqa~G_X*s2%s*2rBYp>H0T2?Oc+I523TtT8wt%+tpQd{*F1rm%J+%2gFT;QtejOY=s zGVMArgOadi7Ig14j_fYdg-I^V4ZVBB{NPRo>}opHJwsIm7aEXjJZ4D4`we;7X(QIt zw=NymB7%BJBAu;OcwT8N1N%~t1JQ;OZjoVcKR9I#HS~+Qph7S3b=`8)4drtUDRzS! zlECh9huml8)KH5~cFNSsYY$p~b<P<X=9!CwcSrl6v_Fo6-zXQXj=sb?(C(~9w~>vh zw7sfiZzx<PcL*7mq~joR2~h|U+s(Q=5l+PE7_eSsGGZ=B=kXIB5M`}pM)%12PBLsD z8oFid161XLi6%&_>UX63!1Y<T<km7%jOYzsh%rVLv0#%ah#jp<E1{fx9dmNd>EBj= zGQKp_@r<scnvLmvY?48}H{(r1I0f3~rrIoM>M}#MAUM;&fP{@f^qIG$Ba2l?Yl*K} zPST-L<d{Q^cuNj<a;vS8L%<NnixgQZeazmp&>0`v$-p1EUE7fheNE-yQci~RnY2`- z69zRfMXxrJwAV7>hV@5#*GsBlb_!f(8=9z{j45A2SsAf9C%Lh&R*Y;1u*MzXgq%7o zq#>B^F~p8q?WTt$k$k39Z0bBPQG-77hulGHa<hA<-nMI0RAqIbiPHWm4hoklw=$*U zVMK65yLHrTb#&Id1TJumq0Sr>l<uyz5*XY1GJp32u4FtB*xrGT<*Ac1!XYsaiZCMJ zR%BW=X>Hi)8kC;o&i6wo1eFLC_f88$3!CO9yGG7bR8yg#B4uK8W(197Lk@iN+tIy^ zZh;i4-V|aDE_Gxv%FpbjD?k;p+T3a(CzmMHI^NBwZw~hv=D`Z@ur;iX;brr@TXzsS zm`XLu)yt@6{$dAMX!;G5Taikk-Ys@NI#<C$w4y^(r@A(>E_%&d-(WlrdL7sT=Twk0 zazhiz%rP*W>`pb-kMVAt*jGT2wi?1Ge-`S}h5?kNM`!`$VT(RB#$B7&bSG_lV$#%# zhP;JKk1sB=c0^0JjEOR8U8{}<_flVv3takH_qj*M>c^!%2D^XJ&|6M~IYTdMZmS{% z;cbfM>&m4hY60_O%&e9>U(1M`{Gm#ZKwgJB_388uI}n;oq~01<J6iaqbH|c1+z|7w zPfcIG(1*E(!8|^p6p&s+vD}A}1_n`^yEW5^8+7Ow{dO@*g3)H;#G8J-z)78ybW29x z7mO=?CUtxiQV{2GA~3dRIsarX5%Fkv`HQRccXY5}>!2w1uR&T$L%>6hZRzOkpv<i% zadqJ?S?y0_)s%DVNDE%|tne+>$biRDYuOI&I1>>x!q*57sCw^QCqX90A|+Hh@&IH9 zs?@ULa-2LJEBF<7_ftpY+`Rr8B%V=90)`+Jqwv>u!t`<Y2z6~j$O!zL?hC<}GA_GY zNC!;c+B8WYQiQypPIaV@=(8|r7ls{kt_OI6(SB$J(u9VBI5S!kFOaHDg`Qw8Or2Ye z%QSHlC#Z*_bI3KfZ9Y`mwgDrh)#3o}yzQkC5n5n^Ya~&}BZfW2hn4GkMi@STK}zb` zDP{R!D5oAqKI>Tj?zUtIc{toX0a#L#z{J?KE`cV(8vY)OMcULu@<b*$N4R~RYS_>i zv3nwjm6QFXMMb7*fvMwlUj#Krlc<MzGjeHIKo<sc;0uX>#e~aMWn>M=<HP1u(Q2cO zY_4arkUk<cL%R3gq`apd7~3MS&0eBYggvexKDF<dJQ;=o7#$*4LT_PUJ5k3v!)Iq( zv!H`5HRVuHJ}DUyemKeRsnh1;!~}LhWphr|zpbg#QOn>(y)ktMSyaWMQK?C98{s(? zlhBDe?)t?mWZ-eH<4GT@?bQN{j^2G=iW<;ix(SC^p}h>yNMr{lF0N0%!UQVWQYl=t zYHFwJ7F58!9(Wx(f>p=besU4)U4qt{5W6`Z#=!S&S7#Y<R{J_)-<xm3jcP!@Ed+)i zt?EN*B$G^}hJ!18s8wh?uqz7G{B00}>dwjKC{rf4Gg9G9$m%mwaB;=zen}Obq!Vlv z0RqPD*)<OY>DuBpGn-vOeToP%wOurLHBrSW9?OJTLEs4Jol{2HAWti8`q+Y(xwXp} z^hwf*UAbg+k0_yM0@P(oNY2L^H!JKCC(PA!mbM{({6=m;Vu2`x!{BIDHjTGIh8Z&V zy`-o+5w2?66J=yH4#_FwNecR$22^*@#e%@;-YFd~!U~V(9UAR=MYvL$Xy$a~k*RiW zH6X;=#kct>!i=^p)}P0%Hmb$x?xOJxfq0HHH_6m0J)Zg+m{UT1b22drb+1{^4NCUi zVa;nH%f?gZ(Nh147BDX2bN(x9>RvFbMieP!BGEX}@~KRhjUgA-S|bcOWpXq0VLm4* z4405p?{?Xs2i$enf<u9Zi7J=zdR%zg88KhA5$k+~zAMDSpxU^d-s8Wt^(mUot{qy< z7~In+$s<QkQ!A?hAbC;$HpWD1dm1TtN6Bq=qz}F!dZ_PZf$g2Ph**c&rG3Z?0_UoZ z;RGM9Id?Dxh8AMy4rAMy$>K;m?a!iGayqsP!LDG_@GLCRS(5~2N9{uDT-@9P5c&YE zWW`)flPe5;JUic0pBuYxBd}^r@I*67<-q3BJTNH*M2A}*W09~MOSPu+tPNjQLs`3M zfFdK|G84q<8^w-D3iWsQDXOIMbzo~&)I|nDSvoKpl6G+GJcB|>7-1VOI>%yn2}s&Q z;aBA6KwKBu_3#Bl%2HKrldw#N#&p7g1dmF{QYjqMFHZ=myTG_N5N8JaVi=jra{W!v zQw&760nK^dI#%xnPmd1YWQ(=-JBOVkH%a&w5*zXa5TGRBA^JR9$BsY+y$U%oJr<Rl zMW22Tk+z#zoiE)95*bd=`u6vk6j4aEz!Lyv0ZbR7ouwi5RM&~uR)sg5Vgcw#2JO3U z94-VV&k4=z+~hFy7{SI<0RHCC#eEfST&8y702jMC81w3=(oEAFp;p8+uS=~dt78*g zsR`gsSzsBeII4B;WE?B5PtW!gOflL+%+~v=ylKEuJTOts^5(=L!Fn^i{<PJ(b6JyY zHHDjHy*Gsf6z3aBWB^SE6CxTVBQ;v8zR%f$yCn1;lqiV}NiwwFlP0;N+@V2VcxwZh zCD<7<RIM5Z02`PGUUb4BHX7EdwKm1ZKU1}Ba4k~`4<ZGY>mBM00yVBbwW8z-q;Hef z^pw}GbLxmRl}(d0<0GX@#~Y~7L>dO1eLc-GdYF^od&~mJ8BNi;cgz<6$o-TBUFC#s zc)C@9UebY0a$hCx9sK8M-Rhj#V35xZ!@`AWUjHt_fRcfnwI5>X>oKwF5EdFWIW2c3 zGBF6%G|&*Bd`m9q^>arJ3Q0Avr+_(d1R{u7_BhoUt&{b3<uLI_iY(RN-LTHC8cW<5 zIrr2CAlyuKx>51tn#nMczJd<7R3QphrA%A+c(}kz2wwHWg=&55rR6>jE~~NQ2V47S z!9k5g0nc3PA!haijrwM5y*%tv*QM^4fjCmN`MrWvdj^SyLE-i59xvd5g&|h1Sd#&m zJ}uTtlGcViaq5o{1nak#APd+msmq);wmPuT!C<CW?pp(K0nMRiY12|4#GrUJggjx6 z{~UBYe0+6(0wh@Vt+eA&b2)o-V+RcEo};jEu)|V5aYB!Z$Gcp{h#*b&9np|*go!y7 zCV|{By1g+NH4;=*U$04$z&$o5Tr>|%a-57kG^U#AUmct$Kon2;>&?gb)Ot5KT!K{p z2^nUDSuzj_7jV3!OGr(rJB!JJrRdiKrdEY%^96z?E?X^oNrJYJp3(v6w==yV*+wSx z?0!<C#^yu>*B*P)#yd9dfLQ?wR%bQlv$=Cu5T-_icD)v+nT%gh!S1}LDEE;UQjS9? z!do+NFsQ0Md1tg*>1*r)*H(aAtLHqgUo7e&Qx^BBh8wE!BQ$wB2V`~4>7~vhq}@U` zNTETQK8b4IEqHXTD`#6d+q7{5&grR3+>@BjdITyR(3*_(4X;4cg6(q_km)NeI@shE z3_<Md0-XRj^Hg_UwZC{ou$k_a;1mKfEG-zcS~2~^sP?)WU7J|~F3IhLP-3XoN&_{e zIOjscv|TSC`=}03<M*{;N{YLEtDL|Nb$+lDtLnOTw4$vq5f+Dtxcc_lz|u>A%@M`` zHb7(-n^c>*5pSbIy|vx=K31Rg6c15H+ipk;i(#u{t$W}CUPrdIjz=I;fhc1>5QYcZ zj>Z*bfe8kBqTj$(gbyL>37C7}8VW&PbdukF+&_Tpr$;-&fncv93kEWxImtVgoTzi} zdFoIyhhGaMsOVVw^S>}u5SnJBU(68ew;I8!Dl{uH77R7Mw?I#nf`g#}WI>ca7Fi|` z=JvUrP!BjIsia&wlZ93dEmIKH=mZy;CiK|_a{@UOJBn@PT2>LDUcv*#v8A2IpftXt zXR0o|#8p;x!<Op4YXa=sl9B<}qx$u+n#$mJ_7c*##&^guA?N|wUUCP1=Lyj(%_<rd z@`NoKajGA9oSQ%NZD_}8*Srq*u`$BK7TCrt3cRSn;tBwRHpJO^TiWpKby>?_R2K$w zUAvkP5PRJv#x!ABLv=}wZN)KY#?<jWSU7m@<QWY@2bK9|GhCLAh}%I1OJ^F5f|C@d zMwep`l=qFW5cvx0Q*HWZlrTW90;7I=WTge=OUi~Pbb|H5Bm`S^Tgkxv$&X2Bfk)9; z9~v8QFRfM~Pz)owHeul_Uv^&Y6U|QJ2zb8&=_Qz9A)B3WI4f2R)1?#KkR*8vqHnSy z(2v}lsb<GIt`ED}2%o0KdqPb#(;cg8j=FJmHp%UStcNy27WOa*-KN*cm6mFO6Hhh1 zSu2U2L&?#<gwQbDy#~M@`tb;14pE=nfgx<8!(OfE3E}t=r5eRV<)y63Zs=m#Q?oY0 zo&hxR2z4?_gd%3}Y#f=;)PAuHm=fSS-%p(fVsT|}lm?jB#wvg)-iFlxn|+p{nzs<h z9tfIhetYR(XA<GE0>{9LMI~fDSQJENGNcI$Ow}$C85+grh$ZRfgUAcq<<EKLp<XB| znu5WPSzAblvJ;T4E%zkKu+D<J>?Kguc9P%Z9>{xaIUXcmKe3PsX1Cc09umJrljz?% z>Eo+k;+GIt=pghgC7o$o8fw;?6ja1Y$*e-Gle@mH@+5q7N*Jrzocq$+T}FXaRl}ix z=mG9ckB&(X3Iq^$^!Ed(wjGy9nI=KvQUwL^*;SA!9*ani-qN5G%MD>k?R%nT?V$>+ z%kA8T^jzyeY65TT?a58u_9$V^PSC*Sh8B|r?3U9@V%ml!fX%C-h8TrH<NhXQ?zP=$ z1I446qN7QpXH;SFvBK2qcSBp$e%SQSA6R9?1w;FMBdD2opn{DCYI4@i{Ee;OuuXkm z0g2dLLd}y#^3W_Q_2v%FqC+}sf)pMV12^n>6Lp&BJ%Y03Ck<INzcv<yWRg*_ai_$! z(iEEWk;ZVnYA%CX+7)$}@Yg2}(0<IPu!TTQ{P9mH+pji12kKA(y2v;?L-i)`WJA{= zV@8H=VWmkuYo`t*EcK;ZA39GL6;p0TM<s3KA<64tvabNxy>>35E%nqNYB3avQQ>~J zCQw*wzN8`=f9|;ly(3NV{_yP$B^7Gw<zZSaTFYP!1ZGP1CSpQR^>fSfZjhVad*{!1 zW27*^Emj@4v7|{wH0U8eeW+*>*BnH>#;p&Jgz`fN-*Rhtz+s%kLL_xLLU-;2jMxd6 z4nf8)5xI=^^z9Tih|tuAk+(MF36hM3fd~8<$8a==h_Dfr05An4?*&se1=<-&o)Liu z*$MK@FLGi)0bqg8LabB8x0=a1scBrz8|yy>#;kl;cwT&zI9+XzwNBiQ7bdf-Fd=H~ zFNEP%H^j4`W{Z$(mK3{E6if=5%F+BH#^TiRn)1|Diwm^82m|j^X=0eJ2(u^Mvol59 zpx`v0bzo38MhjU7YTvH$v9k<}Z(kxsXEU^RY3gxqQm8flb{ylqK@IQXC+0B1A58<? zD`0Z8MT#{BOJBVmO1uj|3h-hhNZ+T&{F?K_Niub`2{=9mEG409IhlFH^Z2BokjsdG zLd4zL#;JzdR#2;IASBn$P$9I9;aTH&T7#Ggk`pL*R7tzNge^s;?!e0mm2#+!Dmp`t z1bRfAOMooD5vYB;O$4fAy~~H-nUE?HyDx$`jokD0NG`PU1t3&WLafF#CjlEkb!D4R z@yROH#B~hrfIQHTCm6`xw?c<&6Cr`eU2}R~UMg#*B-Rg)_FR9jh`G%&()z~7Qww$& zdtpfkX38qV!j}LN?G&fhn*2s|whnWK4K=G6|GLeZ0-yDW_nU}hR5>uhy&(ASPirI7 zQ5i^=J!B_8?4B72VIfN`>x5FjMv}e5Q@QSlukC0AhLm)kA>r24?dYWz*-oF15h+X8 zuxEY>Lh|Nv6-_3*R=V}MzH8>5lT61UBM*-!3NEeJMFiHSkgQF^XKEA@b%r5F%1Cgq zA3^D$SoD?$z7Lhn$?FBOZLf1C1su{+Zuy($qL++IHo}X<2UhADmm+C^4NX)nf z%%<E_Q(uF4_&OyBEu(1sumYt4K_ZPk{&fhFBU%tNS350Tu3wu=BJB*sr7oRZ@LOXE z))DOan1k)BCfSMS?_x{oIusv=su^v(=-~r_nvTpO6_7bqC2w}F@#~;_4SVKBJ;bzs zJrZJc>KeAdInBh~0+pjM2z86sTr+Mhz^F7n9j2p3l<#0~Am31FU>zlsBU(wZOGk~6 z?3nmYhIMFm?|s&2!AjjAPNo^*YIVNOOpKid^yE!iiH+l$^pFC=iyITn%$80=?-I4i zDajK+3bP8(ZQ)XN!_HksQ^d*6g&}(zXE<kCpiLuNt_Mh7b*w{B4eAs%gp`Jz3afp1 zJ*aN0A|Iq5C)IUBkc1>{xr(V!O@6cNq2ma!A>fc$V+$!38<AXd4hRFoX`Vf?GbIT9 zZG1~LHFCy!MtPj7NTrbpUkaQ@^>l@f*CS8k2T9|0Kx*cC4Fk9nk~XZoH$v)@Cz+T6 z>B-T~bBPnafT<ma%toV~LD;o-2kKVg!mL$&M$z%exBnQ+MXZxV%e87=rgKkda*_bG zQ_(SzAKR%2oUcns7L-M5GB=2&ctc;uXvq;>IW1x2Z*1q5)(Yim&kd7eGVA29J0_+% zRt+Oqy#SIVpsm1AtmvgNs}rd5NqMSOUA`{#T68b~$I9Vx4m-%L=57>g7<mdhLS#TZ zno>(Toar>-8?qCC(^Y9=Nfmd<>YK_fj+QQzh)dvlraFgv>s)wuEi$lD%?V#o7^{Lq zh8iIl5)JmQ&Vds?+cTAq+s$FQoL-xr;;45rqC^i?T@W=f&aQWpstNi9f+*k%mIB)` z?n5xfS2UhLwGocsMvxRkVhH-}g{O8rv8zpedTceKu52@U4n%nR$^4$G>d2GVup~_V zgSE3j5VJSQxZs4MHc_iF(Rb5$;wUn8*C;mfly+=usMK{7)ILVChVG;orqwvb5&9WA zszIzS0%58I*&Yn5GF@$7Y{<J@ks@&X9+jrVBD^UA-v7bio;F)Igc0aqCDfu5E$O6L zun83lLwl+b(&G(u6%E?dn)(k=ARBD{qN*6v-cp7a&{F{+;JD_o{kk^=IA_z4aGW?l zRUk!&y6lUgE`Ehr?*{Ry`Uz;E$B^w(vL;>}&=*_7M;yj=uQ`J#UU{o@Kz{EW;Bp`C zS_6f6MF;{F`?N8Fyp<tho4po+Y5~RuHN?*i1%3#HY{KJ8J`~8sp1XAEUzgp5YOBj{ zUKrEI4ek*Bg4anJ1twG+dh~7Y?sE8ZxVp8Kfm*aM%|q#_Vu+Kc!e;bAVXQh_dD|32 zwM`gKVofTMl$;7ijJ&wcVVTPs^{GT_Qc<V-I}NE;$NFo@$%5NoAo{DfU_`CY{+sdK z(~9L`b=U{n-B|?Zh_n5q63G<E$T&(yi&fW=o|o`YT8W3jY_}2smxa5G9(JzRjG;<> zQ`{Fsjq6AE&S4V>A*!p-Q=ra|2<~05<TW)|Ng!r}DyR$tZ$1Zun)_ZrnZlJ1QLlB6 zj<~9*fS7K42zssz=s|B|cAtDpefyfbaf#&OR8iSwUA92k=Nc{~2;v^Q&Uy$h`TRGd zw+(hj;*P2%-z@!dG<N-nrd`_RDXripnb9rQHs)lmjDPeR%_=y+n|_@^YcoV>C^DdK zI`olG;)x$SWKhmkO9`b!t=T$FjSXweE`;#8Cw?|vpla-R4rVqD26WC`+ty~lRInSi zbuYo;UowWePh7k5=Iq)~3iFl|1A;*MreJ0t7Q{HVAgPdOSvd;s+_swK>$?7}#4x<| zuU`y08ixux!KE6x<(2lXzfmm=$%L@Vs7|og?tEK}H<}p+i^a%+Pf}C-bA6ugppr(s z`nb|z2GtE;3TDf)7Bvmq3?KumcOWj2j=-Auj}28>(mYPthrd^u-GDJ5wJ(7dE4?6B z*7?X50{m+)En(3zOb{$dm}N+jYrT4|L=Pej`Tpn&Zhc#AJ(v-om_G*k@@mtU%C3`u zhH_Nh@I=HEDb_$ZViOQrGdr1pHM;6X^dL9&{g^uHVHquZG^xFzGT{3n%;KMtS%tb3 znx^wQE-?UyAC<L0ymt6#Uen|N+FL<zsTvytG6_zE`_#I;30ogmPhof#hxFAJmrw#X zmzohG-zRlR6W_1S855JD(HMt@rin>m!n!pE!D>pOI49nrmx;C-iS*9Ye~Gc?_P3k- zN}7a%L9;)6{>RyjE$m+8bI014;Dkn=4IQlYSn4ehoeNt{B`&;Z)ly>2)jpj@(-o;@ z4a>OZ82U1DD|%)bsni22GV*I=9qtM=v^5jSteIRyu64%rC`^6!(a~mz6Ip4|!*uY9 z;Bpdd3?e>;tfw<Pn;jeU<-7jmt+-iN!M$hHRvI}EB{J9zcZ>I)))ayz){NtbgyE8t z;KD-7+Vm%}>=K61)HAt6ytb2Ja-_n{c5BjzYE!PRMy6_WMmeD<6rE7gV6mpRzKBDb z;9y^f+e9|^TCDNLr+*HFik%7G(aIpQG?|;d`4A%OeE4VuL`;L0ch0t$>iyEieh4B> z+QgEmntE#+(4K2fs5A;-9BWKUQa7zlK!>O!1e(RIkQm=l5ThqU#`FlrCMnZWLzBT5 zL|2!C?TN(r%pf_j(6Vf6)TeX~9Net{*1t}>&$U!;L9_mPVi}R}46@JiL0#Ql*ii7K z>7a1RAGJCf`dan_ZA55or`B9YR<7C}irMYcv8QsUq_X3)lN^NLCftIPKY?9Bt;v@F znaDi3_9MfPa!l^ctf~SWMo)=zdbPf=5By+4yn<%aF`kWx=DA33q$hd!Ch4T<po~<< z_?}}y0}{hRKv?g%?-j7-mAf;!JPb6_WdNl)LZ7}`T(mlyv!@x{3#P6XeJapv&>2C1 zUOaU!?P!!1>x^4Vybri9A!c--N|9|lgp)H~#(HUvNQW>KcVOP7``9j}U?@}GUq4F; zb$81{yBsy4jm=-8fD2CUHh)JNA8wK}W;3|EPmc0GxU!wTNo{fm`UMbo_c5juI*e4I z0}HB?HCL!+fOf7Xo(+>hk!EV0F?I@fL^=yf2jT}W8yqJn7GfHzUDYLd;zL)f6gM%T z7N#k*eP&(5+{pe`iiz)(=2tWc_Pr`G<{lNg)ogdQV*b`Rbe#$-)#Vm$A2uP$gotwC zNj3Yu*DGa0HYcjpHbAwdv&>0^epU70djJ|>2*iiRF0-Qne9hZrK??Z+V>%>M4JeZU zU?&h1(H#=Fw408NRKb<NM06UbP-I=G;f@eG9B8RB<|RR+g+O>?1xUDQ*n4y$!1Vai zz5|#^nXV%$0%Pf$tW}=C>oE!)tXl&F*0)V(naqdh4Y}%<7n*611Ky!-e4hd(TD2-_ z)h<|_Yt4DJ^MO8Y(gaNT>ZXGP`EnHGiWg>Lwa(2>k+)J~0NznS2mlpg-#^$9m69Ft zu?fCx`eQK3eY;HLP7Ymzqf8+sMhPj6!^%slXNJ2r3wy2DoDQ}FX6HH(lo?|;DAGHK zdJB9jyQTZUSZhmeyAs2}dciFVnX)7WCX&|jsIHci%ID5ev=3&_$z`Pz?CjzLRmo{9 zTxhuL;1NBr{0`bGvuOnaNW$?0OoTRM@>Gn~zGCdriDi#c6T1@|AJ%*XRgpmVPke)4 z2QrOp58(<955Z_X!N5;s*P-J^HEgMr`+iH68299$DAu&c9%|?!11?iZ#-cQF6Zkgj zMoooAL0AKVR?|)}-L8qQNm$a54RgS?8z-ph6Yg1fR{KnrMW4qJiHEz;gXAvG+Ciu; zZmei}MLH+@vO1xH?M!gd0KCT_cD$-)hm&}j)d(K<47Hd3EkFRbK9Q$4{tw@!5X1SC z147haFLkI8A|DI^R$X(2^xDoS8K*>H;TX<EZ-#&hb0SX!`bAON>fLjl#hM9n(R!p> zn~6!JW85ZqBVCz`NNJxIG8<z?gpGit>bSuY;1f-wRu=Ms@=<6phMZ}slRdT*o<{n| z84hxxPg9jeqIW89r|0?6+0m3Oftt#B-XbsvblSjxlWh|B9x{3FP%wxHU3IPoxdJ)| zith;{P!XwL`@kofjBqg&&@`3(eXKwo%_-NA-KNL#sdlysbA{`-Z!ckrzb>M%9kGi` z)4;dZdv!K<t^2sphK@?-mh6+4)}(Xo!Z-^!6G?_3oVdPnFms^Y)DyUHxF;N($rUfu z4VLePrrmm((u`o`4@y+<Rl%0dBG-yM;I+od)>F&8X}#yt6)NecY6ts0Mfh=v%be-~ zSeMGfE=-lGpr;Q2#Y8JswOR+#g(aU*s|;KiBim72>lCJ@R3IaHT*XCnuazz8mC|e( zrb3X-0j&y}Pfc*iQXk{(*LQ_`2g@4B0tDGEeq#?nD#j(1VyePSlq8(`Z7<{(xKWB0 z8cmK9af86?RAq|4=G7rY0?=%qmYo#Byx~UrrF7wKENp2L3QDc6eSjA6=AhQDe*6<O zBEd_7emmY_0@#0GQQ4(#$kJ;5F{!eCskE&3>KVExG*#9bCVGituzdhjn$jx_E$a+L zIMDHeQeX&Kx!u-wX$>fjPQXGN0Zag(17VJ?HM*14+O683PJvpaeAbr|<Ln|%f+VV% z+D<1yr|ROK^<IoZlrEU0A+NS@p`Io{M^6t!Ve}pCN}u>p!O{<f_!n_*LmzxYpDZK| zr}han>{}2yh_H2G6@;es3o0EWP(9Cy(}_NEa6t<Jp3g<4P9GQ~Ha64WeU{1aG(s!< zOs-YtQGwthyTw{t!rbTCvIMYwz+L!cV_=<vy;cMjh|Do0kOcrbp0o*jd^&l;?klmi zeOXRjRZB7{uJ4)H=i=fUf%VN0o6h4y8@u}!Oe#|WZQo&zgtc`sZUV*Sl8(|HSa*l3 z*RfALs3LX<ih^XU*2#}Kr4z^^*Dx>|K{|=;V{)W14H`D1wIQ8P>xV{YTTSl{1q8f~ z5T^6Y=HZM|Mxp+=V`_7I>_q29wbF2aQXO`!GN7OYDXeRi1*-aZzrG79Zq!t5a;N30 z5{&DTvxzD*?Nl5KYyu{W7PQhNOs)9luT9JDNzKgI9cV+Y7qfaJYQ?!(9NI>NoA^aY zG!?WyNgK-4DDLIBhSl7b01B|84(C9PNjmJCoD!4{&<4vsN#|O;I@9^)n$~Ej*yKV> zXy(;#qjssH+O%k_V8E*$;ZD?nsOg7OjkR1XT3>&c5?VG5Ma|?#c6*CE#Udh4ikP>_ z$%q-EG{(6x=}iB@X)~n#w!bn0j4xSg6zc?&z-Ta=sN#h}5;Nd{))x+Ave|=47|F%- z4;m#-BuRr>vN|M(n1)PE<E<~7o&xh^t5TnW;p?PP6pOCxARpROW|0Ae92LeI3-Wq! zm2_TEWwSmz%na?A3{b9WUv&b6x^>ZZq$0{`?;npS3$>pC?^yGlai9XGqUm2H^{=)r z>9?Tq*hNho7nRZhA`wrR*xOw6VNr|vxHYB`sbUoCU=py7;^zh=68X>yM0h0DdEv6# zS&bV#d%d6lF@nCo^1SmMYT$xHa<Wx-J4Dt3tX3P@d~#YI`yJn;4(d~J)w>39w<EdU z8qIJ4O9W2RLCo|IaVAqmh~%*kldyTBT`x8^W>~^V&0P^LaH}oSRY$67H$HdDm^p!K zFMjeK2mmE3NJz)7&kxp(cMQflL)#d{vD^zOX<rE-iJ2;QBeiupXzsH<L4@EkQn_oh zOjt2xTO5HU9A1|B0PIQ5#*8H5)4bpe7i@tHzY9`TBlCmOK_H}vM7)|yeNcAE6CwH& zK}XklR&OyHxK~Kq9(mK}nn2<h5*_g8c2-Si=7p?|%|xA{ppnD3P}uwEUKkWeFl!sN zN*lyB6{hK1RX<C2D^)dRgI1X3uxm}WIlD`zqqDJ0p(yt|7WW_!g3vqf<FJ^da8ofv zA*#*wLtEJG@iioE(XsBrl9$pdjI;584n6f|3QisFWUhq125ZuJ+JqO@wGLE=m>m{E zcUA=F^se#NSSWA=hozi%rC82!4TM7^>g%hE6b*=(i?}5=h*N(ygHNl3q1%(s`i@{z zc7>XVB~?>}@ooVX`_NB9)U9or2ukRJSC7j)GSvhi0<x6SkOJLGl}YT@ce-~z4S6Bq zK1Pw5YkeYS<Io98Ef-Hp*Ucven>KWeqfU;)*MPyCdHYD-&Z1@v7ckL3K+9{KFsnnE zpcC?S^+jO8FD;f%2_ul}R#BeRuZmzu9jVFHV=7cxsaS+wRvJ<xIjGLNyv26VT^a~l z)`v`jHBLmRLoFz~tm;c?BnauCX-3I!A1PMZy23e4A>@_YWRoC`6-XajZEwIjk61gk zk09-@ceoOg+Y3bK=$<0!8!a}%t7T##+41z3hDk!?Y9S(*wjl=<O_WE!W<eE96Qp&a z4qp;FuVII){-|(3weI+dS8r|#%5;(!+w$pVG#^AtksZ=`9qmr;=2pAAlNu`rUZUC+ z<i_=}*FHBqz)|!~(zA?_!B@daQdy7W(@U!OEj<$zY8jNhjt4NRdeD9@1iQtK3|*&q zt%M{vqbpF=k0aC83#Iz<Jd@J3rZ<8<9j--&wzxK(PNtGT9Pk_4lmv8@3_*#F1gmxK z_$KkuPRA3XN*sH}$%k4hIrG67bUbRpr*x)bJxB*kVl4rIBs_;3PjTyT)mVgRR8a*G zH>5Qp61An?#;Pt6m+rx{Eo#D6nNc&yWs1RuE7l`0iP#_DbZ(xH!pMXv+e`2u^AX6X zVbXiY5+aRzs|yq8j*Zg+q2u&(**GIqtt|ryh#R*|Wp{nuJq#)%G8d|wbHdn4)tele zL~^WEvNSaC?F$Jxb{kw1{dv&Ix(*D^qY5$asv4Q3s>Q_BduVIqM)_2WR7@jZCGd`= z)^HUU`J<%Z_#&)T76i5JI$PlpD8BG|))Wgr;H~WblR<0xkZ$Hfy>GlkY(D1oGZ*9z ztu<*pXe?nd4v;KA*9#5Iz>ZEY5%g5=o_mF}_eNBy%wQ1Pt6Aih+}f70MiC<jOs>r} zVMM`biJN0Ge4bepF1;^4U4zyG#rh3zNAC1WN<^_(UQ#5b6Ryv#vD;&)rjvZZTrH1{ zs46h}qgLN$)sC2nl3WwsN|QWSRI_GxHWbSXyg`An#q>xJX;+I9O&DwL!Xb>xG3Z=1 zj;1x(sTC(*1mSO2NLgB!rsCdl);3)UhHR=%Cte1kj}kN<fCDxZ{PeHVo$sXctOKu2 z!LbTZ|FERR(n{OFG`HQJLmJ*`CkF?<X^7CO$*sBHi015RMfi~i`O)Ak+qa7Dq4fs` zOJg4BWCN9Qfx8iLq&15tQqCDU=AG7IXZeaZ2c{15m>;b0_^HhVsAK4fJGY_r<)bg< zrxrPzQjc_V4*PhgOGx7@^kzrTf=skjITUU2s%3scQ8ab4)Vokr`v7nB$zR|46Kvoc z+<?k@(}>2Lav$WQmiZ^<wc9ZR>*c_1Sau-iuC&6OG>DA`f$3=6a0rS3ax)2-kG{DT zj&Ookvz35UT!Uq>18zW0bgoX7(6B+Qn~PZ64f`^JSOsI2He!fs^!gNmmdw_145?=p zRr(_%DH5`#?U;6gct@#o6+8qJsgEka>!}kpfTem@2TE6=&~>ik_(hw3jUY9JiP^DT z#kP#BgXK9{`?`Q6Aq#QbI)HYFdc!OEt7CBp<4D<f1w8$n?~D*<y?_A)VsP{V8qn%F zm+jPwhrX~+qlK>l)O0?m;s=XYumrZIy3J72^{KSQ1gfr?)2R_HP7pFCLr67A`l>)0 zE90;~k%ELmMUBc?m8R<>rNQX0$1@<H)M;1ZQ@OUyq0k&=#gxj*@by}0s2fH$kb4M6 z$HkLD$HnpeCTgNr*|}6m_^5X@++6B~7xj^WS*AUA>C2st`3_Mf8%9yRd0@tlr5f=G z2hlOV@;x_2C($)uQTrsUld}}<(Ul<vpF?a6rnPCkr)prg>Lc)E?0s<xMvFevLly%O z!m!;Jh!bI;bCcPrX;}!H50MM#r0r1SC#vXkfAY-&tRql0@{r7=;1FSA_9{?r7Bj8w z`=TdT0R03ob|M7?t?C2!pof(p3^Q;>MsAkK6MD^)3rf^YeQU9%A32a{nP<JNRV-Zy zwo#@AzM^|<_U=~)^wY6c6QQvb4_f6x0ju9?T4gL;8QYqJC%bLTJ2|X$21Snbo&z^D z@dGnH5>}78#=BxfpzN>xVV7haN3A-SBKXt{R*k|a`z}VjL^~y{w&-cWs6h+6owzTM zmI5}K;4REVBpxe$0dN%H7Ltn7m^U>bLI)d{eVO@Uh^#Gg1<^UVNPju-RYdz{c93mA z_BeM$M;zGC=8D{g^5A32T>eQ6wMdFF8Jq{IMTgsw83L|y+UXD%f+g*M6Qt^z&D+ZA zOzNp%P;*;=N+_b$1hR9IU!7Gn=It7bsmFNkl=NY8Qdi(Q?PxC{*ahQ6{~C2hHngui zUl1{>WlhOX=4q%b1Lh^)qiyGM(FIZn1@UF8f6FU+${5>A^Wz*kyYn~To!Y;KpAv(D z8co-jdx<o&n?vMYTktA9lZpVKE!t$3UAG&L`t{qisAw?v>z_6Jl^7RF+J;uAYC@@U zO`He+nAJ6-h*bNaH$AjO5LLT1s7W2i!w#>+w353i^v@r9X{Mu0kt^^NszJc05B-Fz zX}w!HTm#4xTFVFjha0y{HNnL7!MHN`1kJJ9i`)2fR9kt{vGX<DbqrHQX&#@@Ml}TW z4&yF8dHRt<O?z{do9CE#WYW$JOC!}ZRVv9hJj5j)(gVTFM%ECg&a}!C8MuK&k^;GF z%A)8z1t*zF+Kg6bz@`wDTUX<*w!Q<cq%#sW)4+xa_mdoiu4BK1qBgV@N~FKWyYVhk zH3FJmu5Ak%s*hu97%AXswe0`sU<ks&>-5MoE-g%R4Tn%WrgJXXPwxurZ*ck7Q&^%9 zs^N1+F6(7#2&#<Qb+D3)^JKT7ZTHTS;W4Wb>wt>+ZgT$Bk4s>!6(b=U{pR-}t+*VP zPVRL5+!_ZdBJ`LvqXFry1>yT^_iAMex%6wQHVAn^aOY2&g4Ia!GD;%obFCQP-jY{q zI~P-F)xZ52->04E9hoWHN@Z?Fi|#EHAc!&@ByFPG+V^|da2M=A%V?Nbva3a3Y*jQS za5aM%W^_T|U}NV1Voji4I1Q;9o<=7ZJ1ADiUMlOuc&Mnma$k;VUL)7YvGvwgYM^W& zg<WJb8Z=yb+VviqPACazY^&*CPjf?djz+a|X}ji8^|=~XZU917r*_GJ97!4)H5Fpn zF$Bws7&3N~SWv%K;V7aFBFqHhA|BiD!6x|iB=$nqIw8Y>I7YbZZU{4V=rdGVs6`)Z z+Fo)79mL-I<P3MgAS-k}_ptSrS=<VbuEk}Ors`_eN$GgrJwV>M+TY%AHCph<LVz}j zmrl6IN|PIrjq&MRJN)l)ush&%2=`UdB?wNnUKrO{2xWx}n3zxOs@%ak%#SL{4f?^b zq)Tg+w<4)TG>SzY+X-+xL8(o&4cnle7XPEuhEJ5KmJ0DOIB3!AHzQ=fp{b6eRszW& zv%;kR?rK8SuTu<_2Q7HjaO)FDzU~0hB83p?$P<fp=SSS8;HK7RCRif{aU&k4)ayjK zNs$z&8iQJOBxu{qTawLc5>4y6kkRyBW~$S=vxVJ0RzA%FPz_zF<fc&qFKI$!zDB;P zjYGKKG$|`Xlu5ZPF6+BU_0-WSAIKB6`g%5E;suzsgc3&AH=VU6G0*G<Bte<s+s0Jx zyC@Y5cC4C2=LB-iYTL0^>|n!JGG#1&a=vMuuL$wBB<-$~LGz2x8du+|OB|!Nn8X}| zDsjmO%V(Oa#HAxCRWp|rmVTqzAV)g1D-t3LB8U#FP)s7@5Utrw?V(@I7W>Mxl&C4O znRzyh@K#u-i27D2${pE?pb?^T;zr~qk*;cln#p`2>HQws5Wx+sn7h}y#aY|HvAo2) z_EW4w^42FFj+4)HdDJd?`_6+P3t2}`@G6(t^z2_aV#W3vEN%p2`c&#Anjv<omNEsw z5Z9vT=8j;(ggL$14hVJqYhsU$TNzU*pC*VavEr@cEHb3$Uba&I_QraencRp*^KP1o zOvGBE?J|EY#j^0A$lL&--65c?n;mVsOz@5|psqGAI^rn>=jpzxYUTPWPHwJKB)GCC z17u+^Df$_asVsoIUeqQF;Qckf*J^z`F{&;C(@9|=iJ!qXCa&C1FZYktsnjz~acv<M zKy(D>`m@{Bs%<D}wmA7p$OvS8uP8LC=UR2V1NFg3D;5pNh$c-RW+`2(G-%E$qWIkJ zoy^f~WGigezX@9SgfOwVGqT{h5d@PqV53~qs5Yl5tc<))9iIbJsbiC1cTUW?)QA-A z-Iqc`;-!-?5hB_90^vEPN!PJyijD@F@<|r!r42ScuxC`8*M$270s%T1dQ!@RJQA!^ zNgFWA)PC0w7@DBe@d_MFpN{s_>q<|hn$Ea^@0so5UXvLalSYt_I0n~&-u?_EVN_cV zrGPC0CKJGLLDbQIlq$^#Y6U*C8s};^Ww~HPhq^W5BA_1`JEmE<dgth(861<{&2T#d zHWc$x4x`s=qk_Bg;5a_lI^O))Y0^<DN%mv%kcU3V<dUJiUMyP2arWFzicUS;t2*$x ziNiH}njs42am3XKMCd5k3w$X;E3CE&)y9Zhhbf|e<&mU(hpRM(1otknC-_tgZe<Pv zD0Us4W#gq9PKjyPFJd3L)GAONf;%ii01_LdJA}KglfTaOtV0u*7L;XGbEtq73H%`s zPo{RZ?V80cEOktVn)Iy1fZd`?2}x?=FTGtX@Pw;Ry!2XA%?eY6d*Us(+_pv;Q$Tvr zss{b2?OAMa+X*uh#k7hk7cBHzwSZTx9C0Dwo-7q06L)QUPc-6f0;&z-;N==8iQpvW z?RU6h#(EDVmfQ;(5*XCh1SDGVzdu#tmu`{VFn4B%>f11r*PcTa?n*MP4lZ4|6EH@w zw%<yJ+ziZdlMwmo&;bzWTFH%&tyh(hHLX6hF!TZxo|eHa^ScfWSK4Vn@Ak}x!EJuU zN3!M%M5r6EQ+4Uw;09?nCQ$IwDx@irM_q@)l;GI!`)0zWKnKFd#%jkMH^4d3HZ3{n zl1P1J<dC4YYma)Xb+O!E4w>w^(w_TcV35%07)bkV)MTloja>sraLfhzS88G?!&Noc zBbIQ<-I*Xm*^thtfi^tBtHsf(LuYE{jPBJFMpuvF?Bl|rM_><a`;v!b2WuJXj}vQ! zsivUk(e!e{ocgBEA*iG4;VVQp;sz6mT`SbvXcvbhOmZ4?tsaeOpG6O;?NsE(z`3Iq zJI}91cR(r(N*|n|v>+Fz0D?AL#H0nWA&jn<RFi)+Ch7Fd(Yb)Gpa73OwOfIJT=I@q zht<?%LSrRekfu?FSEW-Q+pBnXv~7HrYgq?<BV4f`%1s$>_{fMJ^4G2~)-)87;f(=M zk(lv)jw46w?lgCz0EJM*IB5j1vlSti4WhQ5j0e>h&M*YNL)BE?QW`idD-G_EL_o<n z{wES!R@Hk72tE-oPc>}%)Y)L=5T64ALa#Mh>y{<1w^X6%<*Z>lm?)HV*{twf`@p1R z<+hBJI$S8y28hW6Z+r0?;g4ELeM=QigheaVt#+VOb@agZ0@m>f+RXmJ(@`m)(yqf2 zIOC$-2HhuK%+g2hIf0<O5?g;%eT~em+C9Wbt-Jn+<wzBK3+bBBGJY*fFQ21=ucW}= zzQ|QHMb)?Lii;Z0tEp*-Ix?-m=u{)(N7Oo2LudG5aO)x2HU^coFfB<_A7HAErGK@q zY8*P`CNs-9xDu%d)_+p7JCM+{RN<7P1T6$Rh4@9|jwWJQW_1;r-`t_Ad-J{8T}RyN z--l4B-lUp{Orun4s~df)dgfDgo$KC3Z9fTU)XDy#hXN-Tb2$rYSXoY^X5kxf3bAA8 zs%zV%I=DopOy`I(7jkKCs~VgaaNjd{*5|&O*x8>C!a*oR_l@IyU6?dy5-_s4T7QOR zMDy)IyUC{4J?25bEyB;MCUM&Z>a~gCjBt;_>)g~zy(!?ewW_mJ^j)k;RNd$_78Kq! zY68$9WN{abh{#l-0Z`e+ZUI#TV=uk{=ry(SCyE{G;EZh37I<js#tg9QTFXAoR~cwE z0H(LYOoc$zqJMShh>w*a9VMNuRq1X!7nU=`jg$r!+j2ohsL7#hFAY>+=Pz`Gs*eK) zpxHOH*ZMKgv_&_o_qB8@@|rEv(!PE|>I#_Ewz$xzkHOBwZPaE#X4FcU=SD3fPP(4U zBa=fJ5rYXYN(3S=Sc0)+w3e{-Xoe#ZstBt{_}hn$qz+#EYAqW&RCj{S`^4HONvvIi z;AtrJo>FfONExgwM{x~=YIN_iW=+~dj0#65SfY#ER_f5tL6HiovbuMK`^O*&qGK9U z*w-ZAgBrYKl(^nI(J4~6(UBE^PJ@7l(DYcXNHA<?2!;l<)*G&hO3j;^QW16r*N{EB zan3L(?e6MDKu!;ElNcg(ovOW^mTJ#Mdf)}mTxfEQ5jLFuU_zg0ST;DK?c0_(AvRGs z=1=@v&*acuyep_a5tfkV)o5Y$<x?D}8MG=QW++&6r{=_OZo5%$(Q&5$lDKY6fY;Kk zYdMw99z8qe9##NGvuZ9`%wF@3RN%JHDF(?guVPN6-ia(>1Zh;;kjJQoGa?)gRZm$# zVNj#U?w)t16a8Bk@MlylHw#cWJ4j(hd-bpPwr<0I5JKFV;G$D$2p?Axvqym4tZCbu z0$G_fJxD_cslo94WFg*!j6^3Phy%X=^Uji5wUkT*Yd0{oi#E`YMAfBWB6;Ur%7r&& zw6v5QV!6C8M>}p47L<Dye{Ces1Y&B5+w$C@bilSB>WUeu=_pODD42bGX7yewz?71; z#CK3FvygHOOD0f;z%}T10jZoAl{{9sGn>^B@Y|r<#9W(wtJa7Y!lx)6g0v=yS6x5T zv`^xhQp08{=#1eI4gsF2a@SdLK`Gs9J<4H>xF|Cts+Y?4Oy`I%V`+)<$VE1Mbhg#( z-a!VswWKs5fqAe<lOPi7rD)f(j^S%ODMh8!_tu}Rgl{9AvqXs56+$$uz#~{(@%7f* ztoEhSvBVzs8uWx#GS!QM3Ey}C+>wvm1eK8lBx)@fG}GdxVPYE@vr3Jnomu1vHV?S5 zThrD$jxW?PWFWO1_-~%-1hH`#27=)Kf9<XT<!oY06bQ^kZGlp;@Ay#3=1O`JFX66p zP};iEoupPl9vI=Q3lunklE<W|W+_=?!Z;_=f?dMI&>VQW?;m_IkOb#Q@pU<#9<=Uo zqtW95R7b9goZyISiW5XtC(nzy5LE$Y{KP?zlFsjbK<hp(^<*swg18Y0b~zyiMf?a@ z4``?5I4s7k3EH#L%*_G8E=i--9BABb+!lvs*N#~Tx|!!BY^urL90D|)bKk-gC~^+o zM$j|8>fk=3wXAg<YZiwjs@>FF$b_>^v%Lj5t7%On98bq39({x*pvw<qn?b2nRlW!` zA*w74wB-AVkxYUiD9))j-hC1&ZCFAJA#D41p5YgK5t(tU%}<$UsqWPTtZ%Atq(1fT zwk{XPsY}5?^k_h2RZh0~Xnvf9aDHEkngW)9;vtf(XwZgaiu3KiC5Nn`ylxXY0f)9p zo_R1IhNYWJY~OtEX|-5XlMO^qQ2s8Lm2^`-3UG0wlL8z*wk3`waMMa%zQDt7hoCwZ z?BFz<yLQ&y9QJfs@44C5zS|%mpL07f8aNBYZ%4bj_TNA=yxR!uJl1Ft>VrZ9AElJj zwVBoA01VtsD>;(SMhlI};v2TT*NRoQ(>2cRu35utFC*Q^03@{yU*ByVI0_Nd3$^)a z2$at9u=H;T4Qoax^F2$MCib9hb!&|FvJ$*-)oKV0#G~)fZ&MG0)_o}PBw3Vk1q3=a z(!R!mD`?xbm()q74ssO9U4;NJ4SFIPV=$1*{C1dPs-qieOo4S3ygGD4m%1u&!&=8G zcy%lEAdhTI1d)m^zztM;ud<aeIR1MWt)7e)Y-o1BzZ{G*Q_>jukaPuh;HAS?n-d2i zK*KNgFwF$QxzjlojvDD3P{%Uayh{<0-0h6?a1a_+8Rfaub$gS-@IV}Q0{2W1Tb>xs zTLqdpR0tEJ`kp%^70Wh{0$vJzP%=!*tY~>ETRm-hL|mvU6LqU;)Td-0v=oiNkSzVU z2AU_0v~5%COA=AgqU%VpW5J>gSN&+vP@rfETa_E!)A&Rt4t7vZU?d^}v<^izhj;?g zT}!UAaco))0EL~9W_HcX6iOEKqeI6a_oz`qIv*UD#(Jl84`vi6QcxEPGsbZEgcH*+ zwT`YaV>wg}m?mjC>GuMWs_7S$=riihW!JDZAQ_~s=Cm|I^LM(!w<psxonlWoTU%!i zwSq>nNYj)#?GvW19Gmz}>?CT>Ts69@1#x7fLLnr{ad5>TReMm&z?n`k|KgE2UV-oq zM)>L)fi|TE@p|%23CwQETuqJGEU@%z00f~;D71yksl~~3honj9unYpoM3vj}R!a!F z?&cEU(UIOKk0{#X=*${38j@sfS>k#=`i3~jlCnc~AcTVl?ULq%8?m;F8U%HFc7jt5 zN0XF0smnaKq<5%WmZT9{2Mp;$1UYSDypp~9+63Kdds}Zw!3??s;w(@Z3Z(dvxXeaW zpSC;oQY;5}LX#og_FS3Nw0H-rF?&)glE9$TEV8dsJ`x2RYPWScbj8u8?onS0Q0+<C z8tnj-DlV?`yu^`#I(8B4ngy(fofSHGA>=8gYv8JWM65iHeG|DzJ28c;XGV!{+O%x? zMAE6>b&k-~$H=r=v@MnZl3r+1c*&=xmfkO6tJGi-fwSVq=TtZGZd8rtB=KsrxtU;M z&&ecLqaK;`2@?);JJIR5^n{m1WC0I%U0BifAnsYv{M4AZM?EDN`8u^VCC2aegE25o zPB+R+a#K4LjcbkIB&lQWX%!Zp^VS8T)%3mT%UJG}w==kToSLvbB-TcSyZ)wAcRndg zg5|)`s|nR;bZ?-T4SixYy;%0axXU=3Tq<_xaS|F@h=dc%mq_BR2g6#uS5dbWHdG@L zR#F4#ViWh|j}-ri;4CHu#Nrf5SxN4IHDGC3SnC^m(nhcnic%W+MI<hbZE1a=6d=~b zPEyJl!D)DOyQESNLpM<rX;3HM0q&mz+ZP#JE;H!@{OE@g@R@SiLy$Uws9(=S+!#;- zg}#>nw!&~?4*%e^hti9n^foFAaf@1=xRZ!GB<-f?2@WWQds54KfRzl=UR*-q5Cgr$ zx87A<bqto4S;XamY$)?t)He*LoJ@8p1O$btrlgf4FP+fYCUo)brzg=5lbuyS(_c&V zHh)5?LL5GMqJ1-jgRt$7X?Hd4hZO7>KJy^N;UT73RVb$5LaLq)S_*u)MXb3Aqpp8I z^R57Z-4hzO79w4?4v(^Pwz3wm3UAHVr%m;y_q=FyH{@>Fs8nJXKu&bSst%Z8T|^A} zegpuMHV1)xa-eCY4Q{Hfw6)~EOK($>5Sf9zUJQd*qwafH(?(Zr!y5G9j!F}HwEY$6 z+{m^%5w&V&KVA537~xqwRi`eR<rsyQt2!*jA*H}%A{lz_Bu2f>4T)!WhRJ!vBJY0> z44dJzui7q4RfZC>_SdH6RCI#sy{ubLAYGf?@ah{K2)qc#^d-E`XjIl?Q<&OgrJM~z zz0=>WJq<rQn(JaeJs8_=1Sk^egAdh?%9^rBf^x6>o`IDr`i8v+dNx?_`CcW>oKfDY z4B1kb;($q4{6r`a{_S`2o6K^Njd&FeaD@7xN$dBps_;ul1yfDP>dmEwa*R&kNSA*+ z)WcSMPED=DiS@HK>ASD8?U#>5N_uL`zewpDW2HNz@Tn$IUs<L4(#Y4QG$OcB?8$Pa z6G2-{&GD3@I%u;N`QB|m*`1E~)-y&eSAou5gG2y9pfRnR(t_?WL#~#MIh~;HQP`xB zY0F5{+)A)3a--5#lEpe{t&8hkDP1Hu`pzDzeUP>qPIooA#yvyrte1CJvzk=TmJ%X4 z+ZCh}ac_+tg*d_M;@l}~aP@rfwrPL3ax<BZe+o34YAfrZp19;d14&bhWEt5+YC<*$ zBKS{aESwg4=Sa<C*&zO8`yN@}EY>G?Z9>{FVqOE}3S@0I-}}TE;?WERYc*|4PeQ;l z!<th*Sb08<JJTu2kR@Q^Rg^-!Ty73VL!<iou6}^1GTFVeh{xb$4|Y@QQYUBv70cWr zj;AbYQ1i1}YJ3JUDUu3Pes`;Z(_Jvy+KQH4r?7m~r`AR`xseqo8#}{AAJp#n1fwzX z)1Mp$Rs<W^=%#ktJ(<>tKUmbKQPWtrDK|LNI2;McxY_}fp4(>(l6%<pdVi0jyI8;@ zZ<C}3EGHmwcI!+hZ)jT$sjws~w#iWY(DXP;ePmmLE(3MfWVtj}K2lw`RH)Y!!#lt^ zLnJAz$~)uzB|9dkS^-ePwKgo<^=d+xaJzF$(Y6Jn5~Fw__>gu_?$FmNJdG8}>UgD~ z!Qt;)MO$g;w>apdTv6m2te&;@%g&-luhbwPRC?82zKG^vMp2Ed;oXhAn`h1>;~5-s z*GS7AXj7vN^oGzY`cbXBXBu!(-*(ry?aaYz&you`z~ZK;S~P1y%t#9a`*>N4hD20| zniYiVuVpaQwv(v-rO}~CdZJ9aAR;d>wCc0pN{wufwmp=r<%t|*s*vx<=;R_!oSN#> zn*k=W0Xxc0XTG1>#IJ~Bwd-SiYtqjWf}>1GfOdBlVUZiJFGoKc?W}#wTtLL=Hgz>! zC?~!)kSbV#YQJi|+MX1m6e+@9LSx)hOz5e0qT){c_SY-?-6u#0G?gpvs7^f)TDJ;B zKO{$c@HtCJVIwZLr*}27+ny=AJei2vbpU2@Ze~ItG5=Tr7?!OEq%vTjqO)FgiZZ@N z1SOd@ZV%AeK%VSRZ#7fD&9)0bYSgaBHK{cQd&N)!TT40ZwG~P^m_yELY7tv~Yg!Hq z#3iQwjSaDiq)Gp_m{l_!`|82SY^Z40q0Qk|WJe<mY+JG{$<B{N_PE6`du3?n=;$C5 zJ)lk#xC%;=Xf0;6f-8Je0kfJAZ%3z*J#d_apv)ktMe8BMo0<We;sA6VI`5NO)Fj!% z;7wq*+iFFUlbPIFEys$X>5%+^Ck*RoJx<k%Qai{@2sj}LVP3B{l4toS&k;!w`kB<$ z`1UYcc2-*DELnEI?AB{eHGc6S;)PpMkP)z%Yj55An8!OSBBsQm3{y)d4!HFOiYpB? z?j}6(j8T1K3u+ShLU*%7mxRQCRZ4wAG6$H*leD?K(`HH4knSXE!E=M6v>-Za$*qJD zilTP31O>!lV&%lz37LE~o8MZBUoGYfk{oMmvzRvCF{qV8g08L-<)jj!7W5J;WE`YW z^mIBpOinT~ZK$rUauvjyi|Nv7Ycnu)9%@2O4r9Fsn|s4+HdXqrPesHXtTUbb7w+!K z*VBr0QyYiGI8R-MgY(!EMz2;kx~}bJJpPozC@Qmz0_Il{LB?YdOQa~a;}DP0P9{dQ z#Q|R)8WzsB)w2hn*+WXO!zyGVnR2a~tdOd3Bx0=04#v)dzBu={M;lqM`qiIQr^kd8 z3DiT8UzE|z;f_`#`;K}5okOUZlX|mMQmW-6%AQCX0zq)&v~Y1ZJ)=pR2yIe@l#ORR zjIo<&^gjiir|Nh)nfS)YdAD~2FWWNnTIDNkg<>J?iZreD5R?N!SXy%5@Y4)ShBN>u zR&0KovZ$)2Px9C{tfjrV(D3TEfo3ju3WA@W<l$ISAnBb0Cy9A7W(4!7?Ln%H?_N{w z&InJ^hOb*pR|W>7@_LJw1)HDm$zX;(dpEKuW%uq0Xf2z^C2+$THgE6=P1NAU3aCNp z3x|e;G!250?)4eLW`-f~%Ss!Tsb`b+c|cp#L*5TF_&O*?6DRzM1Y?xhJdye`koZ%A zx`<TR6E15~Zv{|NffZPgRGJn`O@zIh;jS<Vn-s1(>C=Ru#JVY1_7%={Noa1=Il-Fx zrgLb_tjf*=ZR>0mLl^?n1a8q#-Y&EZy`GGqM(As}>aH`%#Cr8%I$%&W%4HTQ0zBAa zthR#mZI3psG*wuMCJ?nEuR3soXwq>v4_unHQuTa5kw0d!-QOqxZ@rHoIbQvaMTqk# zl=H5>_(x6<`Zut314r-V8*UTQ!o61QgP_|GHYaebU|QhG+hg1N7YdmcQ}p|3XU#&@ z?%mY10n;fY6(e}tQ>B_#Nyv8L;FYsi%j2^N+)a(9*EW)Ubmx3AflW=ETg`4_(!{f; z{T<B8l8+2MijPz{EyM`6k@nNI-)`g6=KVFHg%E<q>T1Tp3350U_W@NM<3G6kBiXcT z<8qH!1r8Dzfk1aD>9X};r;rnMyHmuhmJ+{yt{c;4sbR8zWbL}GeK#<gY)`I!>0U!B zDFh@oT3TW>^4dzM3{(}u)G(-LVGWs0e5z+%s%|5dX4c?tBN`1!7#)1}%t@@H)qph@ zVtr<VT=kUq0f_+bh*#@23kjAcBCH$p9O@_7SR-DUA(&My?Nud>ot%YU^QEQ6NJ&*o zo=sM`Y6WVHq=FurHl{C5QGd3eJBAc!3kEwOv;xuNQGd$K+?fSh0C8fI@v<Sc0NuIm zQc5SNOox>|E|l^QUt|-iLEx1_V8$;Hmbl#%G|eoemZB5l#=2t-Oru;K^yH`I!Vuii zuTejuZZ`iVX8rqU+k$#Q)VECYo;UHMbz@kTiH#&-9q_KAhJ=m(1g<31vGzWJB;bjG zrcQ)f9(tB6^*swh9F&+hvD&stpd4poJz)3QBiMsTpuMwL?`YJC;C*1<!^(m!&~%t$ zWG7Mh`PxMZsk*NwwYMP-^87I7@Ccm^b!m<6?Ti6}!~?u$Z6DWJ**pq`&6afPH&Aqq zU23)-WDvS-ZoidF)I8yD4<ZIw%?Q*mG2N_y-fVgij<ewrL{XS<twoSG?J2hFsgpfb z$ww#=_OKOPChP&>G;ty5QS-UUgNh-lyElW`?Y$;m9~|SVD=eBu-kS8;fa)zd3$$2E z!cnbnuzEO@M65-hP0US_G;IR39Q2tTe)y7tFGhe`0&s0FdeVbnOQ;Ykbv2I<M)DeD z4)2JqxWI>5Xws2P*o&H%0B1X?00phS4glIq^h`Eo8d{aour)F`<`6_sTC|(md<ifx z^=i6TK|X{bDux6jDj=BO4><<BdkR7fSUu+_h?J^78o=>d<Z5PONVHStCAhnGC2B1( zmWbR8eI2DIDHbg~>L3U6MWQ$+2cyOl%2%d8AG-}d0TvHOk|HtYW8ffw<>u0g@o@!o z$B_htt9q96NbUh$j)cQd;O0=zCiLPuR@84dw~1BjNy||o7#_T^Zjz6Pdot-cUdT9K zn{BGm_N@|eU`4Ly;XM^2nOv-Nl@3Nvq*Id74$irCdaGRvO3~re2;7~03?rr;ajDmE zQLt*xqG3s!dW--3I4EtSC6SuT=IB=X_<ObVpe6}G(Vixm+TtJ~B9_tlx6lknJp`dA zi57vH0|%6x1=7srj=Dk&Ha!yE?4vr%EAC!BubVlXn(8cb<eQ!RY^NQj8AwbLW^p?& z7{TdgLFt*cxR^hkx|T)?6Ofwqc$!WZ5p1NNQ3bpD_H>)s%dd27UX9Xq?*kchs2b5g z2MWT_ILJ;$Tu8^Qwl|!?)w*t2S~-GfawSiCqKu7_<DgB_n#3ZQZBFvKb>EJbVv=Gm zb)ZS?cJwT2)Rq=Q(|jj*Fb1|ZDb@quJC#jt5IUk<=%T@RX7jB9LxlKztSa_i+fhBc zB84Fw$5E!JNum|SCQ+zc*J?u9%`{6XI5m$}`<jHcza9jWY7LwqhE^5U)u1=wG;jK- z2VJjr*L3zLY(vzfw1Kp%G0>^dNGw69vB;%FZD}_HqZg$z*MqM5PO{V9aiAGUt?+I3 zG;jHUQ#vpv+C`)K3R|%5P%|Lyr3<~0RbNjQB!@vNhpCHt@gP#XszkMePXjhC4R&Im zGI1sV8LQgi81lM|RBN-k`(Wq}6=FbHolRX!cTV@`CDC}vq%`S9AYuV?ENI2gB<j*3 zneM<uxq@blQ#0dnb<9CGypTsNLtw@RAuV}jjKkBXsK`7J`UIgw&>=|U$oSN2sgePN zIaqDFR7j-*R--A*8sjT5Y<-<;xMd+I75ihoDh<jJ{Q#HAxHGs$1r1fI(UlukQwQkE zLIHOdP7crtDkeC8t|uR=N*hsO-tyXzc5wE#s82}ZEGx>EquRC#)WAztKSLCZp3I!J zlCMn;-9W<F*xEAIiBB;sRQb=rDB2J)4lXRyKnBwaHHko=D25MV@xgZ~PMGOQ#B@L3 zoX?d;tjg&_1&thy_)v1EXLy(pnMjANt*&=6nqk9I8Km@b954t(6dcM}c4c-gQOCO6 z&3rz{LtBE5wPS^PLquqU#3~hQIfLrZ@6MQ4NV@U?B5`g)AC<T0M3^sMVNQDyuBnJK zZg5=CTRfecAj08P5E~7WC^E{)>`|~UBx1-dG%K2gRg4ZoItxNwO$?`#;oMjpY$@$R z=pl%cjfxpXPf;_w^%_lA6^Qltc2U+jFCr;P@d^o>Rv`?1J)H7@!xhMOFc6S-dIv?n zO#<Z<w2QkkkpwXf9+UxsP#$UBZYs5<eOS)ko?xrF5ujEz>$%(Gh)SBPBm(L+u5-wo zv&!h^z%>Yg?u?7G0(%<3=bAKWCd|2%&;d=P2@_{C+cg|;nLF=vNzsXe-k_ym7r6D6 z24KUWX&3XYH7a0BKS^=!>ZhFs=HDWVLTNuOV=eoIGYmvH3zDH^w>m!Iu8ASFtBma) zhOv3$mp~N2PE^pHem#dGINGmKu(hc`UG58Ppjzu2k%2a&E!Fhbu+Z8reo4194%`5+ zIjl#sDhJfgMv3H{gO3c&Bn1m*`i@4!Y1s8JDQy1aH8ZskVRvNO-oI`ei+wBk=p`MA zG-zj!t&l1Vge2O8uM;Pc?7Q+xs;6UXBI6{~bSHu=V(t!zs_+b35S;-zvb{nGgSU2b zBMIP*bl9Lga<p#|Mp~q7zzocEfKaoKd~*OIrQJ0XcmqAvdMkm~KdFZOpKyu7u_t^( zg`gte2pZLvtNQmSATg`}km!)MU6XW94qhYgowPJCD56V{n1og|4r(MC#=!*Y5tJdK z;gFKA2^uk?QR)GuMI6~1{J08G-LX%8!a<4%P+>A9#LDbj7A_9Vsv@8Zx95=+h=rgI ztM6e1PFe{Drola>Q+IriMxV{nuv_{<ML${T0%Ib8wXl^*N!$WN4oCBo@zvLg%GpYm zja;{IRnJz)Vd<KG-Pf**0islQvLu52HovD!Z{tX1nTA~MDXQtFQ+o+XVW`4F<0U0I z1);CZ;akt+oxkzYN0(?|X>e83*&&EdQ`01#0k@U!4NO9H#7xwRE);~RCZhErnTHDJ zM0GJNs1<Kh`>NDFM(s?JIn!9)RI~f?m1p5;ABfo1q-S;0(}9xy=(8nMZ3(B*-N{PT zO^NKrcmuSrhJXvK{q&gL^F|MIV!Bra1>4X)F;5QCYp)3zsZVTV8sMP-GBf-ztLCr} zvX@U)?w4{!UiX^t30W%8XVB{7RQ2hhY2#E!02&j`_EbPhT?SgOg=m%$Dg_$fr}H7Q z6j`XDJ?TIWbIsaTdA~g&c1v`D%X%2WS&$KGwiah@L)zm$xGW@tEAC^nrZthQ>2Q!Q zXKmQKf!EVxo+X2n>KaCk&<!lbB_arN(U=hKI_$`{(A1ESfQVT(Gzlp&Lfs`;Iajl& zz)XXOxjML81%XB|25;xuuIAc9kjB9?1FX-?HW%D3YqBuV8=GcSBgq<we3Af_W<Z36 zmVxov^&(tdlIm<w-%ZR<z))E^Wg0fOr*rMvLa3$^72}E<A_-O{k%z7A4YT+&Veo`+ zff)ZYviU7F>RuDo%2_R)4N3;MkEH5GtZi_H+@B9Uia##8yABN;xFMWEX(cUSRx`As z6H4Grnk6+z2yv@KoSIBZCR-&y_kpOLO%6e5nKd3~C?95Uur=~4Zq5Nv-M3&(s${SS zp)oCtA+&qaHe|bX3QdoI;upL6>gGlWL61~{+G1e5Bq7~i($>fOVyF!p2f=Bah_)L{ zdj&zp_O#k`is;ZpR{y&8$*(#Rk;p3J&}s?kQzp{V%UJ5CVkJFpRyx6_X~mK>-dTj7 zmo;H-u7uanahd=2LCwEp#P%sS{K*)ijuxxpL9Yn+-HbZ2v^^3K!a<~l{xuDeQ%}IL zfl^KpX!j)o?wTo>Vig4$ZhTm&!CKKn-$_M^u@Yj(Xgiu0k|t}L3_Dds>>g;`NiLw1 zTuWzEs(RE0R9SgELAXK8A(jI%izES3{)kb)vIN$!1zLtuXxjO{w;OcZWmJs33Mzxo z0S9#7U;?aF_<KaeW`%3uB3aiFGFvJGQMWMkw-h$i;gHt~V8}E>;S68Oh25&_bO3-4 z`9Y-hX=J<LN+Wz-IbO{XjZ?c0q^od#Fi#S~VX_Fc6&*7gq;?;zQ{1vijHv6_hGZ(y zm)}u$LMjyDD&ej^FkJv+N53OipE`N>8i%qsO$`^|S;^5VggG`0RjOGdrhWU2UUaWh zTLuxP*wQIxU>wCz)Kh3VT|X51NKtOX!HTd8fW%D|AF|Mv{Outd1hVQH9!jO&4O9SJ zFwm_g`o#8iXIO@vXo&!cqSFluSz_Of*PVb`cF2t-DobWgBwI@SJIK|^joHBo3)$s5 z6>6UUOI9S7p>81KpO7sErEu>!L24f&6>EDl*xDHR>%#Co>`wLRR<%5?#3bc%%2Mcv zSaH(tHD*Z7#IC2tPRU?NpzzeXIoEMg>_oKR9&Jy@GrE1z4;5_rsmPO72kgXdj&l{c zWxI-*njV1(gDxpC>y<jtWUejG&_PAo+n6M|l0O+H%9#XnOH`q<Znk#G&3>0>0MRqu zHlr($#zdQL08aIu$-b$zvT9s~Y^-B#8eT+Ith*Ldj{J#DQ4@mGB)tYYdX2;`dm<Rt zey!Xo2)rpvKDtEj_e8BIz=>OOfoof;gcOMkSZO^26|-ZMT8U8iHsyF@Q)H2-eVCUI z0yl!TIT%ofGi2%70{9^?J<zcZkW`%cMA}u)gW>E!n?&Dfw!Pm4vSvg-R9vmP-tC}d zEn?0uiSIsmb2&KeN}^TKKoEfMiX-FX{H&y9s(8`^aoP6xQeB3n%+}_1Mw->_{*Yin z)8kQXR{(+*&88Cav}*tjb!xdkI~z^pXvi|E%rv+M#Jm?q;I}#Lq*zl!>V6*7bf<{w z_Q%KJT5`1*Ig@!0MX*DiZrxETFfa$+i@7PsF~O28-u!4+idyL*l`sfOO{$1l&->_k z3n^k+o3%`rMZ|$|+j_$)!E!;X8mM9fO%D@<dP`KFHEJ@>q?a{Fbm<0Py^cO->Y9W* zH=bQopMxm1nAW6^Nu?9D?)=AifvTfZxeQDuvU|#<m<(o+yRLQZA{?-25rWnWcDU%D z1}h*Ci^p{lj6wUh%S)oY9@jM4o5xXhM^_3cv{pnB`xXyyybqZBF$}}@3wnPGcjmRD zKGfYyU}tx7A=@w%PEE<YSUZ(DXJgN)@6^pzO3HNu8cf_V2zCn%B~+l7%iOo*%ta7e zUUHnGM0MT>&jSwjwN851(Tha7Y}IIbU~|2+c8t*NnL~tR#1dcojUzj)S_PnR`{=2@ zeTIUg7>anj<J6W(5eDL+Ru88|5r3p{{MOn=&Q;o1&2((h6hZT<;B+^RY6qjgkcYYA z{%9{NJ1+BIsB4iz_LFdZAp*QVS*V8#g_H!mcG>2W%B@Az*2L<|N4THS?P3N60<hOo z9k|jSoeA5RX_L+(133A1^tnc>R4}hV6K1D(FN#3b*HkHWN|wb0b%QVc8p0zgKzT&! zi{E(n41+cS+RPoZ?#{)=VkQB7Q8@51Ymd7Or!I`}Hm{lebcI<+NZ57^n;PWS+XT+~ z>e933EkVOfBjj4@fn!-ep{^C{XZLk&0ENektg=|a`c;fn-qUShXiLoyIWLpQb@~Kj zT@0leG3w?)m)TlbG6dmG7%>{wy}B2iG>N#5Cbf$P(J(V|s?ra@+Hs*mP2!gZeJsd9 zmvce}r)|CFi7C%=7%)Ax%If}_Xah6ZSy|)zZdI>&gB7bI+@rpG{v=(}>QrZYnj0>m zAhldLP*a552@u{OXp_j?wmCi_p;=@N#mmJ!V6s<2<HN?0jq3vYCeD<mn?Rar4F`#x zrbyMKvCt(ag}`-5=WxLjgo?v#525NOgbCJ^?dVgN5Xw~*4$ZD7?HoQ4=-(B}FvhLB z&{sdb=X~uqB<@6UYDIW*Tgleg>C=$Kg(%&9vEN}*(Bk}U7rRrCcrk2xmc|!!JOhD* ziWDSFK@kcu)mQkkuphcKifAZTU$qu3q4n-+<BB4E`K6Dj>Q8YzrLLJ5B)RIgrI%zn z0eq*NqTo#k%^mB74@50$J-xbbh*klrD*~a|s2B|l5m3adf2}14Y>hl72|9RT5(57k zA~lTPWFd}BJ6tgmT#nUGKB!^@vWV1~=26gm=(K>fg%)|=Z8|!9ZLc&zY$<C@C*z76 z8Cy-7MN0B#iHLR4FEAR*Sig=&{o9p1U<OI*m1Dm}?L3OE6&an|RNVXjo}F$TyGfKD zLgNGlK=cAK#oOi;Nj3P=#X>(zfL%RFfCeThX`2o!9gxZHo^(Z&k?qrfc(lHQ>g=?| zDUdLXmz%0?O!TUlkz*;q)ht2eYuC6Ep%zMuUW=sHSC%qoh6JyvTpO@3`UkB{2I)bg zAT6P{0mvqbMdkW6LELs4@nsPsrd87vr0VR^JZ}V{&u@*b^F0QUrM`;+lfc;>s(NEF zb!xDG5-2&zngTc?9fKC?Gvl!8F)7-+Drv)}TKW%VD~KMW#xK+Iyu}hx6GGxh-cU|| z8`9qfWEbb2r~5Djrn>QMR>hG3Qev9ykyJWY4f8ks@k(txY;z&h)49(ibPgS_S+nBq z6|yFFPLh~4O9+Iia$J2{PwR3}*_oC+a1$02jVet=l)AARriO3dFyJ%2!Ksw0weG+% zWhxVnFvC$2_Ox$p+(1znBO+MQ=bFe1YkU_l_!9}FnkAEdb&XU)R%lx|$F{9>Oo1BH zhgS|urBNWe<2k{-v4YWGVhM<bwGUJB11Gz+9$og68t!pj(Gqd0wi>MY<Gf6pdYYan zvzI6B-^@w0EYNsXc9D32@cxZ{i-dW|cRCz!4~H$yYYr&Zob{{;&17`S%9nAklhh(X z=AcMb@={Ar6RLFodfxF!g%%p@jleJQY6#D{+17nk65c*`QI*^@PFJZFGT7SCI)0fK zMaBeRYhi$~UE=|hZtGDV3}6_a#6!ovybCHz+l4$_0svRib61V?`&^`#I3M-hob-jq zC}<3*yx#@}qt2niI<WmM?z+^tlD;h3(PLQrH*u|N)?#9y@0db-XTCk%^sr&A!5wny z0B(vLk53^Af&sXAWIz*^pK0n0V$h?>e@?I#vRXz;2Bt7+tE?GrI?tw_2Wdx^!ulo? zwTCb<rs85LEnXP}(Q|SO*evIYxXYTLR1#oXo?92s32Lc61n5j8ai4*+72tmOQ{KZY z^|k78&)rjDzA@S(XL^fVBUfN2t`;6a(Qd38#Aa{mDr;J04;#|Gs)=DGQ*sKN=GS>w z&82FU<&6}Ku8p7Skn*CqV?)KjjbBVEY|0pRzJT&%#Am6}2|L71(YZnK&&R}0uUcqu zK2GojuNn{QWmj6&*Wn<gri|&EL77`a9SJd>f|aMvS~Vk5X`8S<M$;gk2e$_6;>7~2 z)hZgztEuMIN1-0%8H>=5O}h5mS^{|9YEvW~mH}8qnw(Xl)@F37QNa|r^Q#9f)~Cn% zkgUa>hR9XLAnLUZ9ucY{W?m}1%dDiSw$cixH{I*uKdVHkL1;Y*XWYcZ3g|6_FD~5< zOBi(HTSC^gxhBm-Wn475Un#ooLp@3C6`$rqH&42-zo8UkBeXkS!$Q(Unf9jDU=@9n zeUng*9tG+^Y8DcuPdJ7j`X*4!XM&QBYZQT?b~|;o;nH}^Y}GqC&FPz2ZP<V(8jQ7q zXph+yvnT;j@zfuViJHnS%{-A5Yr$eQOnh;8yA-gq!?D=A2<4;~AMQ2O9I5jH=(b<O zfiOR6(Tk29p2a+=xp77uiSSenDg^bEG0BK5b?s?1sjJg>3e}{I{k60B1P7uy3MF!; zl2l-rNq=&g3o&elgj3pgH13?Uqe-n-)Mfj^kXliz7O{S1X<{g7cmIxrX+7iLk`orb z@V!&kC{!1UI3-Hu3T<1;>Jq%3RXBWJ(|Y5$9bu!$CAX`+;)u{sbJ6U`oG|1HjiQ!o zMAo{QE6vLRXw5daoqWy8?m^oFF2t}Kb44o7LX|Q=wn58Q`#tS;FdDWZLIV*z+E?V5 zqztKypnMV-3XD-LA>C>ODwe=G(6d~W7wv_unLA2RszX3}P_sInPOU8p(<paiGm17f z3!a8zaCj&)02v#zl%6_0^{(=DX%4}WkQKON%j~8v63!aj5x@6AMXo{agBI<d=mc7X z0!|M9OVpL7^6?QBl7_Hr&+7po-D+@al_$q3iBWg`Eke~)SnHPC;7HXbM1h}z$Y~wF zbf-es<ZP(yI8UURiIcB5El5#oM2~goqCaQ7m|&^D$$jxHQEDtZh@goxvJw$-uC~^M zu7$K38h2+$c*xu~!Eiq52V!$QX=jT}R%Iw11iA^_gGnT98mJzIWQl9<C^A%C8|dLJ zA?fu8%5-6iMcXPntNM}>?Tx{_JG$BslbUo{V>jRyZ@<ZAM&%GX%dIwLlS9zt0CgYx zXsxN)1gN;<(=sjX#3rnLsY~|&PX{vL)nbYSWd%+4wA8ks5lWN#M5VtMiaMtgxg#3j z!D<cLcpDI_7&-0e^lWZ9Azg4YA}P~|+EJ*DVJaG29+kseO&2%3^?>bGbXYSyMn$## zr7GOs0S2|JX?r;)PsrTTyryVy1pk!>K1>0wPYne#?D_^efWb)Ic%T>}YNlE3llTa< z)+PK+UIvNN^ZHbh7KDfaO)v?*L?6nwwACqYu?Hq>PR+dQf<R3jmUlr4PCIg<7OdCM zLL-8wQ&T1bv7NSwJbmlw38CtYoWIdQV962@|Kcttcr|+pn8ItDEj5!Ql}JarU=qS; zG*~0&p{q3MsjMMZCG!R}Y^~5JkzlKBPkT12yY7NU!k0w!t_f&F-+b@gZsmT@6TkgB zueqK!$sGK3<jQvwGnpkvt8x;-QL>JXzWucEq98zV4N>*WK4h}d+Sw^j-a@DmCW3Qc zuwjsu_0Bqs7((-w_v+QQ?fd^}xF)QWOnQ|v3&luY;h}DrTvy4T?z(15{Ul{^ijKji zROA@-&$-O@B=13OK_{zWf`A5?J;oxYs`?&@^zpcQtQ|RuS51|gZ)rvdhBP=-K|{Q` z8BhagXEY&g4<Q%B9p2?~r@02G0VyAn+EBwW1D!6#tXb1kxcbF9i;H?3=8n`?#gQk9 zaMZ{~e*xlj!s$n$aFP$es=$pP-6UX-b+b8kKAofL26|HP9%s)&Gdawp6isVXiBz`} z0#TIQegs6M8P-O$OzB}7QH>!m&!hlh18X!RO{t*0xSi$bZATi$(OJ|lFxRd<&A~Ml zY@t<!MYAzWkdpBu3xI5skd}$#({9;nA1|FJnd5TIDbW%ia^QqUh6vrg)EOQad)w86 z{)TPGdvYDpDnizrdibq=t;MB45uoRmCRXk;xKWdKku$YTn7VYl3LMSDp4)&VCY$7g zBuK=Ez}dmIt~K**Kii1YaM5y-=9_9@wPIN^>&XlHk*k(O>akDJ54o3dJqW!#g%qE( z?%;IYp2i!u$%ZZkb%aR(S)iFcm`WR;D-FBm@{LMXbsvB<$Opo=NhfC}y1=zb*z_P% z{02}NBODY3w6!xW@Qbc-J*+P_j#yI#LQ<ARG{9?j56GODZQNN{Ox8QZ#t4XQ*df_P zi(vOS!UM<smQw;Vq@25csmG~44e4ITju>nrJRd3wZum8BSe;|lV|;qn=JZ;-DnfEn zR<yz7qx#_1A>9UKlm;s8vFS+=1Gap0m+Kx74;;$c4|m#ETJ5AK1y+lvWK2B4ho{b= z-@&wDND^v-woHDGqT>b9lmJL#J!>{;GCCezYMpC~W1W#DWnxs^mddJlF{vQh(1#?{ z<OkDt$Vl1(%j((0ETFU<O_2H&AVbT0-d-1iL4(|`#P+sOrgqCTlQr-|4=V60Y78D} zPumKXcSJoo_IO(eV#7KJk*_zYS0C9NMI~@Rdsq1#oI2VS62jHH0hKO~p#z&8Es-hh zgsWLXXH1pj5o%zG(+rIoDIR^soGMfTaQUH1l$VgyFfw?f6b4x~RiDMLZwOkhkHhH5 zz|cB>x(7WfQl!*bFLo8^waYWQz9H2;3^vrH!YrahMlquc@?kOOdK$C9R1?%}!?Pw? z$%uw+L|q}NOREhs3e<+RIb2&~bsgGe5DgfJ#fr4jv)?Y0Fm_=#SE`puPFxHA27}!q zP_+WR^j}t)B-AN|c<9;^Sznb9p=-9bw<bLyCU?iox{xPTsQV#QBaF1pQ)U@Tp+IiM zs|Aa8P_2h|7)KPoT0$-g)h!)u4MeRL=dO~Xo!vo$cGk3|hFxrCD7v=Ae-I$IhyK2t zj0wTAauDuDNpQa$269Bs`Rs@iygRnnIp1qcg|3iJ05W6;a>)-h(vxKkwm$sHR?lfn zg3z4<G0xyHj)$)G7O5Wm6%Si;!m{>&Ert-Zk*Ral`GxM-145v(P+{^?kTXH-j}Ml@ z+1-w9-D*dl$R}k)!V;TW21&xGVq6{OopUv4+@op&3138X?<)(IqxV*%4(a==3p-6} zK^OJTDfQWL=oTeG3kDIK*#2qQXZ!0?E9LNkR*DK;P3xzV6;}7%rhfYtpz*AWs~S6r zJCEHEGgB9c?%LOgQK~p7LB*x=z5Nzq20`FtrQD69mIZDQk7YF7P#V*reR1PM*JIFd zy<?O{Rdu1CMqVXd8`K)<x=OKbyc@{kg|)yG23^C`KbqB100UsJ<Dx+3`V3CH$%15c zU2SAFjc96P2UmijvN!OlPY*#89rU`jWp`1qlb#w<kB^*_89zx9<`HQNg9n-#T@E=C zBaD0<@dtc@z)7m+Oct3i+wOVMY9$mUc*qf($x_~?xLY9%4$}})N8+UODWphKc++VZ zMg~a_^?EQqRke~D6V=`tnNCT`YF8um_jZ7yoA&BKIbB{$(U1H%iZ=C=2z@s7Sbt7) zq}J?iyI}McsV>^RaEP0^1ZY-j*qvVU8wFr0s${0Ivq_uCWmD%Je(|r)nDD+v(l8M> zcjC%|(7Z@F&J88OsEJFP(q?CtR7;aa964(mG@YINv2|XaS%kC2kvR7+nDnP2`r+!A zChcxA=a$3^Zu*6=+0I7$D(YKbZ)}Z3#387zLH?J~+u|f%zaT1fbZG^DRd7!hAM>&@ ziY*RgN$jOb9s<xh`>0ZjR(!kQbA1`&Y_v#1)kZiS(AIeyYZ<uKmF$`fA*&mJQrM7X zior(Izta|YLTc<5PDmQUN3^D9d~lcOI*H#x7QVf7ZU@-W7fKOPG7FQ*K+o#i7MZTk zQ?<!XY>390Se24}9h{aRwZj8ok>qvldRFmNRkrgaxqC_I6Ay|)TSwVj3Y^D6(HOd> zSikJhDX<vSjs=a=x9_nyb)3Yi_LLztcb1e9q&uf%ZF-o90cc|VUG&pONHS3KQW1>x zm=EN|jDFq%*iR$$v`I@gsi1P)n2BV+w$iVS<Zq7!$GuH~>$9oLt|WA0e;etSO)b?} zr>1c-CQU)vS&L)jg4C|5&}U0yZJ3!}JHkV2QtZ^)*PpG%w7l%_eG_U{e45SNwM#M- zNYK8%GAwvI)JaOB;CUrYzt(v+0CnOZB3=VD>o2bxP)Dm<7pPer9lR2n+FAt?<r^*u zaI{u~U}m3abvwJMjn#>^Lt{E%d94#x2G^;bDKinet4Zq-ZViHdQdTAL6Ok`4&zp_! zGWfx4LvRB7?#a^=(W}Su=1nI9lOSTa7pZ7Zeu^*l#8Ze`(F!sM(Q3K=csP52v?uYs zSX$qq;rF80gWwYBSOg;l1@Gjs%|Z}D6twy`o~!i}nu_Dy$B?*L%ht~5K-Ql-NY_Pd zGL0My*Lbxn2AzT_7fjXMtzRRt&zGJ%C_9ZcNXgaco=VNGRP?T7hN8!o*qUDd+np2a z&HyS}OGG*t9J++;VPkjP28VSf@WCPINmnzreNH@k(}W)=-ZT??>J7sAO2BDAh{cIM zH5H#UT0AI}qal&c_WB$9+4}MqBaBIEG6U+B6s?Ae;Ud@SSVjiwGs8Tc5gOPqs|#os z3I{IbV)+^*y{LfA&OEOJzOpgjpb%Y_N^x_mP{o95Cvd9=N@yDde&`+RDhSM~odSw4 zoDNkGiFS&0(Sx3&MZ7jnRmu-NivBg045=w_z-bf@gKTXC9Y~k%gN`DzhJBMTAIp|# zO|>3(*WQNLAjlBnK}fV%SS;$h+O_C;9p_FPtT(xF&iMePcc?@lK`6tU)^w>TWA~gg z>(#bMMIf3D(^LeS?YV5#-5h;-Sh0_a9NS=40JFrrFb>{cd>88oYLX%e1E1(zE$tf7 z{_6cR78RWxp{5L)&6LW5g(QyQqyLLYdl6y8te^n)k+|a|oohmA=Zt7*h@mgN2Vm)I zQ5|Ur)BNrNu&^aS+k*<f?8p{_YrMi>q(3k<>A}uu@-+eA=Cq;v$aD!9O&8A4V#>Uu z(;R&bX_}S|#9l_t-`I%O{>;<;Hi6%6kxF}V?hMw3)im%$J8r}2s3pY>+F7E`!c<dU z)v1LEUFRfdav$^!=L<uk4AAU8rF%~HNa06%AW4Bu3Uik;pizYA?SVS@a7|BXIl)@K zB(~0~ZW1ARwU?8wi5g7Zs%S`yXO=7Yy$otTLD#xLEp2BL3j*bPl8Et3eKd5B$~0qE zbv-gl!!`@{Cee~G{*0T}EwQDI(T4-71%zGV&!c#lp%WcIq#Ga%;(S^#J@E*hOc3un zF*VStMMfvLRy1%phNy>aa!<-pECbqYtz5KL&qgHc<dV-Z^g1XU>5g^;y56fgDE;eK zpp3gmlQJr40D8Ams>0T&lz^4<BcLtSfA}}ynh)-zn{I1Om32(|lur!yN3|}vq9Z;M z($kva1A5F*-2!wXxKOsMn^lW+yS=$zYHRr6<hecs=(=8rC8Srw&Qmkk6hJOFE2K>c z1j(B~->l<DrBs=_&1x)w!;;}VY!G1sj8`+>8^A-6tx3>akY6J1pyBAP!p_Aj-m)7q z$VugW6zTf-D?;G_ajBvttbWsF{Sk77Orwm}r2F`s66A3T7FK9?4A~u6(9yxENsUIS zRR_IG!Uk`VO0vlm_7^cG?6nh&His!3M#oQDmst*2@uAEVm!#c6?twAwT<BG_avF|Y zeY*z&^)QM8JNxKLMt4MO5xZ{s3E~bdlF8koafBXv=-N{u6N6m7=AICPwH?zMbh}OE z6#<P2B>DQQY*^?%X7Q<SW7}!(7hJnr3kfg{Zg28-kp^_eRC1?2M^m$f1|pe9O|XhY z-J2E(p^*#1Z9^Q?*u4y>X=As(Pc})aZOE}#9?JZw({vCea<)nT3W*+q_8c!6AVj+d zAkYBeO~Lh~P@QXEqq!>pOJgfBwK=<aYxdFzRAbw?fXE!V*<@mEmV{B3O>vp<_2Ej9 zgf}{MHv(f(;gfYtz0?DCuE$MQliC?`68h`5X{ppR*m*irdDm}})iyi>eftcfIi;a+ z${Yfow^EBMAfZHyD2QvBi_+6nav0YmGO}UdfN42tw70b_{hVU_3l*xk<(CLHyuT$Y zR?9H>G$lq~l|}_^_S)>xYy=!X(o;S#RTH<LICMt<S6r#8)$JE&5OLbJYAT+{g06ld zOj>X_Q`UMgB0V>q%FV-gf~8xHiO=bHHD6iyKwL^2^R%@;AaKw?b;Xq}3N*m3KG60X zk1j(tZ|Mu8oZ8fCb0_=K0Buh%(DV8W2`h~VN6q>dwlA7wseNj-#^^38uT3ZewC9U# zjRzXW%&8aaQ?p;E5~A+A@Ky*p9?Yv^j$M1mCYRDUald13EXUhfU-VL??Nb4abth2n z+y^yV5Exj!5u^`ST|=3e^Vr@|nxfUQEj4>Sr)yt9v$mBxGJ&ma^$wv8F>sT3-3}?J zdDUXE)|RntLY$^NjL{Z6?Q)4~vD;d-rhWe+S%5tbI{z~&8uX1u{Ed<?<`uz4CD42@ zen*pTR2hU7w!P-}DqDmXCP$Y#f*}r|#pzNI?a)xqlW2EBTdJT1<`Akmxa}FAjp<1j zEd`VHwQ<TSvpNeFlMHiwqGRTE)>#U6emKfVXK&x~x<k^kJP8UdmyafMD?(%hZ10aY zCQqw4F@c8dos&)P@nUXaz~clyuY9#>0_!2uW@0?i71lktH1jgxe>b$AtU}WBoeU(v z!x%siNY;ga(~`Kfs)<%mo0dZ3-1q>o0cVj3)?P<llZSg<wW%^hWHJ^(+XVx?W(0?; zCK=tJ+B7wQJ2}w`G}FR0qbfBNF%82pHVxxK5)eusfu&XjbvIUD(Us$B)#*B@Y>KE& z)d)vhb8oJ)J9wDdLF|SOJir`oEj;xln16j6+p_-cGTXuHmT_C{*5Sdm78(zr8hNBm zKnRr}8^pEboXuv36taeORkG^Kq8QR_pY$hlRMvtz1HlFU_YqVSLFi*XJ5H0B;Njf% zmO2+;(KRBhrPVa6L$#}ryE>9P&&fiB0qe>3N2-5zK+5nqOk{GzCPqTDFienOwC3#~ zJ+M2pbFM96OJ-pqDQ?c#w$Fyf+Sa0}2J|~AD|QsiRN33Pu|VAU6V<@=&!Y-!*+bji zjDT!b&qVav-UL8ksjnmHQ`>-(A7Ofgki7Ldu1i;q>g`ho!3f@wk%%k_1X1Bq+F!*1 zh3z7mO7w$g26?lEp_^vcptd#Y3f%SSVW=FGbb-0XlZq@2h}dx;&LmMAA#b^MhLfbT zj;Bp3p2OEXwhJ|y3`Eecopft+&-G(0$%E^mpzyp(6HGolt(c+h)QKIxr$2#0(`VHB z3sotk<o#H-&K}UE=KzNb3D!=|XgO9H)FPM2*4^}HDvSE9TKpR9u8D@)SUJ?zN=X$_ z!7e4xle{%(J@Uqrw2NbdpxG_tR9!h&Us|?MciF3EaS)Pr8dBdLR_S|D^j}ZA*V~y) zD**a4n*$XmM<ZHoYuX5kb25o)2Dg@Se|cN)7K2@9dIYvdHQ^*KOUO(z^Wou(G`EXx z^<46rmI5etm6r8kc`0r$EG?3(#U}}?X%ZVd=#|uW3|LWjtSn+udDnE=*%eGX>)ChR zxmBTjWI?4gz`}o=1Jc7tpd5^{>geV$cT+4w(!!8h)7Hk?0Ny1gq~d;jf=kKh)?+FU zsl(uG$Q*^{8gi@<8ELDe$4ewU(NQN=QLEQ<<N}jrahcK5th1T(BbYS0_E}kc3*&Ox zm?MIGSIW>0@Ch57NUlv+bCqZIg@?+9v&%?n9mZC`V$4N#<{%$&*lLCnl~{nWgo;~` zsRpAaV%;N__iZnM9LQ<C;1DyvdT@GX(umUu!@VcP#tW#K^4@e1bg}H&q&uOe5mNYp z2}f3izurvt&SbTx(S|78t&I~C!c%NaA)vs^-Vv)ma>Ca`FElmK#|>TeO&xrpn^qD) zaWVv9xsb0BiA+zXVI4r7MNa-aO}AyyL4=(s6JDr#II-LItVd+a64ZeH)Tb+08{fuu z#aveVECop+9<D)bQ=R)JxC?qvQkUl$wzPtIhp#Sg7XkswL9)Z!yjY}44=m~&3PbCR zQzmetF?^Xd!AQQ_Tiwk|o`gyBYVJsF5MTBtcxhNbQKw6l;CC~#ia-kq9PTvnt)ECV zxjxkev`~0!$YgMXTm(YYwH#4=rq;=2YchV(tD*eRInGg{p@OzzN;jirD;zZ0i00Om zcG?9k80||r8?9WXlEnj`k!me?BZ2+s)sD=~Y9S;QZ>om^*Ls>`+T&2vOA?%iCj*G} zCQCK#>6#dAa~6oxOta4+IwcuB8%OY}dgf`)=<B6{#^r>*A&E%rQnA8~tD>Fc>6Yf* zCY8Ra!1Zc18PGt450?JWX-A)nQUh@_xvIbikDG?px1y8X3|$*qPjKZDBqjChNzG}k zm-9G!y5Jb#jTW&+8pL#IV{waNoW$+tU>^;PJcFccS~R@}aSe5T)T6OnoU0CNU3%K4 zoY5sr<Oy`^8&3S!KEc9*E?sFvDer)0ww(y1@2mA`Dh0&o!DiZa8Y+$d3rU^u6b6j~ zLY2Pl>e^|9e^f9fq>lzS%(HlgYitFjT>~-5fnqd#eF<pY`%BCw#@=>TQKQc7q*@3D zE7TmDa(0-sz_zD-a~Q&8kAX)0R@Ykl?x<`cSjkVS9xWGw5;Fc+Lb*GGStuelv2GJ% z0Ezc(RGY()*6=Z~Kl<yc8N(SBEXJ)w2t_-UT4jPgv#T)<ODk32k?K~uGm6j-4sxZX znKkW){s7oc>WaGwxSTW}db|RhxE18n$x!PilUihCq>Z)PX#Vm<N0x<nDQXT4`yHj7 zZjJPY$w>(;YtR-Sje6oM>_S3|#-^qD{Y9|pvY`^-z8gU6Y1*!yw(LV_`iaa5#d0Fp zCqywO$ENq)ZGA*`A^?)gnk6JB7CLS9<p}qKS5Z~X09m>=a?qU}Bf?8SqXJ<3<%asr zZ8@BH2@G$+W(9F73Oa_Zb(emjAvdTpZAjFdh~^L~Y_zO<3yC~yf|-CeTbMs-69BRG zPqS%4vDBhh$ePV_r(s8PwuS8jEcZ|fZ)L>Ns<kP;a0zI*;cdLb-`M&G)et(>q%l*3 z(*fu%@YsYH3@Z0G#z(Yv($SACJgEoc2;8<xV_+(CH?eUf%(EER75Lzv)(Av|>e<9Q z2!&G~sW1U~PH-jt_P808O1~~9c)R*ZRs@s?U_AoiOjb%@&^+l`Sa;QuH(rQ%RKI34 zrGHbR<~p{OA4r9=jbhR^g7VQDBD~2ARP*VQR96mE{p@I5`zhAEgceQ|h|_+tsD1S< z(OKglX<NB4LQBrJlkP0^)pWvFG)R>)q+ZU!`V5uJWDxOY#kaP7H#*dyc&Hf|LSVte zJtj*H+ddWQMY0}YeTuo+`=U0aKz1W#qh@uZJd^1rjbIM!k*(*`Pc2_-SxNu&qX)5c zvCz)CgeTi0&`JQHolx9dWMW^Rc2)vZ7Ps3=O0P(!m&2hk1+rw3h1F>edy42aO5Pcm zKghMKO|7`vmAu9kw92MeYdx+;5JHI>>1!HRIQsIixWy+A4qX#u)kEWI6FeZ60PXXj z`X=4fK5IJdE9)VUJ?$E<?g`aZ1H#jGkNfC?&xqEs8NMCMFk`dW(<u@=4SkTu_(Yn( z*Kl!f(=-Wo3f3?L6+uF{F+LFh7xJVFNw74$7eYyU7$m>-_%vK_PpOR!taJ@w_)!yx zP?M`xL+O<Brde^UEFeK~LIR_E-t#(eq;63Z2xG0SE$!e4Q|`3TH<um07N@OM=pByW z*As5-TW_%{GEeQ6!_m{}=W=bUBsgP`0d{tDRaS*S0MY<8KXaToDXC;w(h)r50upfo z_t5+h*EEcEF{kIjz=T+BTeus;ubmVY_mc!(9X)TSYJsl7wIAxHBW|r>HOL5+gHf@l zd)~667<xC>t+tu6brnExn%h9ujE93FYsA@PTe<^k#Zej7_SO&@ZL=}u>uG7yk)fV( zQqe@zD&1o%%BM{OyNLT(?;K}xaNE=}k|7N)lLM6_Jf)ty2C}M$jjv#{nwlsyw6!}@ z2p+|Vr$NuPnhwlPvk>;^*z`#$pJLdQ`d1YVt+%Fa^3+8mIqz95%o+s@A?TqaMF3oS znq@8ZJ>$I!3;<N_$Pg3AC9r9t>3P=+BJcX=u#qodS=OVLhFSJWd+x9q;e)2Fr|lr= z?x>W@=GyWghJe0t<PXpr5&2E(D@^@FTcg%fqgf8-`oul|YQ3NmrYl&t$x+f5%Y+(7 z2PYZ2p?0w6S8G8P<A!JuSY}Fqw;lHAGK`c2pR=Gwuw@pv$yQYXYF@J)&e_35QEDyx z0>3Ep0hX1`>DuwTyd+5w;YX;JtwhjJd6XT}VAe%X;1>xyNVGRVsNf|8`J-=hcU|>o zJucNiVdkC^tZtPw5XK&mf-s?KP99xxoNbi*S_MF$FiNP}oIG9w-I60SLr^oW1(_TT z3RYz8jas}|*|cg?)wpUFPjL0Znqkxzl{(tmMTn@w4cPauCye2o@`R{0sGw_wF*WE* z?w;1c-gef$j-hSitu-68CQkI4;G87ff83#QC>m(MBe}{(wcdn?w~;38W=*h6?6R9Z zPl_%pk=iB49+}v4&Y#2d5Ha^%s5kUDiAr4@tuRJ{VcM-{Dhl#cXdAUkqX4Lz_$TM` zH&RPq7)C1@7nM++lxsrH8l~L8HnVAqNXWw%0S?ZaQ-jh?W`X10KJT~C1!#@u1e3`u zy3mn~hcESW?`(8<`O=Qfk|I!R#%+?<C<jO{h~3AoJ5346^BNcuAh9v3*$K)Onlmnj z^DweCpc?#r>eQtc9)+bAP!LxR7SkwJ72mc6vKbPWKy6UA6d42a)DftA9)1L6(@)=% zyDk_hTLepH9vR=zZtn3yy6|>*K_v__-9}GQ0AoQw%GM09g0wshjT94b!ZIpw#PU9f zE2oejwi+Pc^49mt(9OIo5e83At#&xG<hQ%;yAEKrz_G7ds<kKl@pEV?N6g*#9XW20 z!t`@rjAs5Esy!4vuF;O8l^O@4aTSh^CiMtsO8SI8iP}Rjs^L$BBs*vWUl8kZ!QEyr z6r}07hpekR9lZINEeJ%cZRGT6Dy5q|tQdC1HUD}ZhM)<m)nMz<E^%uAI41^)0~vq` z>tM=l;<TuU&y55k9TCxybKI<x?i#dMRrUQ;VzAE&dk~klgs_Gx*)LRaX?eNXvC_Oj z&Vi{-s)#OzE=g-1{z0B{*QMl5rM&?Fyw*W#a(4s)ui0I-Kg`IT26b!X7(^PU9x9d- ziV(0f6k{h69?3={2?N*`typiELJvUKFl?k}!d@qg+7YRb6V#K;C3lv!#dY195bo7T zZy39o!@O*eRmRH$hxD0-0kRTCj#b!`z%2!6(V)(j0u;?;iej7lh<NohK!%MR2vD0W zR&C&>dS2J|2B}$K^kabDbtAwsz@TKQv)PL4E55=#*aU5~8Ujzvz5^AKO3I7Djc`~f zGdMO3qz$qNgEz>wb#Hn4Hdau^xju=%_e^ZLrf85nZwgEfqD1#J?8D2i=EpbOf;nTo zBp~hq30;J1)E&6!%3?CP<3JthAtR-n)OhqHFj5;;lcs1@LpNSc4~~4cOz3so@pRr> zAcFT|2)KN!8Q4mIc8h21tE$+6qxn!bc`2{H%ATunXxuA~6-9vzL_!A+gba&?^zgy_ zso3t8+r%V};A<9-uyR6^r>{I}MuAnc*G-bFdJ$+P&Fk$r<*^>sk3<}7XxP{r0414X z;i7piCUB~x@?Mas67u8-TpL1yB@JNoQ87@4HzByYucH&ARsd)g6&CWhu>#uu#_m<* zvuB}^eB&r#Un(FZaLW|H($H5I{YpyEcU)x47}C<Wu~62Mig=L{PH^=Dq=zdn;0a4+ zrWh)HuvFD<o?k^fLo+#gPOgBkYuy0XUIOAF>gKh%e-+wUE7pTTOSmp*;4m%}amqi> zwi2%fB}QZHPbVwQ?5=+-vv=Bg3xu7*66fsZu?+xq4H&jO>0-&Ol1M!y_vM$K$Ykqv zX+~8Mo?7&j(gp;#ts$5h5e+Sg1C-UKG78a}?@bl3Zfd+u9C{I%xIH9zE&ykSeYD%5 z*?QXWn-cLEMBP%DtUYQ&fayl0J8fdguvm#lEd{3WTr!DRp4OoPLOZRaGPLqJ`({kD zTA0U<6JumvLt1o8h~T&l5S$w#98}CHQ0T)lmW!GAh)7o?XiZ<;shJ1UGg<7e_AH^q z#I2)A-kWtyg@#wATtPE}wr|Th=Mj!`g8*xLwIfqqw5tk1j|HjGl2Ucw3@bb9OhdK( zinmuAz)8i5#%O<|gij|0J<}v{+Zk~kVpcWRX)3iIc|r8$JIfs1dPutv^3Jx6XE58E z!0vQSicnP{G^*`fCVMt-oO|w9-U>Hv2RYNUVxl&sjWeramQ__}&Gv?<mf-<Lfn*Hm zE;!pA6j=n^37dt@tS7Pi%9^QDd;ge7!aBCIElUpctYjY-!q**!Jsy%qv|%hx{kpK% zQBD~=<u1}8EMz+M1*=r7p)g?re^}-AcGdCJij{o!!Jjq*$`HPy-c2Gc2HacbdsGqq zV5-C3d<>@xbL$=`V0NC!oc8>y=H!bAxf(ZrVPpqJ&qsQMN_cAoS(y?1@F86_M27TL z7gW44I=rsSFuakdkJSc@SPjG2Pl))y5mGlWIwg}+i1dk~DMKO?^%E9vPcntJ+dx*J zZGV@Rnp7N~rlkZkD+xvI$fRdal4D_m!OTe{@I6|bmN0|ng<)OwSjPk!X2v&a-Rg}5 z;^eVGa01fk%0Zp%sSI$4%t;Jns>G1UJK(8vUT@uL&_Cq$UNGvAD0~0u)&Np4r18P7 z+17<Z_sH)(v+JqNpCVD~h&7eDAq+1VP>Pg|SVpTMvySXFv?6R-Qfrblu=YTSd>vcd zYG9PrH83ceC`jE%sDo&yw%sMw8o;L|CHie0DBD|}seN<LUDJg_+d)bw%(@dunlFZ? zwk1G{*A)fxQiU)}gPp+E(rax23W=&!h9hvit*V9)C6+i4D#7_>r<30n-2HHhjb~X4 zvFj5{1o+IVZRR6mS=t^XNyO?k+&e9U{0aq8skj$|{GAew$Fq^Zw=P?Jj(<CPP(d8{ zxU^Klcuq(&!@5}4)Z1Z<)0$XTU2mX330)@1O*08I0}uB&rdCVfbO3Ou$>IVT6X1+) z1Co#&3``j9`=qCV%hs(_uv~Rlzdm^ZcI!22QytnT9hYvR4j{=kAs^DQGT>}jP<;`% zRtQfR#zt)5Sf7+p0JPyK6VH`6ZE65^fLJJi-BeA4HPUdJ8`Z$ZO&z=iq#nU#EQp+D z-<D6j9&oTHSHd)!W(nLWHT9&aIjx0luc&2FyU_03%UTZu(EbQHY$wr#bO5{WX($a; zOpSimrOzXmM~ycIkcnhl-sKEu1A>>`oQg1UYty&El_e2SjgU*$%UD`=69^j^wF&bJ zWx=Y?5+V;Zbsm>|xiq93y_;s<j#$|UPAj!_(XE^UzkC>5o33|Mg1`@Bk^n?;`4=^B zubYbwvuS~t5+hL4ZaVeYq<+k&Yr3Gq3J9S=!)5oTE{!7A#;T_gL=J5QEjkIb@#_=> z8CI`=l81IfY%#h)hEhy;I8x$*%j3G<P@uKm>ygO7K;3nrN?&=a9t}3v8P&B8wXF-~ zTw<VvGp7k^PjLCF>yx@o9@Hq;!m~)gk0mnU;QZ{624eNRAE=>+xc#6zA;C1dne9!3 z<|o>ujb32;*KaKaB>8M<JHEgQwcSoq{RQb1WyAbn5U*<*Xj8_HvIE#!VyJcB_dFWN zwxxc5L26SIpbkTmswaBODctz>)*I$)03&K1wjYSxLt2A21%L1JNTlhh!IH&dg7rj~ zHk64CK%$*UbeVqH-RFFRKNwER)UBiZ^{g7od4t$Ij6tDA7(;17U8ZlG%nE0#U3wf} z`)3k>VmR}d)xTDFRPn03643Tm(HtP$r`4cKp}$~B9pH_cD5<Ryj~Z5kQnD<_3E@b1 zjTQ?!7}KyS<6>gBv~7J^(l+zr+8^iEoFSnJK*Q6Zd13b^3)0wCpK5Ke%Q(8Q4o@2Q zg>cngw6>$LB-0)D>dum?yI+RdR5KA2oyIn2ClGuch&1Z4Adaauyom6h7nShDi~d@T zfLHbQR=ljA$>4>jZ7wPyVg*n(V<(47RRq$@%#7fi<4#&T2_ir{>-1xjc9Mf?4_c~U zvdxiP>zG8AF@4k-!+F&cYb3A9Jm@n~8UZ13***olHe2uWc!z}r&%_mb_k?==qyn3a zL5HY@0U7hs;elgB*q$^C9QeSgk8H?Xow(Hl@kif*x)ih$AJCQnI~oGVGQ$}es6VOc zv#2z#i~iLmIL3qM_bjFl=T)^*3zoNEfU!gcT9+8j#GFse0HfCWid(}esTy}`)lH+c zGaxdRI_O>PM9kLoAyLK{vkKn}3@$^ldIEUuR3r}JA$VP3YzD>lxVy;I(6&XL-6SB8 z1KKmc5^%zfbjv7JQy<jXSBsXZu*07r@U}B8?hN##9debs_$#TPW+ao?l_TG+ox%{L z_Op$7U3XDOIkhxlr7TFpwHb9nIX%U`tICMIBNs@S=x)TPv;GZU6Uue1r;<LFkEY=y zgd<c#(Ijwq<wA;E5skCYF~WGSAQ18GBNujQUL7rxfF@2^h2ZS$2ec}kyPtE7%-EB{ zQ}Q;GiUFfhg+erqyPS@J19s0v(E*`DOXInih9PhpqlK4ws=yz|y_XsWX^0yWq$-36 zf>t6v#ifQM(xj10;5}e{v~A(5B(9<~Z|VSIb?k3M6C8;phv^NZ>_OS_t6nUOzj$b@ z15=EHq}$ip-pG@w(FqhV0X>TtB#kTw*;#B#;CL%u1hYs1TfKj3zqMjEMLD=FH4nh0 zr;$rb)eBR*Jw7<oxjBta?;c(JoeWgN$A-W)tgFCu!%FugCRTL&3!sv)PON66VyoJm zlgn8WG$+f*CSZ_jZ8A$-ddh-&)<;!Mx$fXKv~aZDyD+IH+XB_&xl~E?n6-CMTLN8i zP#V_^z>yj0+E-sekAw}XX0@4Q_*Q$Vzr)?*@r*yTwUs!UEO$;(E#QhMu-*5Uc}vXZ zv@I^S_6e^1wPWgXlcH0#zSXj$D*4bpbW0<EwJLNjJn`mmJc#8aP&zu`Y}4|Qq%lk) zMs%GZF%a4S_an3-r=PG<!Nyq8xSK|0jW)sGxu<}<$QJ9J16FI@A0>D$d*`mF`;FYm z(*uD+H0o4nM1!K=qVr&QN>X<Tz<a?9`+Vr0H2(20NHt?62KB-`p<8l<qU4eA0okSz zYgU_Jx!z8$rW`s`LUHt@sB+fJF&l`j4fw66k5PK8Hk+F0;8>04LLz0uV<tc3uyMl| z;kG8dOk>!!hG5c($MjZW|GXl4kYifI%LgFdK0Sbt+sV`&UaITh<r9PAU>1}S8Gi!B z8zk8v1`#j`$WCz&It$%ZWOLkcC5gbX#``g>0kySWaqL2KV|)Wc&jD($n6`D2gg{aO zo&r+2?&fb-LldJv+Y1j2>9jeGqPlT4NQJgIy_}cj$`bb;;T9aOSFu!A%^V80r_L%} zoOJpTLU4B2;jBMz+g17Tvr65B9+^pG^SBD=h1dBE1idOJBb~K_lL0qnDo*nHd6?R9 z3<zOSf|jltv;bm-i81FY&6MSU^4-iOQi+q01%q8}S+^ERnG8!<I8HzOrMseODMH;O zlZtgpo8V-+2VKQhpnKXkkO6SCq3oiO6NCj_)Q8{IwE@W_Qx}8TVP|)VR#S=wyrO!Y zY&5x@_EIYhYn%Yi5+ZEb922^0L#R(J`UO&!Wrh(2#c>idxR|IGf;lVpRq55L=uyZR zbj)m8_v7By)at_+;+rE;h?zLltsUz<NhN1xV^gV}kf||F0$|dso`DjJKF45#a7x6- z+7^Io3qu0w4<$mv(4%?<FSpjw5!qFr0R(gQHmEsmZBHX~^xL>>3koGY0Jzi|TV+T9 zwRd!6C84^lyFxi6NN5T`%!q4eForqQ0iC8jc1M*S8qs|dWv)pp$EleSwS`GdbJxan z5uOzEr013Shr7-#F)s1q(q}NMj9W;jO~c4Gw?h%I=^T<I0=v!$%PWK0JsI$sy70>W zo=AI_WB?~UM0OMEOE?h7ZBy5L^jY_iPF;^dZQo`Mg^jT{r(*SDLYP+5&8xZH&e`S< zflQJtk!oM}O*$NSk|!Pjb=|w5!G`qX#vh+l7)x3*G<U(sr}0Ik0S0@mKw#$V1FuDC z(U27~4{nua>FtqtOxbC{Ua4Nf(m|Whs#7XYshlfhDJC_&i8T%bRl|-*iZnZ<^`J+a z`wCz{8sC*9)OPH9<cvI7YBO}UcG;MkT|kLFPwLbBsYVYGid3WZku`ta7!%>fg(q=z zY_CLv?lK*!?DBl-u8x<vXebDSJU2#LRGPA9^^R}<HjdOc%Q*;6pH1+Vx#KyL?<5C( zKD1;)i;2Y8O>U>2w3HXJ86I~RGSQ-ceNpE{KEWNqx&@MNX%`B8W&w>L%U2U6VB709 zA(V+XFIpQ<L7#a6!l<ScjGo-`&mo>@;Sq`kIumN^Bkgks`A}6*`C<YJEU}U<%vCoS z{!D=~!)&afK;h(IiI$Z<wQurB!n!%$c~K(;^dVx!5^|*VhjKggtD5`<wC02uv2ety zJmUz#-hhU-SbrSEz@~P`Iu@qw&2UPI<xDhXs`>QRn0d3!&XH$9C|JwnCW(QX!5Hg^ zEbM1fED~U_>pMpf#=Yt#I6f&7s5sO&qB~d}=kQKHd08U3*+rZ2x2@iJQ|mmHns9K8 zOUr+k6;hL1%TGmSP!oo(3C7_GaL1%p$x5eP)Q-Xwlo$f5Kn>a?NsiRu0y(<rpN@e{ zf-b~}PCX)Dn+1d>T1KEdC#$ybkg+PWxY1nKl>+HmrgG2}4Td2cGfLnB94Z4A?u_@2 z^o}xUXd5a?57wv&`0^k)jq3DO&?;*Jlw!<iAPMWvnZWiCD=3g(lR9{9@JU&MqY?u4 zWJ>j7IS=wodgEo4?2Kt){<hYFEU~bkF2#Thgij3N30u&nZZ*O%=nNl}1Z-GyqTG{K zePl|F#=>{l3k2yyjlZF7oTC97lq{gWT&<(fA=Zb*u3G02KS6_+RJ5)jTIouIN84@v z($Dd>y|FQ3<e0(JUvn=ecr0u?IX;-scEYKx%<!J*+t@ay0$uv#agHn_(-iV*0u<6s z*_HeO4fC18db&xIoyg)9-dQ@YZ3_9)kwAE+OOKq{Zo;E0c~g5Q0-C_C?S-xVrWQ7O z>OPYlgM~XO4s48dOEPjTTUL4+f+h_cOR3Phb2MIJV`$pUz=qgIsdl%>dtUXl-TOBv z!yj)R)|8AkP&WpE`zMOwX{q%!s77$Q7qY+x#V{wW*o3t^fZ95U6wy2&%Mt4Yt-gI} z5$!vP6E=4PDh6y9^?Hs}A_!e`4IAhI%S%r7kZFw(e7WgDm{4sO4**`G8abxt45gGe zsyzXmAR@oih)Yvz+V-}EYQsEEp!79?yiOBA`mSZDDwq=D7c^CUIs)kuB3@CnTXXA< zp3@b~cp(U*rqu#>FAT!#PRObE8gj55hbUN$BTYT(L;+CiN?PK|#d6ZN`Xvt*a*?D& ztHxO)M5+MDQJ0IV_A3{H^!Mt(n9k47<_RK30nw7Y3sJMDEmVoK=MqlF#xP_lfEO!D zbVaoQLUYGPkm}q-<|mc}8Q5bDNFDATYg_MG<Iw|8=(f0x*q*K#PU9*UDRagmyp-!- zOPMpU=FN+*!#fRn<ctr9;&`>;M^v34whhBT6utkg^WT7S+9tM05SWeXJX6l(4zpJZ zhFgz*TmqZTi9B)oib|>LDJ*qyra4sz)^KEaCl(Kq<|i>UZQosUq8@P6!pP*F0i>yn z0q7i?CebO!5JJ`pkNH}^s{4mh?I%%$sIk@q;5cz=e>=N5VGmnC+$yM?i!k5n<WkpW zgb|0g-ylMmz^;3OBEY(4R3}3|Ng$5(ith4OL88yZm=oSrtQ|g0L%UC!WGFuKr7pFP zTr=A_V1391${4ieSnQf^2sE_0S4BN3*hBQ1rX&*7&@)Wo==>-<9lBQKLPcFWS9zG` zF2i99q#G@L^_|_*F#6`*$r`&n=REozTL@_r0az>t&h6@_`I$<946Zve8#%YUj@AYF zJZylv#TKftHUPNJ8ib;(a-v@jjaiV|C|5D5P)x`e9*3IiSh(uw5IIAk9eayqJx6T8 ze)688?jMC4(6r{5I70|d9u;`>#lA4I!>DjzqkC|iuQn&71X8b9pjMLA`q7fhjd#wP z@o;Bbt;s1e9IeH!M`LR!T|mV}VDb{Ey5~}ju}qS_Rd<&zA?v*o$R%Y)ECTZZ78dLx zf-tMpX*WETIJKKFf!%Ye=Vga`3MI*U7S%aTMXHiLQs;<Unq`zFL&d5)nXUsDj$pP# zv#6s+z$A-wW{@XC+8QWzEo)b+*(Vd7;f%Q?Z#tb4r!mti!p+Zs0@tumjBnjt9;n@; znvOewazXUA``dbtWUv_gc58Bp$-ubRI`cue2qIG^sVX;Y5Z-Fc=z9<ILU_y@`2QR< zm~w;&c;98Cx$|`>+HlfUAWzB})N^f-P2@(oaof{_E=V+ArqfOU`o>QFH^x<pU5d0h zZp5x_<@H{8n&!Z;(Y9_=*U(sXx|1!{uAzwZ=&lHGZ6=N}SRp?>q#{oAqIuj5?!nEG zf{kh$MIXzD@Q6+lG#2DN60D+j=acno)G&TEn1f9gxv=(ULD1LtP7;+${yT8UQ>&hF z)6g5qkVye?r4b`vUrJ$KgbMFVasq{F#BFI&Q6B>u!#2}8IgL&YP`S*RTKW_}mRGfR zVJ(oX#u@4`mdZW1Q7>|^!B*j*lq*uV-0x|WI^O_yU5VtP(a8#G7?JR7LQ}%|w7DC( zYZr}9TTj2RvQIP&g0EgM)OcA6U(YC-C&9uf#>0Oyb@X)*vk)aSjV9h~63m|2(AmH{ z664P4lnp2}mg1=gYCIRb(+~xIq7<gM)hs~3TCRDk_q|?otOhmjAk!s)dOg?vGQ(<a z)u|&J3Y&ODw(>+E2z-7S5wPb#Lj#e3DAohu21H2M`)AFWECznFU4;4@GV0!+!p+G+ z^9F&cA2#=`6XjDB4^5{#fqhcDHpo}!QEy@9PG6}M-ay{1AAw>fBLsY7F|9s?l?9+d zg+iZdUu!btOlP_6c=WPP<JwMJ*93Y1TV6hiLo_LBS37hVfPnL;ghhpS0MZQ;(8i=* zD4akpcD2>eJ0Zf&DoF{=39y&INLO|Rv~aa|aiw9(T+4bxEYg-|R+?;3<VQea@ctBY zoY(F5uVn;CYO<q96@vEqyE&~cJ?%7t`RG<Z7O)y6Cx|l!rJ4~*K4~E%ozo)+CMbWB zQ~PO$rF4i#<#mN;nVgaub&vrjIxCy(OFko$o`g*WWH50LEKV8LUb8#g<Tg6fPQ!@Q zVVl);o*i<=2RB8wo*<1FiKezZj+M7sn^aJJ0u6&+4Ve}rxU|&1%Em`Xyj>G35oxMS zP^7bWsXX-9mAespfds5LfRGeKjJZK%>xVQGrQX%l6CX;!Cz<o9Lm3$i$b-~`iUbxl zh!|8APY{t3vDk7=qtG5dL~*92tCGA-(p2!hw%u3#&>I&AX=$l$SzAr&lcPe;(lR)E zziy-R>DAbPINSW%3LhoYsMTaZW6*I<%zlL;p<?J?&J7)4EwBKlnuVPd(WDyN-7d*E zd0JY!15rEiK&!eM$@M~2^Id~FQM?}{0_8Szq>pw2Z!XPtaGj9ogaB8&6nm?vPex*e zrUOB&LCZDqmZZX70<dD(k*O&o1ao&fOD20RgQ@xmR)+#+jPu%ernX*LDIk8dC0PH` z$lP6}^#Cts&1}EE;Uc)XvQ5?btiPzVZMeygZh%^t+o{uc+IAet`tHJ*3AqWvHqs95 z{*wnNr8N(&M*Rtn7-ef55tWv~U0!>jYAWvK*NEBQp~Ny6LOEB~cf4IM%lgGTlo*PN zR@0Tis<8^Sxjjmk8<Ykbh*1YfOr?r;DsU*zl~ir7(ur0TK>ey`5`;V8__WYq-t{+J zSSL*u2rMW1X?S2L1eIvWQDuy2M!J@r2qm9%f!qjz5h8wxKvk$rIl1ev$pl#Um@L+f z*=czLU!%#@&;Yq;>cTLMs1Vfrd1<Yl5^Sx6_>j74Awz+yTyX)`Zgf!KL_B4BkF~-m z$=F!8#>4BLk?^(f73HYaLuFa(q5AY$lKM#8Hbr=K0q*;PS{v@5P#H-GN;PLFkmh}| zAry%yWa-DFjR<iZ1*Qt$xUh)DC{)bzg-B^yw@&mH5hA4gHRm}Pv`BVjw>Phyo`1C6 zcOALx94lR`1_mL36CHC~Ytmxn5@x=`Z0cMYx^vA$sX0xP6A&z61a)mYZfY}UNR^oM zoTOaqKrN<eHHk;*c(ulAT6KgH{pu0#`g65D^cAbl_q*AZaRE}+c)g9adAUH&$=B0L zi+@|*a3eUQ+L@m<)tQJ>L6TeRfG#f1oMC{@JyeE{+lu5@Tx&Q5F65Ehg{-^j7*|Yc zz*BL(V*-+ftA`xn37m8eR-M?P;bte<Il(H6eSNSDJ#!l67<Z##b|3xt#ib_IQ4Hlc z+8r0=#cpB_8iywe58Xb9G_3<6HS3Ttr`{-MOO;_|1@0AeI%pk2fUKR9y-iM$4R;Yb zAY7fX)p}hP5k3xR>uB_$8^2GG0Cc9Nb>)RV9gz}!GjrPZ#aitu18?~nRsm>ot+5GI zqpKN~)6hi6NwtHa@C8@Pg5>wV5Y$Vhkkx3CK&W}BCW9m+dcKH1d<=9zxN5xslG}!4 z%t)WhOA;LOptMiE1EM%FLa~$h0Bd|*u+2Pledbh2f#sGAs=5&@^Au2_>o`j5TC@K8 zV?;M6{p%g%G@@uH?Y|J<wRiGDY9{2H!jizsNfIVPTC~SJxr}kCk8<s+6fHyI*R%o7 ziLe9KC;l+kuQRSsPhR8Xo!&BA?=-DsX)si5YELKpM4~QDNwIp5R*fQL>JqncyEu>} zukli6K(^K>&;w3BXxjEuQyVf)+7uor0i>Ar5Qd8P$VCM8ItL2Tx&>7zXKWSrT$MgT z<GzuvHq9Yor2&eL3;_{pjLFv{$-pK6&PZ5nCD~e&=V{Wf(0MUXyBQ&h5`ThLRVdO6 zxX#L4<eA3jetRwX><=SqB3$8>qW-?ufGg1nmmVfM;b9wS*yGc2Ay(2hTjjud(;Zuu z4THXgBxzRN=;Y6JtReZui1HK)$tERcgL^auccbJP=KAR%>Q1eN*_j<s*C4j)U=<KV zh!Gay1aFBCAZ-X^hwXg_MjHy4(kJpYjp2>yv06MNuRS@NxDqB3)CepA*_HjBc6?bC zg&ks`V0dZykA|}wpEBe=FtR0;x~yos0gjtSNT$PK0KA?$(NmQB=MFS6Jhk-5vKGeP zMQUwY@-Qu?x=b0Vf6~YljV}FB*P4C$G|@=2VeJH4^MK%srI|GhbVtESCZ<oLmZ>@A z!z%e;PNhcZoREdAws4mT%61-w3hI~yL$aQY-iT)p<6IA81Qlc4b2e@g!ZSaa6}T*! zkEZ#vc&A0mH_-hwa%2%DW?h2q1LM{>>-w0Abtj;gTAMVoNT6AiH%UgGAv52O+;bN) zsQ4)LbhjvY^LEbdm1E-akb*6A)<|G-6WU2YeX7@~i7vEu?Il&;jnJq5NVnFhcn7b) z4!7%Qb6KVP#H&sHI?NC4s>Fo#e0G~8-mo4j*v}-9UL)L#O4EsUy8wd7y>w}m?{m-) zEUTG)K?}5=8qJ9;3`EU(-s&`)BAl<K@9bL8>(~KaSP4f(cF0YL!0~8mAdL#HW#4wi z9jqxegyC2cqEk(xRuBDK5~i{CEUP|l-e3F>&sD{?b{?A$o|<k-i?TtLX3g8$%V7dF zaZCNiBMBT`SAF}^v$e3-fYMwGCHqb@wlaNS>rerKu`np@rYxk=)P`9Tgje;gK=NSG z$-V0|^>PE8MUY@Ein)$03x6#`(wAw?%ue;#`Tq7h0h!XI%@mu7+f!#!%ku&g%UY6P zbhfijjc9BQ0E`5%br04ekub{IlV6E+6Lzb|e=cbNfGi-mqYP@At(wlX`X*6Q2PAQv zKn{5B2EsI+)`K={S{9_iFIU;#{Q<Oj{azTV(<srmJ_T4zpBl3WRr6*2%WUmB7b&A- zmQs0f*GDhcVEXE@KoK{hg|zB~qg_o&hMV3>>w9^}w;uk5z^u3>bEgLq?^<O}YyIv+ z<fesW_S3ZFAXf3gk3<0w`<k~A#tzm!UY8Ttngm6?DYfg{S%R2dEtwb2#*Dy>2c{_j z68-AL60YWOIW!CU`a^<$NPDh%98+OJieFq(#5Q@r9au6P))rVN%u`g0T|6s6nc?AV zPzPwCcG*Ir(>>Db(zZ0?-S7^}O|D<w9D~9wSu~`zwVY{CP^l5HbOY6nu(&iRkoxeC zK3dIhpm#|d83~#^2vD1C2cR0hRaAeAtwy7cN!la!qSqo>8s7Lj32zkJc)AJ|H^UhX zfyp}Vc7P6Mm`3DjfX&{UOVyx^b@Q>Hb$v|jF)TO&LAv!pUkD2@6(<bu!hiy(5e@^6 zcB2IvQ(TEmssh^m<+i)lKFi#J2Gw10C0uj^Y@}#I{h>^MWSZu+=zE_OUvV2c!dZ@J zzsq12b9#2)Vzxx~$#_Lvif_LoN&6VdR4bsRh6Hd-vJAl7l!&%P1rOw?sxDKHb}df{ zc!4__Z0~RUcuyP|o*mwR0HiA$CQ_zQ9mu;C)U3{HLlCA$7-HG?h3K4$+`<r`hS4n@ zc29TRTI39;F|1i&AdWTMI3+?AHMLvw#Cn-UW%I#&Xe#HzU9Oa>FDkQ^C1IsmL+YB| zTJExt%!DNGA0yL-@*%Oa5b@CXj_Bp=;eSaBoN&Y$*LvIL85PZpgwN)Ljn{c8_)~@p z&1{^&`K*1N`?te{8k@QWjGY78kh4&8`iPE;Cn$POz{WO(g)VHW61AVc<5%gvwwYM4 z%0#K*I(c0r%xTSYrwCnIOlY|?BM>>x@KJ;MIR;R;#JQ8g#HjJCoh-FH&9tXMw6ly@ zVvu;XFQWw0j09HN4_*B*hBoB_@A8NN(qs#q!}Y4VWtvvm2bw4Z0Ii8rqZ%ws7DGP| z`Bbw5CJCddSK}K>_f<@b<{4T`1y>@TqPOnMCw)3K-v3|%(T}TNw^6<*iW;1qr)=XA zmAkYygcSrKF$fWoRWE>H6FEJSEXG7jz<tLSn_Ch1rMB`C?Nz*N>xZ^a()3vU93 zAZE>}2m+od8Ll>c5ul;eC$iTgE3ksqAt(hR5S<bMr>;}qf|R(8tD+&`>>r?*NaGa4 zJ{RgyO&}Y?$xc`Am`siBQ>?SwU?32o0Uxc1^mTzh^+Q#A=uXXa&_9^UYdCEpTbXgf z;yrTslW7e}cIXOFa2BuWNgLq|(X`C*-4&GME7vK|_hfKM5-A`(m1aWt(<c#Aw}K6b zb`wQ2By*%;W;9&AFI6Jld6uUDV1(^d#3ZDe{btYnG;MPP#9ohS*tp~;G)r8+Lz(S- zSvC}k$z97Z#m2z$P<0;E5DdJv0gtEpCeTFLaVJd=H}0yfk5)$4Ghhjy<L<(unHtiP zKFO0(gcKSglz<3_q;Y*LavRZ*)N!cs9e1(~H>!CZjhpm9w@Xv4{d6#V%4bbg>gyF1 zm`!UwjhOZH5s(n|v>eSUU20FPc-)vUxP+rGIswq9-tA-?Nt(uD&|QK?nXOy=`WhCw z44Ld4yq?qvMD|lKZARVby<%GH&^%Wgrm!W_q^=cQ7JX$+_4Qtq(kQK{*_TP<Mpc8L zP1xpx(1YFZX0&<x5#p=px>QmTjqrtGa|rE4!4m1Opvqox;h1uSHB3XelvEUiVVsTQ z3uk9e0QaStsWvRYwbcn&`rBr}Xmv;08!c0$E0PPjLBa4Ysry`SMP6E8K9V2`VUp>( zDh<Esk!YvBsg%O5Xdh%x&<<4bP<U;))G|&}+7e3E*ZBn4t&prXFGT&0Or0VoUc^p~ zV1yt@B@pv|p(PF?he`B^f@*MwO&OP%j>5u>sIQY-65(?%C=~OBG7N$NwHXwED^NWh zkD8^ol@-&-rIEZ4dxHgC3f;uuHEK|1v=Z<$a~CR5B$b`WEVL3M)!Ne7eTY6~C|O;^ z$_N6gidE2Eht9>jGc!&=rdWt<tE)k9QehXgiuz_Cz8VQbTu`cAwYAV+E*e3ZYQqkL zT(wS~4Vo;w!EIeSY_k0lMG9j~Qcw>BHh36DaA@gYHI(>6&BU`0F1FQoK@n*nY95d< zo=^lkjC(;jK$wnlNMsrw!BeYwfu&^K(dEce(7S-wyLrci)O4YDAOq5Z)aa@AjDnq{ zmCfT0xPA)<V{EmM_l;p+>buIZ?0m`)uR>mVkO=`{U~T%FcG~Y~i^+xBI5WN;e2PeY zI$ygaGNmdn=kz)r4e2hJ)Vlik)u9%Z2#ER_)y{ySeQ9W?v9>kzf~b1gfs+{>_L?Di zJ^EK?I4eGj@Bt29t+cF7-zgg|rj5Lj<>h1uW?NKfuPJ>=J`<#&KH`4irCHhoKY7B^ zZo;#isco#H6W01OEh~wFMe8F>jhZf7<9gA<ja^Nz6WD<pQwL?Dy-I~CfvM1FELq=- zY19PPUhr6ep~kGDa4Qj1EqXMPse4^i5NCNFc2dy*RX{6-2)+<ms5gbE3?tzkC5~l* zwgl}Rh@eFJZFO0WXe!B3#HPHIwb>%E`zmWwryA&LD%w{i^lk2W0i^UK!m|yFL<^8M z?0%PR5)NUDm1VXhRZA8Qc(J)D{iC5*+i*>nsoXH(sj=dYG-eUy=CufKU0UvUz#Bj5 z({U!IM>}#t<zt3tB;rbHQiU*D+^(Vy-lL~uQs|qnPSrwD6(q@7hlju8Y}((wky3#w zwQ&)We*KVa1(`X(6kSEEejRU12Ev+Ji+yMW>zY(H3?dI}ijFF{E2|-E1!{D{6<QZ? zg9ttDn8#_jmX)<(r-oD)tVYDJ7E@*^Z=)tHATUFQi1(GUI!S^DMD6tkn#5xrx&9d4 z5qbq|7cX2Xiboj3i-JRNldLmhV|2u=lck;=5`g|p6bp_JQJIqmt}+|iNtQlk*lI-m zp+V3)CjSFhoHuZ>uc_#Oek>;vbkr4LZx;pq0T~k;{`NWZ`(A_sN$c=UB4lccYaGoe z?Wh7bZu<I~a@1*J0J-hJ>hHBSK~6XMVMTB>3JPJ(ldjeymAO(B3<zXf{+lrlB89`L zD9@D#pZH0z9ijC??tmMCNk<Mostv4*w_L011TBvwG(j7Y@W$7Fv?>6Ve<A^Lns>Ze ztxJ8M*_9}r^E14`3~RJ^z2qx3`lrkQ;i`p4==s=CjDrsm*v=55orVaUc=W}bYMsE` zPiLI1CdmA#1rob^%W_QG7K{MbCrH9j6)kb<P%8BmBeVm6Vq?&;PtkB^Q}foo1>>17 z;xME#Ms*pXYMU9@es&9zo_tIc3cm0XTs8yhI2%PZe9^ia!QuK=Tk~3S(NH&;E_)Iq z2vRRBn$I|#T6eO41FMd(%qTB$!`(A_ebu79Kz8VGG_*>z2TLJ6dtN<>c(+5cFp7&s zyj-Fb0_E6+Z|5tFDkeiIeDX2^0h~!FMjB1DAZVpJ*3@Plh;zW4A2A6D6CW1+j_e9b zn6dP!Zwf?)kxjqiK}}Qnn{=%+n2Ld8MPe{R@5Lk8m*84KR_SnbS~4pnWdf3@?|bVs zvli9L)N%uNW2>qG!sM9n8cos~h{@HQM{RYQ{v&KU!2qsN1BbEG%qIb6;c1)pIMKLW zOVvq5ev-+Ai3L9V>lggK$G)T+BQPkBj_^6$hFn!5Y(0zN1ZO#GNLDU*n@kJG&}9YI z&2F_H7h*MaB1;TwK~mqU?6+7{nKeQlhdtI<NSac!v6Jzsx0^cvfx)<6zT}OMAX|$< zD|D^t;z7nWQyB9ox_Onk!I1`wiVdiwMZXrAj<!aNP7$`F4h0B(*8txo$aE$n&}Su6 zvnOGNK!T?prGpyLfWu58Ijc4ihd!tk6E!(fyw4VB(bNHIfEPs@?tBH2OG|#Uur^F} zH}&mo;{w+A)_E9+6sl!S=o#_OjZ7!f!~qjH)R*W*q2Uw>a5a5&B(21hNTgh_-Sz6~ zx2DYvOW%>`G%{pqd0FTo8ma+{MH9^(gaK&h>BF&F)TCCYdKg$rISRQ>+6!TVo_WAf z(rxE&2P(Vws}F*4do=4Vb{*cOsmBcDUwzYCX&Fi;h4rFQHPd6mYu*xGe!<uL7EVI< zkfMN0x*k(NTY5G&8PBK?>tt$O`ij^9ogrcBvF`)cQ#F*Vix~i<w*A5VD5Pf3)|p5r zLdpF=`Uq^Zdlb)xW8EPa!CN4cQey^V!8wwo!n7Y%;AL@aCwPsTA=PJYLpz(9(U8bk zGbPRnLl6gDqBpHUk`){q88B6(H8)Hk0jnSFb8sRj+m4CuP3UO)=N7$NG(tx`Xwl%u zr;!2E%k^tiE&JA(K(S8l`iDSWLJ-Vktycm|^D@_d5bM(%=OpH2zy8g`7Z#2NV88%3 zu4*rpHO#Kzn7S&Nlr*Uj!n@%3QC^UeQ`0t=B-+>|uoLKnceq1fv+u87(~yP6hoE># z?Jn1WVd6gnBDH`3yxXh}-ISbQs0Cp$PNPMkV*I8?+ipcQ5T0{foRqpmj&9*d;iRm- zk(<|V+Jas~35pXp(q#%ICrdL*5<={{QlOTp(AU1>(l368i`u+wv8URMINWkZyfv$Z zU?fNTo$er^<*}78gu80;!R|o<Fm+>EYjsfxhpW_T1Js4W9O<Ik1n|HOrDoZwU$jxR zNW{yrV<*p)=upMk(D44z2-^cM?sdSR_U(>C!=-Y@(knbQ==j;Ut<7_cL=NKRk=Zi8 z&P6ym>TN40W8YU0EV&%%e7NF1B#APcYcVkx+jwU>nO)&&){<FChA`jr5|ug$2#NqU zy{SGs2W4D>hYGnf!n+()qBcWjhbmeuC2b$Mm&9Da7U#OvtTiV$g~*}VbIjKFD1?Ge z!H|d{7#BBDb|fa$l?c&%SaX2FQ*8%nP)!G_hQMR!^mV3R5t5vGybLu}%p&5?T@w5o zITf0hC?`~9*CXI9QbGIp_AKOv7-Q|?lRw^9d~HjX;@8h6aH`6%k1*)27W2i{S&?nZ z+yT>!THzH&Bubv%&Aj{+mR5tG*cs8Lxby&@5ugBKA&_W_Z@=V;m~*H(L11nr;sZDw z-qB=rS(^)8jnHdks!_iu%FLIJRf04FtAT3-U1Z(&n;%n}rj=CA>)7_IF>O~_-_2{A zF$Ie`>EeRTo$5iivwO+l9#f1UeZls4?XZ@eq)I$Dv?A18%Sclys!eyN=veQ{4V+lz z3EqqjPiUHzbd?Z50|I8&6s2Qppe=LMR$a3TNLb_9fx7Z2jRd5Am6}~8XOd*!WZQoZ zl*y(ZC0|DtHHbOD_xl7P<r2uO?TaWQ5Jg42hWWIHw#h@1X2y*|dJuxHGhS3ixN%{- z`3*sW3Z;Thd$UoL=z?&`i(U<v>+s1G;bPGYM%SfCHJpAv0U}Cm#JiOSAke?0_d1Xu z{<-ngV@Rz#Yjm?pgsbkt(k!tk4-f&`HK3E2wj7vBA0m?TO)$W9giCr1x(@xNKpTf5 zu#qW7VWw7tY8RuHNEVP?w(a>&>F_s;rtNQ79Fl+v6kW^uBjZNV+dqU+m7xB@(xAX8 zaHwwNa)WwgPaP8zbGQYF?G{HDnq395*Q_2;=mev0xR@RdQK7Y4rCBn@Tj=;49AUb( z21FD0&LfhpW<O)oxCY<`WruEpg4)4;+@jV@63{0!jT?))MoY|VjH<yEclub@IMF9Q z{K0UUOA!+&5+mG0ApwC4lHM^~(lD)J9!VK-gj_}A#;oHm*D1vCx^{dpM!Eu*v!WV= z$ZU13;6pysoqKrTsLbU_@I`m_HXkv%09&7k*H%-)hqcv>V<g3eF~VF4bsfW1^G-Of zz4J<)$j}yaMY^7{M1oxxy5W{c%h!XvhE&eYK_EL}$&+O!U8Dp>uCl2Tjb$J$79%qQ z5~k+V%h)tpWf0qJr+Q=CY)SrbII)1zweDNfrWPYB7owqioQAMMDnh;t$PuKWk|VOh z-^4}+y#6AVA7Lpmd?i$0>PeXfE=iCKMySiO*fzPdDm6ePai)cL#$*?%0I3i7L%&#( zAyf^vjFHTQY{9fXEtwMXpwGGElBr>Wzp)7PfSx7+3PSIR;hb_c3xM^IRI}dl5d!uu z0x_knsK~yzL|Zym33?rC6PnG97JL<G(!bhJ?*tA^qKBzZ-VWm+g`u%cX-~-bFp;fF zu~tkOAC{pMMAJgkr)GWUV$DICQ&IN4;<l9x=h8WvfaLy2N}Ov;<MkDqxex=O(~9xt zr<?bq_Ac*|!TpZ6If_$!$Ao#OI-$UWyS3A^fAdBps3Z`8C8E|)^oJ=pNd(`BiJOQt zIXQdiJMeAq(g?nDgduRhg>DdP$sp0{(4r&6{i%KIx&SqyE!_p8uhz)b@IdOr8TR#9 zb!%YV`8u~9`9Y%n1xfP#9as0PW6=(GAgMQDu|cUPgMy1gMOn>?zSJWPDM5y+lP2C( zQ)-Fkzc1l!`V=Ci=lY~tZDOY8d7H%XskA>es$1m!i%D8mRjW>f*n8uGpi5e!(M0A= zsA~$0D=~ScCY%JHh_Ryc@HfOeFA|MTF18o87wy`LQ{5<s*XhwA`P?gQXD;&>h&*pP zNocZg_dq&GdBX)V$`tQt(>{p6)LF166v`Cnr%f_13yYh3L@WQ=r)_7$Ic?jrq^+Qs z=S_eEZwMgi&&9RaLZyTj$3C45O0_j1WKDM&%nG8Q)jKo#uF3>QS<J_JEFkJPx=+iU zm^mRC9KC}?`M&T{dE+YVKyc{RxKpQ%wy2AGtrj(xrP-UCaO|e{jckuGz=~N@Jc0S5 z?bc@+%|v<#<e{Dw5`enWho9ASB7<JwA>2tQTAaFzUDZyH_L7lE!Kg<KgWLS+$lA$A z1!9oi>jGPyT_7Ij08TYO9V1cy%4$=;00<Bql<c>7i(QWOmy;by8if1n{Pl~Xw5M#< z3D};iqf0UJG6@q|kqOO`o@)qB6S^&t{pwE#+^ouLB<tO=3i@codTx)f0cqznU1OLt z0isSLP#LYYWuoh;D`I{14q!y+Kxmy_S|}!7XZwX-5bD?hqX(`j3{Kchn!Z#_?1pok zHnFZI4q@mIc{tWEjSv`z4)iUBLk1JF?(Xz5p0as0`5X#JSSeD5I+Y&ovGGZwx$k@m z2w3sxx6k285iRNmOlp8OulDk41cBO}aj}e4rzfXLLefFG3`lKXzL)7>*Tp=s(>-pr z;Q4GwWCo`3%n37~l$dFC9yb25OXO&PYrv*(excBcnz>cTTcKlB05d)uY0ZnO61#ey zcD5fl2-Q~I0?}set72{qoP*h0k34jrqp8uP8gYd^QHT-3Y15MwRT{#SStw}Hmrm#t z>YTurSwX1U>EN=3HgY!tb#@GjfPn&_Evc$VU|=A}(39~7+nu@%Sz(`gM5+&>1W(^o zL2#~jHj$$cltk))tPxjH{Wf$PVKJ(~715MmG2;y)cwN}*CO)UPi^I^mRlFoO4#)Pv z3JIH{hpo0PLDw9ZmZxnW!WD3bn4!_3+5KjQFVHkILFmzx6S?KI9j9=}LBkFOaOZav zc&LXg)-+l&7RlrZcZD@xvzlxDvJ{#QO4d{)9bs!%Ic1|4uT-4?v>Q==wi8xr62k`+ z@jwp}egncEI%!?6IV$w><Ux*P!mB8D+eizcp?}Bff~3Q(R1%5}B1VJIaAK}i5GNZn z@B{|q`T|Fko6#%)Ld?vn_Q!3I+&=JcxceYQfa}@9D2ij~CXyMkW;}^7Ux!Wt<vujn zeVyRbcEjsN{@S|j*kUJ#&1Z_vQHgASdeW{B*Jh+*44Mfw6w$q6W}i${SI4xaYQJe3 z-4^A+oY-^B6G>E>(^9_-n-IFllQA7g?z14sq;`=mshi9-3zV!$2N)p$;J~~L*Q@dU z+)&z)(ADc_Jk#R-wOmg-f+EjRJ|~v3SqQPks;ar@reXgkLvu2-hR6h0&V$urEq%&A z5s2erR@pkWf?QE7Vo${N$sfkcfp?_}`rT3*XkufNG)~IZtwP<t7)Ba<2_-A_v!=g1 z%y{dS#(&|})zt<l5?&<pk9-|>r?V!=X%#nW#<SgiB*k5IXVvhgI`4vZwy-8z&<w?7 zN!Dc`5SHQ!a`T~xt_a>>Xb8pnau5~*!y3V=XEYU~JD@x*S@w)qrg3l$IODUP?DdQI z{32JZ`y+0H)z|jjnvn2dBuCC5K>F!lt{N$+ZcegPErI=r)|lO;a2J9u7--?06{@GK zqoJJom4sK88ZAuW3S$aEZ%R+Yel5`Jd1n~KnJ{P$<^XBTqLwxgP7!TnLyFyrLN=Lk zESJL!Eh-$qa|zgf1ySp{-i4Y|sn8hL!b2n4WTqhTdtSLOVN$BEi!g2YS<jZIe>{+c zR_r!EL8~o4gy_MWs<REOqGQH<y*t>^jx{$TS><NBA!_{7GNo!S4VAhkyIs|GZt7MN z`p^c(TPLokaHkqdYkf@}-V~+9d|DbAWi-sAN2V$o8JFFA3}|$jjuT#)1w2gk5jh$H zT|cB|OhCDCaQUlO_H2YhMCO~+SIZ@`fYV|e`NS`JDd|WFi`xaNK{0H#zOG7NJOqrQ zEeUlcTof*+qULfma&VJOLiho0lxSV`fc4aNc(S6s)@{_&v8K%BmZxf4B5gzrGep)Z zO-4>ibjMRNBzLsEyrJe^0YPFLeWy}i0<|l_CZNMv6GY_3+!yl}#Vyrp$j*&O3|a5F zvIWrhliDpvypqYn#jbRC5mvgkQq#AkGC8VqAS8=g5;vvt{LtTMH9a&wC2AWe_dyFd z>qqz`nz~DOOCbp)h2lh6+GQVaFTf4<*7C2?jz^s4WHG(pB&Gnd8?<m4+aXgs>UZ^l z2tPH-%HiuFut>zNb`<j1HycMYaQtm{5+9l7<|xT4l#`^Ow(ou5!#>uCZo{&Uzv%YV zGn}E4Dv&fswRTNygOLvOQ8t4Fp#-i+Y}TIgrX0Lrk~{#SiyI9j?ZUOA1M8N|Lj6fp zYiHsU;IK7`=q$f0HLa^?CmfBftOUWD2JC~QY4uq}2%$xIF?p@|*EF{gCB}q=BW6zc zes^Sz;$CXTg+3KYVlBwZ&b!QuoyXy#;~^24hV)ZKe`?&X)Z)fMAjEa_k;;i)6*E{- zyA}oA{R>_D^wwZ@gr@Z~Ka_1R0;9GEiFb^64r1zN;VH1o<VMDW`Qrm#vl~1wg{gnW z2>Q-)6i6mtXzun(jU3Iby32xl?sz9as818uv?|${pcoyKPKiUDNyg={>}E91dMaj6 z-CT&7k>257>iXR6@EYnTE)_D^l|fQ;mB@g!1g+zJ5(?t}Qnhb(PwN5hd~_%XX@?cd zZw|NCtTktB3uDRhS)I1TkH#D*u&hjo=(wEjD^cpZOb4pIl3jtU_%Z<F;`On6%tu&e z{`y>?7ND{2KDYqkT<hr>q$Q>Ht7&rBcoGq}r3Wc9GoX`=9`vV9<2osqBY@mRf0?P5 z=oo38UGmWR7ALlGq;4x7sMopnz`zp7q-?tfhIS}#>>4gANmCUcGSGcyRr%P+j$L*# zwu<(Sj1xw8b4e;>Zl{tquvJ>0n+qDk)80lh_v`{xmzp-QqHF_kVr+41ez>X3Mj_U} z0)NXHV`0;Ar(JR`;zj&;_Gj$-U2iT1mgWsq9{y8-CbHNt^lB5R%p3%O2=8>q0Bk>m z>VtrsIhBN`$&S|Go$4HqlPpncueCV!J$^kAd=}%AMuOd<xGO}e^`^UoO08PrNmhW` zQ<5SaoCda)TrK1+n$w;>HS3SY9>}ClGBAo~!)xzXmNPvQ&~n`ofYb$5~yox=@~ zY09HO4gixx12;KxL&T=z9g0Dywc<!0hDlfzG{?m>8Os66#aV9%Yi+2A7AFQ7Mwyy* ztmh^)MfSLen13D`7m>y!wnt4HHfIcJceY)a^j+{cZ1mDZg@L8E;Tq>iL+A47w$5cT z&<VcK)>h&|k=Fvf{dT>^0PU<3(lCv7cVj}7qzFANps!DxAOxzjO&|u*!rYPRB`3z; zy})${uDr3$VUf0XOAP9)i<-;ZYeP;Nn6|CYxpin*fR(G^G6Lx^|Kdsdbn9e4I{20q z)35fm3fjt&&cM00TPUAZ*3c|Mv!Dj4^UV~Od~Z@y8y@;SKIHMe=O7J=;O2D`K^dmj z$@shvo9%v@HBw1B(r#3Hu2Ad*PIQ}wac$j?;?#<exN^a!u=b%7;0iPm<dHMFc8*ZE za>cVg0DaSKM`_oJ_HNMKmT_pNV~sPo8rkY#9Mropq9lYKvyWm6gn0>6?^;C7nU)&Z zzgjF-16{m{tPvY*Om18nP)$o*okc;Yczj%+f~fm^)WTHs-HIrPQ(uOi;Z3LcJm%^U z(J&6u($Sh_QdNBF+Q?AK^0DgSYyRLMj(0OU*KW9pjcmVLTE-dCL+2YqtvCcvM-iK* zamhCH8_Qkwp%@s+7``ENmFX;Y^{J>IV`1tKeVab71K~|IMH)@z3UV(b0~op0BIn{$ z4ZTjWrRvbeznOL6#CS3`L{eM>_S2G1HSZ&CjsS)TkpdE3JN7{!P@k<2_)_8gN}}qk zLqzT<|3`ddQfeUrP9*jY@d9Z%xbZ=WG3m>-noZ9Ylhv8P(kVc8-J|Bl-sdx7*Sr-p z6KKK`9vlt*ng-#dc7KD`N{v*wLw;QJ)*G=m8!FWT$1^eLX@P38yS|V$Q4BG$1`KBO z7{|)U(>8*Xu+UfHh_w6EfUK-)i4jv*XVYC_hHpru`rQ8(dC67o_~I%d9QcjeE2xHv z7#^7!W!tgFb|l&$CMCrUBGbZHqA$Qeby!#VDJL$}eeV%WY&auCmAAJyCH)usMM2II zfSlzNti^b*11B2ZZj90cdk<+Mm!YkNSyEzM3b<AOX;6s=GIcGcM3_6Z-0*}=M3y(X zGpA*j1na*0n=JZMNuX*u!*Yl+k&CQ^)grYC6SNslyGq&$VJI4L!#oDVRjeOFDy;{r z*W3lDe#oe<bU|$>*9qEZOfW)wJbI>deW)obefUhT226SWm`)}5x9Sc^w!W>TLqc+u z9w0Sb6ls$X%7<tS99d3h2n}fmT@5KXEVE@Q&Agz|s+M2`$cu_^_<2RLZgK@=+68#h zH@nWpcbto3h9*awC%I5p5F&zwU=r3mxjKv6HE3+DTB3u!+J&bkz*W<ci}+-h^}2JD zFPJwoXnEg}ej~lxMcH^oiFWmdbQYNGASV?ButxExK<kz5g$}rjAy(Rm<z5LuW7kUZ zhNTBM0hg1t=;X~cq*79#Ro(UP%f$pfo^M(T_B|SebDb*hBmy;`@0Mkv{eI16jvMPF zK^h&YzCnI}0~ZfAad<{m8cNaYs1rTAuhENVxM7_m*6<9Xp><+Iv$e{f7>QENSb}#6 z*!&s+!}2leFt%=>I9J(3_n~j|VLm~+%hVG<8du4QekG>hMU!Xlwg}XvF>Phun9Tot z$JMn%Y2pav2r&)IFtlsD9@AnS1;#&j)_sUEX5`YN6{>`#F5sI_GL_Cvhbh!j?kNe4 zue!-gr~AeluJxD2?y2-q9BSa&TJJTL_9+wX@T4BOaU}%8o$k92Y14WCmS5HBmp-_- zd>lh#-i5=b3^b)xT3Kp^rpm;wjpavZbi@IS`Re@U2Ox!oBtSe@JgfTEmm0Ndx=IlW zP#bbUV0+DT0s6h>yBq=%rxq+@ND^6T=?FKfbFk0ie$|UVaTx(lFit3`4!~j<99#7Y zL?;I4^i+sXd+fwaAmBzNm@&<?2fL5CSKnwkHnOCh1+E1b#A1CeAT3m{%^av}PtI~l z_|61~0b+*9fo2SwKx>Hrz8~mjg`Ep-mv|1VfUN5d*_BDhyEs9Zw@y?vwp1e}eGN52 zhMGHsf)e79K66(z`t+>N=1WC0Y0cFB&IKn~298N1<r>sIGp7X+tbkMlA#PHABo)a9 z>=7Gds;=Yi@lxD*Zy5w<sUE!CTBV_^y=0qYu+FvKH4L6Skce@iXo#@_>k?pzgEx{d zZ9pM5uBdSLhY#_Kr<-2;riY;QddQX`3sY!vq&c<N8C?`_FlsLuAty}iVqSl+G#gY? z@PVU`ltK-n4!ITZ6)K;7iA-|u2Ej<k{=}&ht-3efA3!W%E$nOkXx$zKQIG$wLPw)m zQGn`rxMCzmI^tZ{x;fqXgo3yVIzib_Jt~DP&5WOJOxrD~kTYHeD++U;c(z!Bl&S}H zI?&2g2Bi&P?>6UO0-M;J(Q$IB&wGY=QJ+RhGF^6;>(7wR(?`JR-oLtsFhY%;gq}12 zL7hoxN;{;R*dl=jPG#C?tk}uRM<2^a`$8jz-d=kVL?xifJI*|61V`cYzarE7OMwUx zIv!!AQz-n<WeUTVL_3Q`yljEx71mSyd<DdtpoTn^yX&QC8^H}wrIiRO2zxjeS`(pI zQBDNRjEV8HA7c_sP&uYZ1R4#pe9X;YdyMiVh?vAyS}~slp+<1K|6xmT@BlNmJeki< z?S+i(%Ys|Gr;tSRV#*AEK&wT4>c}36X@(a>_2U!<;}Xeju7X?)Gt$4=BM5M^#YqNB zB~5T^P+eWgI<viHAqoU1@Rx9498MAkTIz3;nme-_*Z7)MRC%>+>lpj!5H2{5G0%6? z_Bp!))bNTG)V32#u6xhTes^veh1LyfKOma95_PF(RZZ=<RMp9IqlIm-IJs~utGbhM zo3=o;Hn>T&A+(B~^9-tM^AwSzpVTRc%Lo&cLRLM#E<;jiLit7qmjO}jObwk?auT6w z52qLb)?CCVN{t8>eewpQ9$6QlJ|>FW(7d_<7KHX9RRc3a?N(5>uZ@zjg$r@2Y)6FZ z=EGf^Q`{uf@2|_Hm(2CiF6ZkivcbX<1b+4$)aJ<*@p@!eJ#CP$F`2v(W?}&}9&Rmf zCtnKmy<@x`nic}m*M7)CuL}C3iJE0LP?A}5S_E{^-4G=;>+GagPd4g}8DW?5P#mi2 z+EEWzt(w$FpIJ_mP(-r=^X%!*JKRkZMGov0;*cB!okC4f$bg_W(y&GvLG3B4tRCw7 zY*fP3E@JkpH?|Ij^_@6Ee$k9|Rqw|zWZ22D&J^B0xY-!-tpiBb^$TggT%bTQWMH`t zrXaQDvW9R$;5q(PR^4ZRNgu|=!Pl{#$Bl{#?gUIv$ME(NYeUl7YlyE9;oI{-31Gc( zwhlK+#OzV1Qmk>*G$@Yg6(+Qo0-{yj6T2owtvae+z`Ro2)5+79=+9~Qvnc3VRX$Gq zMWI>EF`+?~Y@de?0^T8vO`vx(Dr0DSi++5nUGz|ZPCVNuB9B!B`y}TXg8bnw@3#r< zqQviX$``}x(!+xLo|e!+cR-gMY~lpSm;MZ2hXjN^{ou!F`bU<kK}>p*r3+@dNNEEr zU|+NpwUj9p@hL`utY4&F<_U_cxE2KhRoVm^sTncZtO*nyuPETKh$z|-us|8aa9*>9 ziCny79^T43Qk66`r=y+(u<0E%s?NT`y~`1cHF5`<QMYO;?T3_Y6TP0S4tag=CRonL z+Evor8rl*3{?NWJlG?s}kc)%f48n|+!__s-co(hb8PVoIBD9-;2pEAMV@M%Jip{Lt z?O86%euyN!wY$|8oc0+Z_b}K2_4m{Xu5^G|J9Yvpl%4Fcvjm?=lQ_l}t3{MdNg#1` zn(S>0r?*9p#DPR~TPil)PJb&TSVECzftxO~*{+sIHUN`2^t3mdFeVCwj$`&1;#F%5 zI?VFUBq<Ikb<T4f_E1fVdga6g6biWj<V3FNy4jPq=D^&1X2@vYM1hCXh1Dz&9&e3P z>gs6HL9d4Rr~E*PoOZ&Pqs9mT(M3S2)CJ69&vlVX_Yd!$C&JLXpt%Eov>a?`4=@JX zJ2Qo7YPF?9Zo1&p4&sy!Rwt_v8>3n;UW8l(PGkV=QFT3o-$Jxu4$bAe(aI!~_VgmK z1n3i?&d3DS`@S^DdNa=(U0dZ^Uj~;N{n_1f|CX`#5glbfYwMNNbAKxug^q`9TQsHM z9-xrj`<+^*c|(R+{3{C`R9vAKF;lkz$iyxqd-5EwMGD9MHbldgM94yY>NdB)mr?f* zp}L4gCi$sR;z(eGnqTWq?s|kgw6u|#d~@Mbu>y`nyZ%96bjJfuhC;zLx`C2RWRvYG zdX^1Ml7~R8FG3+%8qA9aK^>m10i;;qD>tYHq3_&6*8<kT=$RY?TANhpjO8^*KEj;h zYM9lB_Ep6vd9e)`(3Gxg?fq*NEF@E&B1_QXjN9T*FtyWe`tZb{F%Lm1@}f1cE9oiF zU`rFCQb70^YN~EWDyq$V=^O`~b{_`02?EzM3G%gqCP<EOv78%Za-`?T03<_L13H|+ zf(n2NB+RX9pLjs{-U$%v)<VV%C+<oT+GkO55bcJzFXJy_TsDN19T<<P&5YUulL~Xh zp=dOtR&8L?W|i&7a5UUX(L%Ie{9}0NdXC7z><)?}D`_ZFfp%XyZZ(hu7pOkku1F2W zf<LoDtq4j>@o%tu7aD9)s@c-i_c7O_AvH(^5uuX0swXBUURh6A3|dMD3sk1I8>Um0 z!a}|=uOKm@=4cJ8YGc>rVHvWnF`4T-egTeZ6Oe6<<o%Hv0U%plHRYHraVMc#Pti81 z9WYk6#wXS5#~wFuj1a5L9Yff0ipRo_(6)nPGncxmnmJ>tX2P_yNy*OCpe6k8%&ygi z43rvvFAZ&qew+gaVH+f<1L(wzK5I4R>!t?>MRB=nS2pC&k;b#NO5qe3yn;f<xkP00 zO}a{jvl?Tkh^0xSODiS~HgUTiG-)<S9qXA^;9k07R3WRHj_J~lk<>Oiwz9bs&Pm@! zwng}%NQ?B)V4$5$%}q>Zn#g2LiNGkSvudv=uSE*=QBR0X>{~uH;dJ62pvml#l9d%! z1EG{J-d9zg>+prhfx2^_13OP%3Aiv;PZ}(06W@LgZ)<B(LA?kG+5i|QMQWX?urWQi zA{_I-1G43E_~ZyJMW*6J5kEs=+qEDUm@bOiuv}Iey3B!raxgYTu<JtOsoZ{#3<tVK z{l)>~eplTC$cqQr5vD9b!opgKYcMS*)!wMgoP~5_-F)l3QNeRTbRAnmJIba?jjfze zeMyM=1~k1UK;sf`HozLb!EzH+0Ndt}*R3P2p!rqv7KYRrSP7^!g*r@hvg^4*>V=72 zp%LGT&|g5K+jFz~MJ=`@)sju^)=D;4@N_Gyrz=OAAHpUvxS9DUqe+%*BoO+VRdW)H zQB>z%Z931m!a@0_d%Jav@or6H%pzfH!%|s$L+YrLAvS6HR!y#;_|isNE}`t402e?o z41)#`0SKs=&H<Joa}J9Mw1n^*@CiP41g=lD^$dLDQ>D1qDj$f2aji&_Fs)$001fKh zpE?7rdCN<8DQKG|!DU;|jn9Gfkq2N}YYD4r`aMtj(x}EP=>QV2!<{p_v#W@gndeBz z>zGgw=t*6gk;Lr`moaAqrTUIgwZ>uEc-K2zZFjEa9(7ijO<JN7ZV9fd)5$aUn@*{A z`6UV(gb?Y<Cvy)GXd-=RX^cB}8TD%ER43f}wp6y=^th7Em9A;YA-o(vX7vgogBZik zq^d!#KKr~1kLT5lE6H`Mtgm?8#L(dwm`I6Rrz2luZEK)*auVD<fP4BG9gk>Mfy16C zO)Zi(FB#Hmy7Z;fLLziw=OZq4ZW<3ajdC2<^@M4JNY{!w1<!=m60?tFrrkw1kd7Nm z9k?9fRCP)LY_^Q_={Uf1V||7Ota8+XGsqx^ck9V50<zmr-|DZ49if3LxWFeK`})?L zdL4=_R2z)eH!9T~H*CUjSjICu=#7!t_CkSBj{->R2J*$#T+j;fjo-fH1V9^X5~1P! zRoud4r9OdrLcrp^Y?j^K{sy}eZB4V9GOVT|BJ6Qa#od4GBI*?*Zq>w$QavD18yCuL z>Jw@AR-L3!J_b>3+4UiOeYEIwVkZNbr0E0l&Sp3pg%utQI%Wl?x)En@s+dgrU;+<T zM|M2nqJf&h<8-eQF9vSZufopvJyAPe6HZg--X1It&s_r=)T&+)WbUM?hiHe@#bpCU zwAU+^d%f(c1ue!^MrBjASu)*zCxg<)Cboj|I|2X2t=8$`#_JJpepHz>J2LeMTyrW@ zAMYwd)OSLS{XJE{N<#Oo1K0<##xnt~W;9d>+VFv-yo#e6Ng^EFp722Gck?R@k@bvd zj~|M!YxYP?#aK6_kwZLVpb6y60z<UGsu)hMz0USiXP_#bj4bIOjVSZPf{UML(3-@O zO_&jo61MY6V*8t3P>&LKoC1LX-Wg7S$LWcPeM*JSeGo|GcN>JJIn6>g0uw=tPQ)er zO~9dB0S7giR|z)g6AK1aOD}<2xmE#UK^WqR4K&bgblp<}Vs=vdsGcU+;?*o@S--K^ zA)6CYM2{##3QNE0R8yfEM1a-zw3IPe0Z<u`C&$ZWZ9!-_PEg*^5qMWc9_AqkbPZvv z97il<Rhrf5@MN|{0ynPW3qflUOEmcQCva-(!Ll8UQ3uSZVaP*z?`8DNjYdQ&)@knV zLbRJO(_(Lj8dS0FfL6+A0@RtL+p9ktTC^k(3{7J_$s7dv@x^U8ldBAbh}^4tEIE=6 zwYa;s2khz3#=r#v{>31A4J7WGEcn&nR&8TR&D`u3%h{fkh%}onC_qO#Q+uwoUui-8 zxr8CFp|2^699&eV9CSUo#ulXurWq-D^<i24+KPinpnyO@5r(AqV0}5{I*|xYv}!BU z*==eC!q)1pa0b;#;-X{?))>_x?EUGRsNgrl+?=XwN~gUv)P<o6mO1S#l~WV3v=^qm zNZ<}EWx|v~OxyFcKy%lPjQxoashe3D^CLFaH9?{gFHyEb5^b-MxZ7++4g%z6VzjH; z*_uRb1L`loP&cN<I(rc$7tvZ#Fzr$-4D^=OX0#KtW_CKnFp#EiiAg3|stbG4!xV!n zpi~y<w&G4TTDsb_u?C2w=p4`=9>TgW$=5T)eOB0hr$QcJw+S*r6ATf13l!e&Lm~wC z3erYb*?^2E0#T1vqO!}O#0_N;UFu(OdYDALA{19(-6W8>;_sF_l@aDx4O~##7z)cS zRk+4wU}_h6eEQtWP57*mr}F+7>1zy)rWfR4Z+f@`s;my8hlm6=gW)o!MXOaZP-_QL zFoF7|3t$Y=t7i_Az7s2J9UEkApt51FD-Nu8MB1VTX8;=BCFm&}%w>^36SOIfhsoWi zXyP=VCc4zDajv$mlG^X(-e)oKt23v)ts)r_+PBl;XeM6!DV&Ubq5;U@HW%dpRz|Og zb#7pjlUIZqUVPgQ2I&DtOJfLltMAnJ4Z1q<L9DAt;(CY#kLnbYal?pS0T|e+LWjB& zV3f_pM+?gc;Q$4Xu3en*M1@v?Cum(OSwN_ktTo`^Jja;@TE`<Xj;15F8rPISH>DGe zAmofFKDAn;NQ=)%9<ZUv{q}L?`2r!=E@7b3xIfmT0olj6#}3r3HO5g_SPal_vA0PN zj)hN0eOA@?`RbQy?T0@g0X<{TPS{%H%YuP!`@6uY(`dGv$5LFZ1>(?gSqQ7?9A9mR zfbB}_4@g_|_7Iw$vlR;1%st(9tWzyVrmem?H>VeC0g!|$kPer7qcn*s+;v?R2^-!7 z<4ZnPNTOghk<do8Sr6W-r%GFNG_(QjMs`3=fr|lEMi=#p=ZyBlg|S3hNX3eKh7V<( z<~pkZ4@NU}9>}_fplZ?F`sUYb3@-KbPhCyDXGS|bx;F+2O+^;I2~bNyE_h9<PNwTB z7JBq$YHj*<>oNs8*#wN;=fJg*3Vrv_JRuw%AVBQeL^~3JZ$%`SrB6+Bzk6Pje$t{( zN;Tm~b-X;)Ds+VOMqqLX#HgeIk&jMrAv#Q0LQTBIj!M4qMDDXg7tqz7D+|CO0KLX$ zjCq**4F6>#`fcB3N-*vH<1gi=U#iGlHdI_`XObgyl{3|UBIuzSd)QTJcS&Pld8q^M zTQ^b8QkjOEh))tAS6qlUTQacPW<e1J<CBQG^{G*P0wDt(<!JxR1rflG=)pBNsxysc zWV(P`TUlzQj6UN6UVXpogGF`l_V02L;D#z0+ig~=kyJp;KaS7}!^NQ;jt6J?<V$ng z!ko5l9jja$;c9?>5LeiDl-dh(Oe(=6aE)#rpMVY*lbd8^<@E1FVB|g8x_C7-c=_Y* z^kY-o#H*O1X;ec(4y$PZr1#V}uO+NPSznq`4a|B|h5xE!((qWD-4qXzV^0nHQqO&} zAGhi{=Y@b7PkT;=v=F%(1K}<th#1Xa)RJo5*T*Sl>ebg}w(oM$kGw@!%wiI1FMh5_ zC{-F&ykgTAOb<ay3TEK;+&3z5AJS!plWA6em!>A7;UaOM9ddwG&k#?Q4nx(G{Dh}Q zJ*8)$Dh*}Dty|t9xqt=mcJ+pmCP_5^q=*%)&C_b8Xdl5zI+|>sLwTSq`bn!kK=i={ zT+SaN{!J7!6AVQ{_D6(?;|2u1f;uBw`^a=EZ)0M)560BYekZAtWs<KW7w9pyQquJH zs|b&fM`2OuF&M%$;IV5q=jH+UOl)k!phbNW=qKC#NzLH48|C&%lyw9YX&|Z#O(R95 zMnG^CJS_lkN}IB>Ba$?s>b;lW41jX`6meq#+uKzpLd4SZs!rYv{Rw!S>fVWZ)^~ac z9xX$JK^0OcC)F}=S_U+x)4S0LmwJvzv(MD(TZlR{b%wgpvg;)NFwVA?7Hj9gSnM0) zu<2)k6ZDEU!TLLHNgv?O&B;7fpDTbQzTCDoRcM;kBxfF-TbG)PSWiUYq+Qp!nrt9O z^ZFM4K9Dycn}n5b+BC6(Ah*`(K4oiu*dj+K8%oFx?<_aLmsEON@;rG-Fu&<!T9o<K zLw$l0zzk}WX>`~C7#Sr`MAS_{g5yw|O`i?@3Xu{0O&(*p0H4Nt&4emZ>d>CaHE15- zt>RkSzD2Kg@ofSvT5Gdbw6sYP)z~+y?{#yy`bFue4Fb=fM;%n_-e3~rIZW57s}2p? z4LPJ#HHcx3@jd}eU)bD_<gP=_gDZ(rQ8E+9IxRZsXy|AWR1fv#qgO(#Nr8I@I?tj7 zvbt)usItRCL-AB4&qC^qH(AT>VJBK4iR%%BQC2i+agzVJl|!Zkj7A6z*;!p104H`O z(bK)&933h4PtsU7zE+ixw-0LW6sf7y*|1EM76c46u2~C33QUIvI5{Cdb=q>I>yHjg z#N6z=pd_1B{U%DS!Oga@R^AGyajaMBHntD<f>I!}V_~Qip-67Zw5l<A{2>|L0w1do zY+A4*ApWV@N6LYcOTi4M4cDXdftdR;=r|~C)ZVR75*;cA2OzXjXyjbN3vO42F14#O z(44o@Kbst<%c9q+0$Gvfq*}%T$qCU78XJa3`<kw5z1m9D6tAgHLR2qfr7uK!)SG>^ z0*wgl9PvRHi!_N`hn<M3th*=u3xs7t_K$pK5gg-aH(<HKtwkC%ZLZP0Mr@z&0hIml zv<6Jrd;=+<{R&vq7SQ_g&C4b@eMXdWYsHMvksnxFR4^|MTJEWp$;pbLT!74$WLhpI z*rs@;U~1?rTM;9O#599YTL~iJErs<W)=lae=G6zT_1dK7K<@-Y8m;#d*__%`z<?cP z?`TxtW(^p5wD>C{PSAu=B<f&=)RQL{V9i=kcR)subA;sTQn%NF1a$#h%G}NeDr&4I z(s0+Owx-K<ajZdK$Xbh8IW>a>1HU2d*PbX!m66+^BH1J0LN}G!-(F>5&<29~OpgF9 zygBE#0Md-s#HS{f(rVYBhT#qUKvR=gj>Ld%eUT!1k%92$rgl5gtm|qkCU2a=*6&&- ziPWrSS4QvJVcLu~rwUyq)Rh}OdbA%vGSm}53WSnSrng^3REX7XX!<S(HJRW8%YdK` zoNQF-+B9v%qvfVMuVnL5FT#^$S06_8p`dG&msA3TYgd%a<_L%DlBaF<NRqx-3udwd zc=|Rr$Oeypu4pyd63*@Vgg~@BFtal*pLj)L($*kQRf4z?oEc_tLqe10HrRUQ^k!4| zqhJ4UI8+1Vs||9J(`hJssxqXw4=L(g*uK_5#5Vl>AXVS^XP=vC&%($PlUc%IIMfuX zF}G_BWTV5;bAwsq_H=+0O@MxvRsZFrGljf$H!jkht6c~6G`da9+NrT9(9<fYeYPB7 ziU+n{TD96PS{-gcg#p&St(B=8n8<1)?Zko<6tdL>hW6Y!UuxEtRQn|UPEokYu1P;* z<9`~?)->Q6f|R1ctw~y}(ZdkA8a6uaY;b96)MR**c9{AVqDqlzllbwdh(z^|3n_L* zsSUg{b%Y}nv%k)?jGM#D&*&*g+~uQIF6)TW(j6^s<TPNL)166{v~NEwCbdADOz-Ge zOufcRi!k1q6iqk%g0^J@!K+=XeI`YNISeTg;}m>qj&{A4F|%W+SHt8Z1o2sBT^Owc zqes62p2=G6C40~UA2yBWLQgeI?`Y3lN_2*B6-n&$mawI3EVfz$K5$9T%KD8}>mjWk zkXUhTcuWX;?h98Z=}#EhFqKyW;}NJ}e#wy8y0m7Q6omJ$iVpKYrfmj=VV;E4P3bH5 z61Y7eCQS&#?@EM;;=T*D1k8+p2Fz)<O=G!E6#HOwLa+V|SRzCyRt(L-e$5q@BhazV z;htMdnOB@^BT)&|uUhOoFs{M`eHm?_;uO63AT*Ec>DQ3HxL#lpp+*%9BLSv)vl_bj z+7$fy1t#L53rJ-(qzL>$uXP$!NdKJEx)vis?hf}Mu#>ej;Z}x62n?)zs#6QBMpV`z zIwZkvcS73hVZ58JyT2PNBDt|!!L1<Gye(@O2RgI?A)?-Wvb071u&y#2qDc)GT|_82 zN$)-c9^^p_YM`C;f@n2r<RDti5~DVWu@Mqk-t)qxKwaay_ce0Ek<x&;X6=tDsG5a! zH^kk#JUF4~;Pzn7Y_d{scoM)x+FZG-h!WDHG>~-&*3s=rO2&(Z6?33lC`eDkJ(xxG zL?k@b7F%T<1Ez&IrZa;t8n_eBwTw*#0doyQDP$~|{lh+`y*rAEgXs0y-}=>|UzCol zXSrQeWTRGXBGqX+8@B+kXxD-*$S<{cbiAxEfYa4Y`6l?cs|Z0&F=__UG#*84+lomF zp5@_+D1Bh=S4NC1zADGL^VRRnIwW|QFm}u8prtqkcY3lta{cy=1#+P|NDj4)3C$XW zcBjRG3f^&52)2-1_d3^wJ_W!X7~yIp+n#(ZI6c=j<deJ8wM27CPdk?b<a<3OXNbZ^ z{y`CVcWS}`DOF*rW5sM32+8PFNBXvw<mT8Y@zRN?)C-%MfF+E1x6;|WD+jW=9;%~G z!7zKtnr6-LrZBW$W<h;~_!9$|g%I>$c6cTDR61Vua80V;%Po|hSX7K1ID1kMu?3g7 z!rUwug3SFZd|nW`FuRF2IehrqvMyMNcbL?0ge3neb5sxB_?9J#dTyiRo$uL+U2kV< zKv@3ED?z|-r(zzmLsT0`0gF_f1v%Wg+Aa=6YMCz(RG&cocuh2BGL3IzW?W)iN#}x1 z9<!4xOtt8_PD5)TY=fsaw5IfToXNRbPLXqss`F)a^{L%=0}u+~WaQumcG4T9K`6O| z2glI`V@VVw=EsYkbPB74SC<FwLt~n(qTXIOm9<>38(i15?@?$bEymx@taX(GQd^|W zR2L}o^y@&U^&O8&smNc$>JfI7&Gnp8S{90FM|nYOEI9QQ8RYesvgUE06#c0oUA;wu zAX6KqLP4tya=K?s1)LIf6AH2EP~VnBxH^e{L;8W;D@34-MRBhj*`A)mSf5o&0EDP$ z;uq^+W?zje1go=sOc}T<ba|-Q;_lKar*<0%LcCwFHA2S7YnZS>R^Q+y*QDy4ZWzax z@0OW?RxRtZ*CWoXa7i`XC2<eDLt@^aCQmyNaUOZ?gsYYM#D|HDnwTUfeS1K78-}wP zA~G8(84edW4vEy4sx5;|?PfH}q)I!<H_bv7EHQ;})9JSi6Ppc)&sl0~Djs_K8mzP# zs2J!?QQ>VZRCBr+YYz!k>TDtb<cdx)?6W^ThRuq(_6g82foOoh)K5uA%4JQfn!Y`o zj+%oVGX$2AoLw8b8x%?>MTJaJ0uqUquW#0hV6@z(dg%j3AJW1=Jp0;OgUFS8l~wMS zra}d|5Y@P`h*KMfK4SM2U|+|p3ef74y5=tF?qNg3%f%wGlbhM>x_LDiNu5pwF+pu; z$D5()w5Fg`K(mPDi%(!euljCFr*jLShSi!>9g`n#2C{T>8k}|#<#JR^NkN9R^E!5h zLVDC72`VQ8&xi|M=i4OtL}}nM=2ll8`3X0_g49zOIywx`4^~1{o6%xW--}m_rVSoM zoWfw3-l_h!(Nmg*EHPApu$agT4aG*MdNqP^_fEh*nsJ<`rE}qlPc3>gcy&th(i4CN znXOC5B(3QTrPP-dt<z%BlALhzffVToP8FLI&o$*S^@V#s(J36w@#I@y%qs;L_E81W z^{;7NjXax4F#uJ8&q3oMjCpF6m|C?w7FCF4>Tf{aMvqzzs-DtJ3tVb7Wv&R9V><<t zL<?O&rO31@08BgvR3lNlUoM_b#w<RNZpMHu2PR|+Eh&f**4#*Mi3{BJ0P1{-uDJCh zYJR9>*Hjq54B~W2f#oDfEuoVV`VMMh?M7TzAVa8r262-ZG!1BtTMiyvyCEC28vuC6 z=kU$TXttoQ0YpJ|5>rex6^D@FBK#JKL`1Vr?YNS=Vum&^DmBJsS@rCC3|DHGYla$* z5B)`I7rn!!5(T$TAm=r$B2V&qR^3JzworG)VQ5gGT$_$1R#W;L@59m9!WP&HI@Fn6 zE+G(){*HasMDBcsMVaM6T5kr#wAOt#qHko0Xvfi!rfNZxOIE=~Ot%~?jjIj`?Gv_A z-262wev>$<Pt;xws%PJ@QY~@A*r+?7XtQy?n8}PJsfPp$eHEQBfiCo$)DeTOf63G8 z%wAKfHkdnMWnW$-jzVWcN8V<5)@IL9X@v3KX@s+pT7zJzZ;+9g){xA!veQWl+M?ZP z$Vp^7=T@~CgwZR9WGCC&vr+$WqkY6r#-;kq+@T;CYMfq9EClp}$^D6<Y$S2{+3nU- z<DKOWKvV26Rn=KP9gIkU5D!gfMWa*JhzgSxEgq7ytr{n)4`SI$MFJ6X&q4OBtxT<d z;T%wxsjmqkQ3R}zEC&aWCoRP2RM~I-2C8pH3g~%dW@$(r*52VniB=RR3XeblIJ2VE z`94NTZUfO4uoX<JitAV3B<!o2hCAmEekS4PLF&f6p%*)xS_^c;<GILPnrUizuZQw! zYcZ`CtsCSmfgfi!ng)woG{r^U*wCM*R92?g)fZFAISE4EQv*Asuo1*fGG?nb=MGNl zorOW`CV0_CaVr%reF6iir{L{I?X5W57Lcv=m^c$^0U{|l4Gv2QXiSRtdl9x;e!*#| zQt((9dm+-)xQduj4*}9g#&_jQ!cB;MmNh)WvYB%MleOBoCoW$iFc}mJYyv7p@C)V; zF@pFGX$G4AXwWbqggCd|h#&{7FULH{1P^rUv}D4tNrfx1@COu@p5;_=%N@n^ie`nm z>63Hg0-d>a5;D!2nnHav!)BvTG2OLu6zC3BGoWiph1j_Yt}|0)7hd0~g;@oC`WC)P zoSYh%Me$#}=6&@Y9M6gfrVj_x%E3BQ5X;$bwWmNpEBc_q7NMgX0IH30(@IMKvy?UU zZN~x&TLp@v3=}Qg>(;QbiWe$E18F^i1X|2Zz8HeiI0|;SGQn*T<kxmQ$v<7>wh2%H z71rxF{>`xBwy7av?Q4qfSRLz$%@0YcPxPg8MnwWh5j2B<dTIiGfBS5_|A)4tyfZ1+ zj6tsjnCe>(3iR!OF>6VuoV|_Jre1ByYTcTW<PJ8@H_>ZDWU%UF6zSYn0BPcM;zgK( z%<J%WMxmxX?O;Kw5rv!0mwJ0MWL^uKU7f+2!_b~Yy9f<vu&6uNiKG%|Xu`t|>P1QK z3M$j>#BJGWZnsfvg4J4!ech}URzSi?><Q2Q=z-?o_kDqATzsm{#yW0$jVa(dSIy_y zvw@2`eGv+n7-cG1oe&)SQevd2I%$V+GKq|zpb+U4i*sZpat0Eh4GzaagXU3rncYB+ zk|We@O@}_}D^Y@zWeLc(04)t+>$5WzHQ#DT$(VSph&$gGzYa|uL5$me;^HRs*X!X% z(INT<?v<1(^A7!%NK*I7RMFf6n%IH%8)f;9M@<QW4M98Y$n5FM<UqEc3S@=%JsFiW zy|{)&;^Qq6J>Pw;O|^lUs;G7f$#WtowGctgnP_+9&ZG^>G)hzw`Gz!p&kHig(M4;_ z(~_cb?C(5~2I1&9b@fS<J9u|xGucKuJKzgd3w278{)SW5v<*)pxSp*BiGH+fitxBv zcr|EEK+^`y1&hK}%~2g{*I6LBvAiW(2U0KTLgDr{q^{{Z^hnmsN#|y+$R-Et8R3M8 z<S|FWR`3FcA9#~tZv{A6Yib1i!m-a(o8Y@UwSr34M~39z((*IRAO&uU88~H9wThN; zqF$=*eGwG)dev7MH&nD&TyvTy_{2H#cim9*T#~pCsa$oYePRt*-|OCQ4BG>MjQ#Gk z$C<+`XjBTkvGw&f&5$6~d-=K!uw5GG{^Z53CS)VCvu>l4L(?P4XL<*kbW-F?O|*zV zJtr8@&E=dv(OJYMLyP*hG<VZ8JfX{%{xysq3(NJaOMLdmSRfnF#8If!g==9tbX**n zHX+h@fpmau{cXFk@?2Z^7NeUern4ov*O-O*dM?F~@$v<Fr>pO?8qfM`!-v>ut=4@{ z!E|vh6Gjb+jp~__sTQkRbt7CpP^AOV6eOODA%IG7q?*$nm>du1Y7gb|Fxf+rQDx(- z?W5M)kC#_b9|6O1mj?cZvb&?K>3JH@9#cs|guZU76Q?Ovwc|^SLQMzWaiZ*axz^VR zgY{kN_~HgR9^B>%#MqE|@vUvA;U`)o^*C3mCKJ3eT&LtTq4`FD2QaanrE)2OyKT@q z+2jn=(DZY!NpbDjx|Vajo1nU9E${_gNfQn2UwrD;#&MPjsNCGr6;@$`agzy=PnGyR zO`!1;nxH~R&suuwSpsU&Qa@aZp5Ee9@9NErcRaC({%qW+UDBra`E+SisCQ1PpsH(4 zqEgRk>r#5^LyVhgpy{3Fv!r(}Xqa`Gd&G8NcoQCxt2-qj4A|taofS8|Z(F=E9sZ`p zr40=ly9h<8X^Cx8>T=dGdd;HA#c@8O2P!qVnenC;0AGn+ej!(?BhNz3lKIV}NlDcM z7Vp~5E8N<yXlWDsmpQ#9vO}wInue*`CleWavNU%LHob!xClS>}Qxff-B5+k90|8v* zJcMRl``vmsP-ijqaf|xST?rD9PMJ|}vV~!2ux5pbn`Ml4=DVcv2)Dx(Ngmm)v#CPL z$lkI_=UEAJho;n<K4I{lzjd#PR|mZHTqyMKp?M2hO6#{uh|{Qn8=lLj31*i*J^24# zT=hXg3`i(8=VMjE%Mc8NNXiKUPgMKPN+9rMNo)OUX_A26_=={No1GMV-&cZo<`lZQ z>F$TUGkQeH$~@;^iyiJ?T{{$V7dg8O0bwX$)0#VkAbuvc*ZB@~TKe&=Or?S;2AYdk z3FOy)m&7F+RjEsrD0r>Z-*_7J)gKdU&$u4?)l;3Co(i4qkJ(6<lz<T<=|EE#+W`RC zz>wCxr)ItF2T+T-OQ`6piH4z-I#(nOqh~_*PjXuy=n7-sTx{4_+Ys`Ap<$`CT=WJZ zRQ^;!tiD-}{YEVwUK$lep|h|m9QTHI-jy;ab(>Bz2KHEZsI4f09hKgI+u)E~)NGnn z0~0tL>nBQ`3HOGq*YTB(GZlb9H!?wLua?Jj-P>_mO-q5Bg&nEaN}9=B*=a6GV-Xd) z3UcNLx34RLY}s$e{U<P(JDar}uDlPy_q?!T4qO`5r;WZuK59e@xhB+_(@Xa58iowz zyot3Kobd~gKPMsniC5K-t47wv=?jiyMw<|IUb{MkB!)CT)e+CbcBvSWtc@s2aYU^N ze?-;`V(T~z1i|~?I$Z<GNnUJ;0)hEayImP9{MXJL@E0E!4e&;r>x!hQdL)4oqx~iW za{Or2+MRO*ti52(7J--<?Yo(%`Ont*)2QXyB&QI=&@?I%!Hr1*)Dp0MNZBo;;$Ek$ zsH{su01iG`Ku$h*TFv!&z!9;dLbGK0l7-^Z!uYPh4P@v8iiEL%hrl67&&Gfxbh^~8 zs$lqfcB{TPRmu}*F`mZOd+&zYIE14dOwtHjpW~kpp=q?1&I`+LY@K%c!=ibc;y}eJ z_0u6J?TV5E5i!4^2v~RCGUGC8iAfdxA=N=4{?QQm2EH7Oa|=rs;{8#XgU;`a3&9M5 zw)s%kvEO2d&GAeBMa^wvb_61sNgYB4sHA!@oVT>Ch=e<f72wqm-Gd(Lu=ad9#b2|t zYosD1Oxsdp1cwt0<AXkrgK2iKjd1wvOuxS5BcRnau1Q`>U24@PSX=C4J#vJGeWGx@ z=n<x%i)l|PmIiIY?k7uWDoibawjB+pn>+@GaZTY$dv_gdh}-RDa9J3QM#}z>wZ9$g zq9t$#e+R8~%;I8SV}nxB+bOGF1Y;_Bu87p?YTAfN{R13!kD62i(F$2Go8T7p5Ud4# zyap9DI%|X*gFZ%bPWPmnM5%TI$;~8hyL6y7gE(slYOootj3&~_UB|Sq?sAUe8d0yc z+7Wm=cgC$x@wz5Cy_-W(xK^ti&-(2Ij7XGF)iMyYg=KYKUqgM%a@11jK*rs`fvods z%(Y2-CsSVq)lCwpsT-LJuM=g$9MB%27j#+>1I+XgJ;1tFmf6~*r%^ciY(s0=>A>u$ z_QVOeLW`@Z_u^_CHM(Idh>gTpCV<w{SUl^PonBl?-k>QF)TT<B{dt=AtUYZ|sot<1 ztxa#qNIbaVJjbXlnaj0wBBngEv9{!rnF{-}z2X*dC0C#IsmJnG!T5L6lj>A9srDp{ zaG$ldxNbZ0!_canIa&1Vc?ibJnjJwSj&}T~L=D{pt4*ebcqMa6%v(5L(Tir4EUsmA z`a*<p4wY3mRdzR%cUpn>p#4$k7<f#dZcM1r?oK%EX=V_Mkx%Yru-g<oIr(m`$xPgt zvr#k9z5FKERA_~|!k+?S>nf16XQ@Xul#r8pc`~c5J=GB3$^=K;+J?Oah5<>2#9Ppa zC;oMgj%-SYZXphNAN`zf;$O|4bfKneHcL?IHJr?@;O)D^+2sVNuZan$op%oT9j>V) z6i5fVGH=!KmI5k?L*wxi0jFs42qj(PuyK{JzNg`j#s)T+TuyrTa0<59R7DdP1&UAx z_Sk^YL(WRb4hLfypPs==oXUEVblq2nSc;7q;uxkt@VhXv5rXXK+a)x?qIz9=#`FaU zMCMi<S2McZR*q1hjqN82(Q2YqE|a#;*_uuZLd1g0p1Mr)=FAE4o|Fw>e63j-)<_@g zIL22zFkeKQe$EejJGqn;RG?{yPS$%ec+%5zqN5TFf}~Nnvb9-#?>sG?$0%szYMAJl z8A2&(%iL*f1&NeQQBKNA!^oDYgp<2P#8`f|OOF$Bg{d+5Wp5%bI`!lm83_>9Fz-B> zh_YCWSg;5yK7m{oSWx2d8rA^>A^wBtf&J;0)_vlr-Y{n=S$fPAb6xb*dK*Y00&q0a zk!fBJD3%Gj0f5kA*JK;&3*_SBga=35Ln<HjuVV=D$K={`P-oMdMC^KO60%5TWs{oL z4+^!m-At$}u}Lma>Dxo0iF4oUH}sy#Flcd20aIx$tL<X5CRs*^05!LtP&MYLoM%oD zoow>3LKn%B0~BZ~oI2ER=}Yi6pG9r%Q7D4#!1XLxKobMHVWP_-i~v*hmY0jFG}x3Z z%yNXH*u>>(M1$Z>*w!iyr5_9W-c@&#wSu}4U8o|>y;>s9V11XHE~q9?8l6n-VQqS7 zF$3GZ2~Pk0Bcl9F?SM9e)XoXPo0w!Gj4M|Gj*Py8MWKdwE8RVfa~^b46(QQ$w&3!@ zu~|Ges&l}ky6r;gn36qu8~Y8arNfXQHOj+oQbGEgh2Bo4$L-zIo>@Dw$j~)n=Gl~u z6hq!Ihr2Ep;kdIyJ^J;mzn$KoEz@AP6b2=jP8uI}D6EISsZ5zdgb*YqrGZTiu|Lcp zFXe6DGbx(_-R}Z=TFW&weePTk2#M5<eeD~%SUY_@Y0;ymn%Hl{lBovRCtdwrhbDnr z1|`~ej#{0aW4=U1%*rUoal}U`y3pxYNwu0=A@bCW$nq6N2r6L-KHVn)4)x_?_k3iB zk`&y#nHKeqk@;RH?M$&_DPEwEuEz}Ys;p6P5wfXATuKL{@AX?G7(-N|@yH?F?KYAn z^?H^zKVS4J6hmtygC=#o_q%9hPE=`!)oh&gW-VLNFpeRDzRJ2ZDLoq5f^1;CSJUi9 zg@jcUMpPzXjK{X=&=cnZn=nhs;!!(_L(ag^)nXz}fsJdKsFe~sX$aZRuqG>1LGwc^ zU5pDA7NL@xKHx`3y_>ERq}EtV9X+E;fi>^Slj`e*UI2RD7)LFQ+f=J&wX#z|nr4r3 zd|HO8Cc4)N7(`;w+DL&b3$nx505x#WLTTp2Z_8!{I_%RTTIo;)KtUq`q{lCG<%YE0 zca6fUDtp@&ZU3QYPleU&GtKsN=W-=AI}~0zYZDv@$#h=Tb9ccM5)5k6^GO8-fubKq z3|)X@Y`yw}O2+4f6)&sXn4X05v6sso45zplaBazo8`Y~I6W~=t64Y`T&i;0a0uYf( zz>^)p(3|IcF^guxfO4Uf;B-w~9#u_gOtieV-C{R^Zqq{H@uWYl!MxB#z8QuzBb180 zN6n})Nm@(DMoTAz!D~MITE2svI7wjPIEyIpwmnC)jtvb;lD-;(4zJ~{FXreG(87~x zI6F5j>N=T4Y-;3JE&A<?!pf>^8(fi)u^<RuBY_Efs?@$ZNm|n|N*;P@V<WghO9o#^ zdr&V{+BzccgJp6g`C|$ujlDowz8241$1SGhQ<nXAdUh~<ECnpTXa(fnG7GhB_5_1A zt#voxT?Pe1DWmVCJd$CAbb8NTxnf-~DXSYafyo^5P|~sNM`D+TxIu2Nz*o}xHu7s{ ze+l(p2Yszcsu8r-y{VxSyWy_1p=dZRbtht2bzmcHNJLI_=^IO)cs0~eY?8tO=T~3# z>n9<}WK^gpgZ$YkFo9~s{505EPodD%poT@R!pLh=hkhhRcf2JFn5v2nc-Ld7(z;#8 zr3pi*&rWIWaHep(z^Qen*1q1_0U^qcMFpEY8PUuQp=q{t`A+t#8czq*n@AfOrDBZ} zjR<hUFr^%nhQ}x%SO=yi+PSoe`1;{IoD2nuNyHE;A<{Nk=7okZ_Y(_Pz#M%D9TT3~ zB8^kL0%986EThFC=b9eQdaM(5+R&`CUH$^b$pF`^n|^f`z9`ordeqQ;+@PX+9k&?* ze@%|8cSG~NXIf3@KxA@zEADUF13~<n;8#haxVy6Uw1z?t$v9AftCKOYML=qUr)?8c z+2fwW>J@|5JAAEq1&SU;;^7d?rUj_h7*{~pE*inJ^h@jDjYv&Qm{ZY*I%FiRCE9X8 zm7GhH=8K5eVseETT_>se^yw+N8?lsWu*_UODp+L3ibtZtCrGJSGw4XPqeps^v1~OW zS%7b_nh*-g$wrSvkdm*?V|}P5LUW+)<jVyOHNij-9N3`i4wpNF9Rz`j6I$Iwt%2}u z&&1n%DCHPeYO5L(L%N&_Tr|qo5pLj43!!Wn4N8!?9{#mXxd!%E-Gc{rHN^7nibutH zgE2YCztKJ7Wm3&R<)|cjpG{|7+d|!*m2~+di*8tA5x*3gcQ8waWI-_do7<w#GQ2>h zZXhX?AjZk3c<EFHKo}ukZ8GJN>ku=twp~nYWf#JD1qH!=F+7E$B}7|Zd<-KhC-)AE z6gwTEY)dx1Ij=V+)IR5G>_oF4V$N{Q&i=-*O%B4TXJC7Ga#{~)q;@VQyBSF++_j<) zt1EN*bPPbZaxFwnMhkX9;nEzeLB<ktMZ}?@&arfQ@Nc0SBRx&u1aMeJ8%wW;jI_Cb zj<JQEv9_eBWYuYdVuNRR#af7)?FfoBvD(~3;}&z)*Xz!2@>TAbt-hHPMq(4a>GcX< z1)=u&gn_8(G^B-rSh5Y-VTq*ss$%9GR=%UIDFKfc8uh7(a9v_iIBOkn%Iz#rcXS*x z9dPNA{58m~RDqx>?yGH~r!5}oxYUlU{c%O|+(KpuXt>WHn5qcjv7#ugmP=dO&&tbc z99=FT=dnhk#rZ((FeE=ob~5A;y8YL0o5Rd#LSJ*)tIy6!7E57&oSN&d9HepLh**b; zh2a_3)MRtG{ih{@b%<)`rWWBas-d)H69c`lU~>#2xMp<_g(=${lH=vj0$g#crY3r# z?OANv+dfhWUJbg8W16=@AmyR3KqS)<s*!>Aa8~$saLO7#d<3&C6D%15(eI{#AYk2u zJz4@<$?Vfu;CxlzhpaTvj9R39&j3Sw7+P!;;0C5{N!WfsNLM!}o3QQZf~KvCqca;L z>Vzx(8+NL;IA6nOgO^Z`9G`T-h&4R5fzDMwB^Kx?_lpBDMK^2>RH_c|!1c2S6;ztG zxxRqWtC~sEhF1CI{6w#g^w!*#4e6VVJ&M{;w;l^ST8(TihK6&L@o<M}nv{Ukwr%X| zi&NOa1xgGFOsl>?s$&J-OqLuLJp~3vZ<rcr-{(TKmS~R<$)M{7y!JO}cDe2nqsBBJ zlFDVE&-Gm<k1`>G=hLokRktq_YCXZjy`eZbXQ=}eYnTEBmdQHRmPkERNRD=OUbhn? zM}p);M6>qfs(@s;>(E*RN-=qgkW4gJM791oInh|00E=-w$ykrmQ~;Bs62da4(ISLu zxJi_nW;QfpHdGb&*bCephaS#$kAhO8F|VH8luNKyr)$lFMDOH69y!Et4TTfLcpe9V z$>!7=ZLPNJDU6TR3UtA<YA;1r9L!roPbP*ul0CyAzVfvBOzTpEVXU>+K%A2vltwM~ z?I{)+vbf4A9y@lPj6wn;?MdR8&dNj!>M|9(gso+`SPGC+{ha7=1G^W~Ac!2dYF``i zVLgSW(LF;C>I~vvwcSB2mon%ywJxgD*(+*6tWC>YuR$!M(YgT_)L}4s+m^ST!3lS7 z)F4j11~;ZrvGOJoT!*?&mBg}+GYIKcQ3ltD;cPQCWdT3gtp~ci?%Ol^$E4fHL`s}! zf@YI(H}52<P5b4jnjlr%)4+7E&Bi84iH}1O;dYA+4{!)XBu0&qre@HAQh^`I7lC=x z7Qp~E7;%V>CbXA`I@cby#&Z_~0q6lZPkc-YLk$edjG8oNkwMuMjqF<TPhB`Yuou7{ z!KjTR+dWxpmV&F(zS%v(vd7^GU0`>$%t7gg063AzV<&u33Ao%F(Zi-RnfTo|k4!Ne zFsRs>AndENhJCihAz0wRDH`n^Ux1PsT_M1Llu}MPw_TfvZiUCKZcX7PpO+RY*fosJ z-Mek|6DRC4Pz73b>1V2A6mHTvN(MN+4Ob@=?WlPu+TY_HSbz+HE`pN3#yuC|MM}vH zBNTrHs)zlCedow4sh?{vAl>&o{o25rP*a{G_V*zdb?K(5v`b7FTvgi2{^8P&8A2E3 zB4YGX!JIZYO?qWGLn{*XZ6o=v;U8OrB<zi;tC{TMB9G>UtY;pX_c%&7;-w&8LFzeF zZyZBH6VqD}rkZB!lk;GEm_kBF4v3_o+bIG|O^SWnPJ)nE5<lwmil>a6fNj2j4e{_+ zFMO(E*!IPO1CwC@P&>dJ%%MK|U1C#|fc28)ra~%YAV|4`oLGwhCf#u&J^EMsZmPl4 ztAf6v?8{3EaD(JX7+R9cx>Rki1Ta&*@jj|_2Y*etY<P>FW`uuJ%~I>#9M(o@Ot}U@ zr+cN9kbp_~LQEWbF27PL#D3TJ4eRz;!+)~0A~uAhVeo3wIBHkbehKj7_|ZJdLlFSm z(yE^7Q>MXHB)tB%bVs<By6*`hEwTIr(!~+%c_3?1AKN$(2Nw+%q<)yz=Bc5lRf6Kk zJ7k>|h`D1#TC=YL|Lw9$afff&ueK)Ouf|cNoP@v<WrBAVa9%g9iu*Se56zu~5Gb#t z_U0t!9o25?g=xcD42LL0u3i&9HtnQv-vO$V{*L-Iq;pNJ)68qcaldKRPPdGZKf+Yg zzB-*FAvZK{+q1V2WhYH7_Q*ac$=pw?m8)@%+TC*3LTz|BRi|3tdlC-}N$UXAu4W<V z%dMR9t7g$iA~f2-oHXb<g0Xec#x5JRje602?+&CJhe~7yt#?pU%@H|nrBQWjC_(d) zg*`%NVQWMo%Y{JpAgXm#E9grIX362Pz<4c$Lbr;KEo#+HW9Kt{<Wp9YiI4s}N{Z@k z*C=Hmj*}rBcrS^}35Nd>I(lTUDfh_4@<2wZw%riB9jZcIlO78nIi{xP)v^%{2co|T zkD4aI<f5E_!KT*8)OGH(W!_K$y2V5Q$_Osdqz(2FG{vAs1TW^mRFy6x&NgG}U#a{h z&wO_*g6$>)+O;qo8Bb(6z~)#?%>}3}fu1kbm_~Y#FDVt$9j*Kj0zwU1bePqic$sJj z%V%H$R@O5e7oECPHNEVkB3fi(VSn}tOIP{DWGd+zdvU5~0t`a+>%p9flOov33BQrJ zR=G2R(lIoqDDx{EJ&g$qhrBrr9E54Vxj6y9q(}^!k&w39$6+!Gc(TGTg_+YHj@E6@ znwKC&f~-qG5~NDNCT2@fPA>0&bWFQ>SBoZ1t{S)QtR_n<a$gPJJ1HLXqqhCjFm8g< zLObLY(IlG0lnzvXTog}rh|U>G*05Rzhpe9)*{P@v_XgB(Zp*4S?b7KGHeb`wa(0Gl zjemPvYFsR;3_X@Dv|b|-F{2jAQ<o%~w%CY$GK{#~iB^rA>vO0IZ=Qt%DVj;W6_!-k zj)v$JjzvXFO?yb)HjFdo?URuHKnmIHQ09PxMo{hRTG^7-UE6pnJ8pPNY1YVSSN#RB zQH~aBJ<xTBOQc&Fxwh5H0)ZRTFNfPjS~q$_9jhp5QZuUdgkky$Ko8<*tVh91Wtyj? zFttM_j93l^u?cN4B2}`;fI22bl|+@V9#<S&^44iZm!C8xc*9F5U_q)B)~=&fSxxHT z6w!vsNc2P{ouWpm`j|rwj*w(YL9)fNMwcFnR6tx#&zkhiq$yn&1gd6$2x`Y{{<cOK z^3{RNkp?#aefAq2X7&YdY@Ig79<Rps6WUlD-o-}O(9{?Tnr1|<By9_I9Du;|K;qDi z-on|_iKQKS%@gznPyR3?PRJ%OtHO}gSd`kL|1?}~A~a@X3U*SnbFYvYgP3h|OKtO( zIk{>_+-G9jD~e4hXumLSDy`cUv1I{OdM8xV$Sy?0q-@aYNeKnw=9mdZbmoSqv#^#; zUvc;ACG4nn8#=wfuRdTRUaQZGgzYiP8}2+S)F;*09FRm!besEebi{f>wR0)0OQ8EF z2O7e$UBCrJ{}f{bH~F~iFmX>7-B1U*G8(qamK~6spi7v#XN2j_dA*XuVrp*JAd62M z8U+5%1PQwedRIv;tNnGOg)wg1<#oV;prvaw+rSzE2>Iz#Pa!92Ux5vszVnWcb?X<t zD@n3?MZYiN)U?!gQ;Ut4hS1^FKPrq`il!<(>a!4$vO$gNB1l8mr?ZL*yTs%Ur_-eu zPSsfCk>X^gW>|NCtb<lfdkwEHSIt(HymOApx7z{p=T|r7v07zHM~&g1jyMz8(QJ8| zX>DHM=-+cT=j;HSKP_IAu@(QFqJ-lHKU+hNvQv9jR41A{fmnxdCnbaH-<WQvwUk)# z$DJyJ9xf+97)XIioayLa4dH0rjhHNxPKZfsk=6>z$Uupy=Of8-;56^oa5~{%y9oe% ziZ+QI?QYLmm3HN(XLOMKLF8?I5>}S$=P0r5;=+`v)SSpvAZm>YUTInK;@EHkr9k`i zq(E~PGBB{<7|;!eFJ^c6SkewXupXeQ4`&<tHMw@gOx(s*i(=F441YTjkCv?oB2f$A zhEyM*S|r?{MhbzoUR-B1RkDa}5Qh||3mwCg)NL7HLnvy=j((^UH3_M(r*-XDRF@#7 z#@Dyil`KFyR!mBowgL2(st=?dU6Q&RI#BYMG><wJ1i?9JWW$P2|ICoR9XoAU)LwG* zZ>X?<y-NR;0@ZL5^TC}qWG937NBe_WUJ|BZo7qKT43|zaiiEb6M>SZ<6Ix|^oI!J> zULaLd&sv%Y>(+_Tj^*EBsog$+1PK(8({wMTFx0DmwW5@YG(li)IV=X?!urU?J}&lf zeG)a^kpMsZ4Q?UgHLOA;QZ)k_PTe-fm}=&bq`z)8112U%F7Uxk<+_8|^olXs;p1Sd zwXA_v+<nj_^BdWWc2`nucWF;M7hzeS>42a}jO;q;?JmtoOPA)~`=+&feKeyU>{;a` zg!m3^+q;-v0iqd*j>*niL97y`2qc|NO`UuZ5AVt_!qb6nzod;^i!}=wgbD<_E-f~a z5U}&2EwTtCs3{nlNTrhiv&>6C80AO~c~tE-c)pvptE%S#=9OO8VXIDZm8~46P(07; zvGma#)I_f&{=^tq06_w_{*mosA=w+N9YW&20L=)&5l<$hIWB-C?TKsBq-84fl#~7h zD<ERfLRbijPsl;Xy%wZ$AVp@yJx-pU1uNXPSDiY0C6bYz!C%be(MD2Kga(A*q+Za| z><S<Xz#^Iu1;Bu9ZQH;)O2bH?@K)8M+0EDj1@53ZOKnP_8Q@tOpY$$3-u9{|DlJ>B zW6QO#e>n*E=?GE&hM@Z{o7B@T&@ic4=?nh}V5!cvZD}Ww$AR-tmu3ahn*g5p)vO;m z>vm@-!L()QHpQ{~s4PiOFmBY3PgLd@H}WgUQz_+1Yzfx7Ro?u@S2{;3Y!l7MGPTHR zp04$VwJiZ%197E7UDq<)$34R~RM?uTYe3`MXCLz23fC62M$|oo^^p_L!KSKGJ~XP? zWv(ZtF(71&U%UkpuDut)uJ_sUb`ZJ_Inz)S+KXJDt8SbO>{S&`{v^1^G8hIgZ}y!& zQr`_g0CQSg>Cl8qWlP*m6n5D%ZO-f!ETru)lh`!?!9OTkSWJx94<54gm<@(id(cN| zuer(^OdH3uHchv2pnG;6L)RWJfeF~Up*_?I>@Fcc39;b7PR8N`Ai!1bEmB<!62Xba zO49ln|9H(+C>T$lIu3$6AmahR(A0B!9EZ5nYq=S-N*aqI%vgw;pGY`cz9x?;lqer9 z)V<3H^R}qugUgz+`lypYRrr<WM_Yra3I6SC7<szNH{#mu6xgxcWoc^;>C!ymAZgJK z`m_&TP$7{^84?kwi0HD0CU6C<l!^-fuez;jw4=12u9;Smx0m+!3aWrlRWvN{O<QwB zWt(MvG*6#C0hGVw2z4c)g(+#wYQV1S3))7dOx0~_X>6M9r6oyrI<3yev26aGQN6j4 zc+Li4Bh0cU+~`D?HorZg+U)5XjC612T*4ds7C4W=t|Lc0KhCSjwZy_Sk^#E2hG1=< zJun0}0;ZC+XCQXhky^*v2vQB_*|?-y#od$7L;eOB`BtcN90-<sm@g!H&SnIl&ofvz zS-`2zMb{bSHYptMs_GlqY!U)+*|jW#%A)2h$c;2rxW+vh*1HXD0q=6;D6qiGMgx0j zft{f{N?e2y0-)uQ$%z!HHuO!O_692y^`D?-Z)Ip`5oE~}(P8VNK}}M@qiFZE-Wb$X z<LzqaoVHVGa3PnfQQQs>TS01(tCIBmj`G-)fjewaW5KP!chPQghNrQKz#n8=O@aPe zs62m}BPt?Lw>Gs}2l7j)G-IYo6<iFNNmAbCYJ)a&1Iy_Ck**ugL~j|~N?15#age(i z_&(|k?Suj`R6sTLB<!A*h*Xp?K`(d{Tv~LXOsyp)4E0{D?DKw0fgK8?ry@ntp2DbQ zPc^3jvztQAnu3!HHI9WvEpA@>=vtT1=x=N#-7Gxa4kj*SY*+v#v}S>-51h8<P0vk! z?<EVtCK_+$xTT>bjzm;WG=f4<g~yIia{#5_&Zqk}w+|ENo7Uk(oYRzc+ru34ERX=M zPi-Wj4lO4Kk-J!%DFbwxv=LZMYf)zb#2K<ag4rD8#ejbTx1BZ+YhpI3YV{4w>^`|! zs~}WQlh_Z_VjvG5w_YO#HNBZQst%ebOw_OJax3Psbw>I~kbt&a;qn7za4Lg&46PuN zpO_uV0VNm3fHItAfwG}R0&J59dja%KOp=P{;uEmigmCdM>S6K-LsEKV{|+3Z>sgcT zDYfT@Rb1Ijq!o(kP+{$c8y;<%+j287>bbvmf<4G>Tz6q%QWo>aX|J@xpy`AKv;@Ay z)TT?;?X_<^x$Nv3AFPnksmW{Dqk!1Dd3!>3PQ_6NM`TQRM}8e^+ds*@#x=;p{NH)K z5bt=1LT2|g9XdSC^Y(S=?Bqm)pmLgm-vva-*@M7RvoJ}7Bf^fom+I$?hqN6WgU7t4 zv@tOnlC%-5S(~EMgxy3-B=xGLz00=gteH;{ZeZzXMtenrO;tuQF;Uu=*Jm@B)w6VI z*{{P_`&Nf{nzvG)bR|uX$U}$4qwn-h5@YFsAaAYI@zPY^mcra~GaFQ`1~v0q7}xf& zcJC~TtRqqKucnG7R1F$Mhn6x}d{4{`ZBXMw!-;w}AXFmI)JijDp>h<Lj7BB%)Q%T{ z1yM)cDZYq>ZIt3f%N~)z+qbQbECITY#5hr#6B1H?uP9`UpRE_pZo)N^({d0gr>M46 z--~UpBo=@ON+l3FKT+w+p$Kiz;pekLu9Lk*a@Bzu6nUqiHq<I6{AZyBLJ6s>6SVzI zsN3M7N@52CX}z1#znX~4@aI&#MLJB#G&$qC>aMERYv*ETp}m1fuWD*hm||D|c*U(X z+Q*MxEE3fAaH1yID`(dZ!VZ8$)~W;QqEaNPPa0SOwQa7V&{jx+sIYY)t6i9&CgXNM zqRr0G_E*ChY-@?hf*u?PM_zZ|7hhZD9531vVH0aM01di$wv7%w<_NuN8Vy1^L=MVa zCkS17J~PYoGy$`X-8O9-`G~eCh*7dI5*OF}@C<842DcFe=^BR_9h9oLjx!5pZ~K|3 z1#%(5lBAN5hophN0qeDiqU^;_S)?2~fk{PHwQ7M)oF-nwg9pn}IeE7!T?C>on=nwi zLm}ZU(~E`yU%bFVzLn-p;HCf+e#Rtx@-$5kl6RF^HKkM(qbk)sthez>ncceLnT>`M z6->LpQ|Zk(>*|*zP_(s{blj=je_Ytyx=u>=BCB;<L)|x7`l{_6m?@49);<@5xrU1= z!XkYwA~ZhAog^M>x@MFXz-$g*{P;b&1b{b-4R3S>oFU8)U%!C%EQE{8Oqm@)2L+(+ z)37Z|JE2;TF{(B<u$<@~Y1%IQV7BO{@vWl+W|l@pXSxP4Nm~kSeb~2GSJiC+uDX_p zJAFqZUCiM^U!x&Gm2!WjmG_M-{YWzjd+OxWU@>gI-1WGfN^#<GPrGPH)v=T=Aqemi zgqjGoC)&>kPwP_{QPTzXpt_9&jUnMp`@|zodJs6q;=I?$1*%(M;PcT;58G4Ixh8bY z*@^?+(a>g^^gWYW2vL_Pr7^*!fg@thCqbnA*bi+)TE{?f5UuhOldh`lQBB(0G738Z zBNvIdG_QRP3UoPbqeN_xGlZ>hFbIg*RI$`OwHEh8NZ2(@7Mjp>9Aml>3eAx*eTKVI zNEI?tm`#z`l1-eRau%x=3&Nc6-;KE_64hC(O>JF=gNGVTiJp;psUrbh0<*P~CL)1I zfy*C@(=xKkvc1v}7`l_!RRBv1^-?V4i>t5&9(Cyt$sPuhPE4)>*9nJJKh)-T?zK#H zLu9v$He$@!KDx((^qR}z<mhH1Ue4l-Hz((54X4sh4pKzn97WMv5_m)N_Jk-{{t|hG z643n6EX+3ce5fj~vhvIUD}ZhC`e<P{j-+gzNEB#u!%3xQ6iHkkd}`W#&v1?E1a^LM zfCc31XF9TQt);oC^^z-w1epI+7k&QCz4-Ri3<hs{w>=S{*5GcIn+2+tCJUb4J*>e= z*Uf=zeP%2z(RRSYGNN8ep=F$aF%~5TJy;aa=(1ItF6!PyR=BAV5u}tLLMSK1kKJI; zlgXnzHjX=LT`)pDMG|Mr>jHAO!njZhe8_kP_~I9zX4JEO5=N0ag`wSjOZdU7Q6;2l z-RA5?pnunMF_SBAk7}di0jN_aT0=;>MqJ3$HMCC@7U6nVk0uTK&K`gqx8=h52o}6n zo5(DxdjOD;)1rq18<GVWxt=hAX5HH3u8G~{#*BhdUqQ{B{<X{a6oPf9t|7FoZdiS5 zS-GZ-UcX4eq{K#u7KF(xahV)Q9bpv;&IEJI^P!tT2!nZY5jfRsi`sgiZLJ2Crw9${ zsz(*Z$B{laJW}y#U;<K~>LSqQ)_PiTfK@lOiX}P*8&adhpff4A_w+Kfnr4bZ{41bd zX>cfQ={X@Ljkz8-q3QUsRc;|&z}SRoMWYZ+ZH?`|5^AJcgGy63^`=6&!`kN<XrEF6 zupF!X4qG1)u+e#7vM@G)EZmMFco>BW;qH-3ITv`vudmFQaZ<GarGH1|2y&v|Xoy$X zs;SqVTe+!UH|A877?CDqQ(8_1`KWW>GP9J9Vv3rsQSCFWRbTa!T~5t)ST{iHekjZ@ zBH^YehP5FaW3&azqmgca%mPNLE`qApgo8MGZI5;O2oxf0s%x#9CI?TmIyWQu)!0Or ztm`Ud#_K{Mbh-uE@d#FxCwGsbRM_z~V*2C*H*=6RgV$X@ya#&d>&Ahm$zIs+>)TVE z!m8lmZ9?=#oYuP;CG7)VVWSS$ifb(`l}@C*3~~s-2W)qON-m%Mtjo~VqN12H9C8zx z<w#1iaC#ni_?lCt{h>^pZh7Vav^cSPOzV2ou0Iu%Lkwu4FAjT&wK&_23(PX357u0c zi_o6qWW-_&IxX{E*cX@L)Yum3g3!+Ed~6jKGI;NV0Bdw=M{XR{S91Lr;O)R2B9b#$ z%Lf|3>EAEKar72`t3aksg-4-U@4sLnc3Es@BI#d*<Y@pEP>95=={YfWd8aa90ybf_ zPoM>&dGgcFz9+aMOY%T-DVb@bv7uVAs|~5r0MGFa2O(0d-EzQ*ma{E@w3}Man-fr7 zcwL7FRZY+{J5v^s(<8_l*Dr}G&<NF^v@+8`E~`v_BU9WMsDp}Mxooj2$&B{&g&?Y! z@}w<&`Ax*8CUaX2w}x%Y5=dk*Vp>1Lh0ZK+l-dIasS?Y-orODP_U|2HZ_kJ@kX|qx z05r(SGF6&loYH1N8Qw-MbjllLpt=3R7=U>MlrYwdHT7p$16Wo`fx)@KV!j0mYc)1Z zfgH(WOPav6(NPXyTLbSkP#?pSvVvuT<gnMS$Mv{C)v^Y077}0ZRLG?dC|w3hVDuBO zq32F>Z6;v5H{DhmoDglQQ>LB%UCL8q_Afl%lYO=&IdD@LrM}k#=9z6QS5k6Nn$|NT zjfi}wF7yc1s7}s9)&1%b^A=9j`h)@YQ1%G1rfLtM2@)IvPMhXgteduzRW<D;^Qhy| z-nb)Bg9rrQpys}J2#spWq)L4ES83Q5;jQ0)$!1&(ivo2VO#TqQO|hU4aH%H%Mng!Q z#`amCAZQ;WVF(J2O@et-Ln|bflFQ>*#7feL+;5v2Jt;!jHj*;c;nrU(mWs?$oHWEx z+qAw~m@$<|Mi{0WnDejQL|a!W9jSfQPZJ3MVuT!%aPmRpE}IboaJFgSrc<|*Z}O15 z@aJggf~ZTkEw`a%5n=XX<~GqN%szuXByZQGN4~A~>LZNo%u|%NoU{$0eH+`5?i5J^ zgwEuAX~DB(aY9chChZ2Q{B^Ffui4$x!uhDXXm#nfr=e-VNo!R<vABj3q-=O9oX2sa z2sUAFwOuvbxof$_{`T8Uc~Fp`{WU5sJ)Y}!LQXS>yH8dIi6R`24$>^f{1ApUjav2J zf|CqwLM#np6t+{Roxt|s)Ni=5!8${eiB*%7=7<e<JLOp^Ey2d0u$vo7r>XkltvdiA z56UEJW9ti&ri%>VS)jfiXx^D3r3P$}a$@x?QQBA6mf}d~R#M_dbxYYYy!MDlqsVJN zQtL2n!o@b$5PU(2ofBqY?K9Y_i{VI?<))jEEUv7#f&NrU_A%?>WFIyl>X`@P7ESVO zQnQz|wyTkq=}B5)7mS@wQ&tc?1SPiGwmThk>BLcw7UIEmS!r7&ra>D>+z=85qOCMw zkCRmYrnf?{Tai@<swKJ2wkEq~z;Xux_U)~U2=*;7HpO0p1`Nxx6ff$+5+}0~!;OPD zXKN$OX<jLN+?klarm|``RX4M$R#voo!BEk6#r8*9UgXU1wke4u)y-K<M!W%gM9lV# znv%9ULf8RC1#xdOExo}4N1qy~YcT$TDx9X)h3hR+H4r3g=!~Yf_jNQS;gL%7AQP1% zW@A#<Ge3;=3NZl9uB6I7=BofZAA6Covxiw%fwtoh6JG-+lL3&oCmUVEZ@H;G3s^sS zTtPGvrA?LhR|0D_=D=jDECi3pwZK($Dyfq!Au`f@k?1}q9MOYQH-wfkJ7SuQ%hVb! zSxrcjIt)e;FxSDFLj<4%N4@1_1QBt}gzi(Ds&d*imyN72VWV`sa&M8?n<kl?7}|M6 z(h}u!Ub=4UEaG!m8nMMj6f(!)%#|p`YZgS%5g$%Uwi(7_N6MbtY)1Bp6tfy#Njoiz zN~_ClJ%~T7EpsfR?OklUY+{#9s&t*BSy?5Z@D9Spw76*R+y{(;xw|CPry^1|&3|(u zW-0B)yrPOnXPOZtQ!-2%Dq%%~#K8#@jLYyK5NP1NM}g2gw&4m$b5rCD1(rPCh3VOc z=Zz-r0OeEbE%JwW*oLBkt?6>!pe%4UFK`$7=F}$)(1)hMn^v0!ci-YxK4E9s0^HE1 z*#jJ7+Y$Yib;$<`un^iNH(L25ouYE5MG)xIB=MP<i7+~YCHlt1B<ndq|7}dGhhY&o zw^VW8{D$I8#{OCkW*`0f=?M#JE*h!E1<6Q~jqcG-a3iOZZmqS;hC<O@0wR^5Ma95W z&}KQ6<2Bc`b8J^oiQFw+8oH>YkbSvP4J{l{9(2`%mbyyYmMZgK-L!McaSO=+&&x4q z!b!QKi>Xbtt8buaP)D9=S5@pI;wTNg-KSbJ!_cs{#dURcB2Be5tI0r7q*DKd3b<BP zv^aT8z^W#BP(4o^gjQ;bH$;=TRbEAz+tv5Pz)8|dV>F%l0#p;esx^aGI}l0f019Z! zng+}lrgd1z>QXiGY!6eyrOwpD3^`Dakz(m$aU^G{gIhz?yfYdd77NYHZpMvV+rk?4 zN(rcQmq}J7+1X66s)^nK?n$=+g8Q^=c~`Q=e)sinRwVkZ(Uj>SD;BvHU3nuk0L_%A z!QK(F+r(7uZ{H!=@eq~dM6hlyu(Q@=#`M?6ShpiEbTVWoh%V6!fBR30(ar*m(kRR$ z^8i*8u70tZ+u}aHo3U0zGq!J)L6t;}Cu1s^r+Y4(B~6J#uppZTbiJW6>lAUNMug0O zyJ}xXMPpVkornWO<dBA;3VJs28fwH~wgjGp>u-E;Fc*;uf}>7H-Et#za^|AdDc|R= z9ACOr#R{j^;awbBeE}7lXhR(=Ae_i8f~`fHZ0oBr(lFX}r4}XeuVNmgVK?Vf64gqt zF5(|xa#ABOqA)~;^02j9cthYLHabBN?fN@fmcX;z1s-BpD<sH<Cj3RKxk2!kzIBR8 zGS<ifHEhTROi0SL8Aq&U)`w%2GNsKICxaJ9`k*Eu4O?wZ+tx_=l8T9ze|MA&V0OdA zE*9826a8YGt@WuIeA;#M&8yuafp=r|2!}3BwKyTZgpX}|$xoi$&oLs+hBn2!k5JX5 zRU)Guu7q^mr0RE6yrht8p{t4gAQHbP?QbuT=ILv4clnvE{W^bgfcf)sO@Zv6FhwHH z;0Eqk21K7w;#0ewC6N1TB-?kW6gm@XCvRP;*5uI;jUj4S?YoN(%bYMi;9o<Lv-8T^ z(WI8T#iKp%CpeU7gI+s?(WWm6_=0e}Vg!Cm43#)1r&eIOL3lGEcEIfO)R`7$5WCq$ zTLywu5T~r}kN~ey^>v~R8~b%x$;sQmhWJT=8r05Eo^a~i=;1_bIdyi)NU)*xSfB2| z!8^*LZASP&4t#UC<{)U}Xox|)TO#`o{y1xh85CW3JG6J+PQ@nd;5WLmHiI^WW9i5c zK<A$K%y|t)+$v?RRKV@GDote80hcvLcn6o&)VHaIcIX%+kqd%0bWMD2AqE)8&FoSA zJtjw4Vp8xNIswH?5?RHWW^K_nqHaYk@QcufG|=e7jtg9r)+q$xhZQna4vCO?SkKgH zPsn>%qc(OYSTReoSuG<$mR?V2)QDQAM0&K*CgcM~(nzjDOO@!lnsw>c0y>q|O2@+y zH)97kIC5=R*o>sSQ{87@F8iQmyH#%yP0d6?IE63;Xr8eW*MxrP%j8(Zyt-sP<<4aA z5}D*#b!8*kHkx5N>@=!}Qv>I?hN15)q6MREh_)Sp@`%j#0LNxz@rs>Xh*-S@ky-Fp z6wsznrR$*4Iebudg-UisOPm@7W1RxnqSmpWyL!};N{Xt`LhdRVM6NWh8>%7BR4l4R zOkdgpP=mo<6SUPcr>)h8v;MG<%(V0$lR{&xWm!1pWUM#-Gmyc29ya!+WCL2LYmZE5 z2GxWVdj}{mVeiv;CwK`U9~y0ksqGn|T<q#mf1rXsgCKW~rfb6%DW=(5dthp$Z28e! z1PCA~7)Nhn)V7-V8%cT%nka8JFTyMnq`JO7<jFnRjhDY08z&))GT4Dg*u4pWovC#d zlQ7Z%uq2xGMDK=54KFxgbvf_qB5zb{F@o$G+Sc1iXtVNsR-TAB)HNaf3vb1PO!xQ` zF;b*uXfQlZx5}G_>>^;FlCyV=gBUr1>>oR@t6O_&9>Rucpg1{jZ3A^Q)xK@W(cCZq z9MvA|R2GR7*{S0gWhk`_CUC1uMkLu2+zH3|&@@E$sD6QDMuss(`unM%!kf7Xjo@jz z9u0zF6^(ktKf4IhXf`lQ>O=(rxH&tmu#2<T=1|~F+5n|GVXACa`y|N$WZ*^xT>w_M zany}U+DtHLs7e0TmD3ruUF{1f$)p^}J*=jW0E(SrDeYn8UAI}rLUs=Uc3yg5z9O>g zf>WRv1V#8s&Z7ZrPk>sl^;~aCPh0L6gcBnH!ah~JC!H`o>DP~P=-NUs@}`%icHCCn zboT4oJJ6wM2WfM<SzQy@t13U+(6y7$rUciy;VpBzjqynpinrc0zyh&&)~bzY8rc(~ zB4rQ93AT>R4`~o;MwFPE4m%;zn9e3>4l=D0WH72B19jUB$q0n8s%D29mRQzxNs+*Y z)VrECFbmZ#XiU3$N$-L(7+O_|QLTa-YKay5&b3^rt}TH;q@fvv>pE)f?Jux#nsVG? zR0}B7rWOrK@0w4)hU!bR*mufk{AAL|vl;}~>!E!Lyd;#_+RYA2n2aY&naY-yyYiT$ zIQQGW+J(G+Q|0zpvL3Ul0tRFwhJeXB$4NTKPQ*4eL?{{uVWal(;vOBGbPGw{2~>HS z)t?0eYIi_|q<fboAlMaDN^!2W5d^l?5dsDUgOX`YDJnb6m3snvyfvz?hz|H1P&GrV zZ^Gn7vzBdfE~Sbcu(|<P_t<pVCY*YdA_S>&izu9z5;M{%DvR`{a&0LhV$zI8WbAJM z$yyQoi^J@b>!@vBI|AY8W=eg22_-=*Jrr;iO|-KXu+V?6!QeV~;28-}Pp}oqIgkkE zQ@LvKsh%M<iAEDzoKyyQhDpM6uO1pQ7%wv>m=l4u`TLhp+^aj$9e4lWpEB84kC+gw zagpn*y=O~3@K@isF1quJwJ>|m9q4@LVIzuoLm0C6OS~|LywL=;d38~r3wnD@g0s1@ z9<mbJCS%5p##c=1lOO`g*yvC?VdCNp4lENWxm2_gExSh6qD~F0-nsYAVNmev(nIDY zuNo>r4x*filKQ&g4rq`1ZQ^=NGBMQ-D)33Gdq0>^3I>ALt&NFbtjEp74HeN5^a;eW z3U=*LkR_-!k(QDGYtE?(Tc9;cPG|q-af3Jg0ENVxrV$$}m$?LJ?Q?`^&WzpAr$x6l zAOLa<4fIOdjgMEY474SXJ!WYAYkBuVsx2y!FgcdNBYB#*WvzVGur+Gdc5wKSEVZbL zMDR%|wv$(QB!#K<<6=+(5~5@ldw8HFN#*mWPx9)Vcy+C+%}{qCPxUye&~%wKRT8fj z{XD_yT&>59#(wNf+qUq^!cKf77Dg{A2U4KWZX<uY3~U2>M&q##cvI;bI>Z^%g-#7? z0b<(DRj8q%k|mODI;R|7vL!C>ydEm;BLp8x;)klvl@Z50^3;hc!6gj<2r#M*VVT<U z6c~<PVe7@BdC=7%Og&kfo=~a5!`K6+oK{_M#^}mYl#$6oCK_+{LKem<wXSP_Ua5&y zBe7@~8M|rB-VxPe7{aQ>vK_z&DG{Hj4G3+(H>uT%!Io)OOhiLmL%jIWH2Mdkkqv64 z;dSSmL{tlBpU^G)%?w%fL5o~B_3vIB7t9F(tX=YQG7%OWOqrQlI?*b%3kkKTPLUo^ z;k>6N^ZNq7+e^F1R45!9AG<_rT2S@#E}5bMnGCTB02S%GBSwll8iJNY?at&Sw9Sdb zCgwOdqRBk|Bza{fA)0&%0)Y?O_1TI9A-#7(C@xy+g|SCz)R>+(t<?tSN<fshu^}uX zwxiVr#CesJIa7&K5&-fHkDbWXt*0K<U1+LHo6QK#t=HGwbaH^$<GO02Ah0)8k2tx} ztKvEh>Jgu3sdFA)6svAra1$-D;9exEa*V?%!a+gf`ChRYC$Az}Iz(ZsQ)0$ni_1&U zq^DbgRMSGDu!GCuzPXJ-9th;-mZ36=3y2}8zS|~b9MZ%A!IJ;D*2JKBI_uDb+>};< z&7KWQf9RwH$bRN*^_$zI{Ci`wpn+-E+T}&Q7$u2>C5nRtUX4)Jw0VtNE2LAo#kA^s zu@M)rZ8oj;G)M(TR+e0mj2^h_TP>h{LIv)eI9_*R8Snz`Fo<GpRa9$0Wqpr;Kvg^b zs10yWA!$$W`w&6%i*rGsMdaE)s?4WZMSRdB=&jhXsU@f@|N5QvNEk0X1Gh^?*cdIK zvLJp-@=l?c`OVBs?UAR%<G$eBz9e?6mZOTNe?v*u2Is8jadO3x+?h1)nsWhN^Vla= zBNt8$TCR1l!s10C(sMEidnylYVjfr<ZWG6Cq8<jZtW$OLOm%~Vm_}6ra*nYvv^~?* zEIU$c56*f5$yn6jza8lbK|SjSqW<mHgtlQFcZY=+vK6PEbs5AIw&qGi)1h79>DjM% zyBMAjxV9g};RH(VO@^;FkZgq_l&hTy&dR{IU(1cAU01{@2;QYz4@#q62ogBB;MI&~ z2QzI_;yBQw9)?w2<$GOJ8=ADJnSBuhkNHpOMR&(=?9|>4rUO-d&AY6BxF=U~t}}mF zgbryub~M_um`c^9ac(jp2vKyAXw(g9SFi;NKoJkHMm@Z`y-w!(4zg~Tn(Z7JxwHe_ z`g$3jXoF9-iBF0S!eoCkby|qp(4>ofW1>2u?ZF(r;5JBF>V!j6hmiAZ%T$LC=J{Bv z(4?x}gv_NW=%DRsYi;(RtZ*gtL72`o9Fz7Z=#EPz<)*#CvnA35oK$9X!C8{}tU+>C z?sx|?oaCSOZqvp=UmsqN>{LB9y+=qRnC;V=(j?hot%JCGt@Oy7f(fT5DH0CS4D~Vz z2tnHEk%QLKna;FIYDNdFIoyp`f(Jbx2gj~EQ2FZhQ5oMVh)1_QOByX4$Z8z0st6uT z74`Cl(KAMs)Sd{?2tyFjbZ9L!vuYuzS#{eSHi}Howvgt9s&!R`BnW`lr<vVp!9LIt zZXMElnW?5%1%rf0HRkyN(qX8a6at4n*l=@oiixWf@Ce@^^gJ^9T)tVZJaA-deGR=h zl+vsZ;If_ANrllAgICI(4-1W>5Ky+Z-lP$q01Mn=uro)Hdd6gdo|4_y1A2h&1I@YE z6#dPvd%ttvjrNI9$A(v%Z1*aO5qwi|t((>WcG^Tp#B#xLNtU{hv8!=O*LL$KFlk_O z7zi<;h7?sc$HP~J$w+t{sMmEHefe1bh4{VbDxg*P8W4_V1tcHTMvRO{{cPyIDWvN0 zcq|eHp(&9;$fnw5i2zg;+@2K67J|bsv1yDbMQ8=#q)^X8x}?-Po4K4`(63J;0_I!+ z7f~NOCxv@4a0Z<!yhAWC`bcg7G2Euj7)yG#D#zNIN`%Hb(uwQk84UXMz*WOD07uw{ z!PD#tQ3ZR}GH3oRLX1v2EG7Y03>?+c(K&T;1L4>-xY0Wta3up&wW+?zL2@)gB~9wu z(YiCH3|OMq-^sWc;an4ow$5zU5z|8%atz1-Q$B!nO4^WKjlm;`Js#U|J3OK$ERmWF z0lLC)g`t6w=7cB+b;Vxn)F;2h&?qU=rl%+bbz|$0sWnm*iF2x_0dEKM=-EWOD3pK0 z+GlqIU&k(z11Z+mE4H9jLZrhfKV#oB>iJiBxT8v3@{*zksO&w=kUG)QmoZhL5$D!Y zl;7Tj(%8ctr6$xb*wh$`y+5i^FC7HI?#>PTP-8klyC3Vu>#g79Xdl6ntknQ;Ec&!> zM}U^@h#?Z;v}~A{PaPZPuV<9NxL%7|1zzrPrLXFpHk-w^;h~Y_fSPYH?i(Ds4Ayni z``ACQ8&R=vQ`<UTa=I8vK_$o~UP&QCjdBsjo&__e-(d(K?yLZXvi$<)c+ZFcvn8=2 zpk+*DxaSSkGgM$vro{@p5-_Oo8pd6SA+^6I&LMf)Q3>;nuRKX{y{;+OXhd|X6zeg& z=+j&zs9WX2-2_`&X<wSmHD2Pyq5)_9y0&i7UhufoLeIzyOP|#obG`?m5Cj!Jfg(oa zC@Mn|xHCaQ_bU3CVm;tA{eAY_ig8awAk#uM14M+JEr<)hr!+^Je`*ms$78o>RM|ew z(@gVIUs&YAqKDgr!qJhpn$MiGMuX;&XUnM>(3;#12qH63jZC3@i(4Q@tU8;Sx-$}_ z{)IV9;!q!n>~U>);i0YdfJL$sJ$)M23J@_E7naVOz_(H$B%^tYSOh89Xu;_zT$L;i z({nn465*L)ZhJW&EdKS>aYT!yXm43Gg4=bq0CF2z6!x`9@~!TQxGzj>i98n;F2~5v zDbTYX^;{U+aa4QAfyuD(EOH;=7Ui=0ptjgN17t97RY)2J&FHFKXb=j4p1v?Nc}iW6 zj*(#RlvH6~3pJHHVBDkYh%KRVSc57eX@|Gjq9o~Q?@0Hw;jyAxJt~x@wxn7xqtIYV znc=#NH=Bm78kWcOn(gFk>~n46LDcgaQo^n#I!*Yu@4z`r32eL5Mv&ADKvAVDTus;$ zk!<WCkz*>(h4um2c!C|MXd-J&4dN3HXv8~LdO$Yg+d3=RZUV55WU6FYJxp{<2}Z@- zI6akC(=FkMo>q;(qTjZ4KetGfsG`%p+K2tZD`{=uGlb!5V#s*h<Urb0m*_T5c$Hai ziKtz)8nPZhP#xdQQ#;}NO8Oh#94cvoAD@I%le%qWZKcXol62P!1Nw_scxo@~1Prh+ z26t)grt&82&mAa$26sofgVI)9{SeD357NN*q?t5zo_UUD_Tp%@KIC>nTPEL}14>Bx zsF+fxYPv$Qz_Kn*Z4T^FtzF1NryUgS=WArvn%$dXbSkN<LC;5VW419GaM0ZJ;B*rb zi0G3}A)BNN7rq`;rdnxRVpj85)6YQ`BmLHOPob!!C*C;?6(>5i#8W2`fTq-7=PNor zn$FoNsxk+$gWGOkQ=gaPVJIqWXKy$gAad{wVzb4hsz5NXKG6`zKt(I~p%C0O)g2(L zY@<~V0}nPp{VhT!JPmu;nmrCc<0+~v?aa7b5xCZ{25jMs#nZaQX4@EoL6eI{Px^r9 zWQuM=*+zT^EOxC-2)RG>qs&VxZ!U7}P4~8+XD!KP8b!5!0f>aNBL;Z{L(O{>0(_jA zd4+G!y=l6fQ;8^beWqw5Ee>pmb`l#>Uj(8cHaEHbb>J<e8B1~?mDjCy%wl;Pvnlb) zUQfGr3aTROc@_tIL+l_*Y0?CX738O0?GdUMb*ih+l&D8tl=^Q#L*P#btEa8ZcJq2( z+{OdyfUv%{2@}?)8W=fB=~`cAQjMjK4_;{@Y8g;*PXL20P@xU$q*zCG^aw|?$YVoU zlYpD!Zhnr1N8bPS>zgHr(PMf#e3w{;_At*YVm<W6#Hf3(r0n&Y9VWQz>>+ybGAJJ5 ztq6ggx@l3LBoC{@w&7EA6lKUR>uU4~lc)uRx0b^Uek|(6tdxo_Qr&po)4(r8M{{k% z$eBI_t6AN&bul$e)0wNV_QbABUnOTJpLpa{9X~h@=-a&kpp5tAV>2h);6eK%CwXn1 zdQq-bRGU=)*raY2DyR6432pl|5MCR*Wn2iQrVmr&)I*D7rWtj047I?Kg_dA7m?91l zG`KXhZ^4EcRA9u<F(Ov>WM-A2xw&<k8?~>MdF-x5I@Wq?t<<;)HLfq9UsIV}Ccu)G z?9)bu>!Yr1vUg-%5sDPzSWx$aSsN+4>9sqZ;|uE$I2)9BL%WFxr~AjA3agGngniZl zyf$d<QM^Jwj?EK1ysx?kiWj5`dj>nS?gmtObXyI4OW`$lHe}l^)<5}Y_S(2o8_;I< z4ZlcMhJY}neb{@dGd+8dYVvX}w$K~_zzNrY=)?FXBr*W)*rG(VArutYf!3+bLSqBY zlSfD`i-Ea)^*H)f<yN1y2`Qcj(gr@P2@QggOupGvLh42yY|(9%&Ci26`C%Ii7AYwY zGH)kBSJ?%SlY!|r1E>?_>Z;bvij1w(dTeO$c^1~@F+F+ex`P34l*8MtR46@76AP;8 z8nn6t-~6h{$=m6#Qybk9y6X;GEQ%A*Z`Tsl)7lT+8uei(ryCFs@!eXS8<tJ&fEcXq z44llt8qvhdKQJ52SRYjjCY#(vnnGQ2TyRO@jGEAw$31OFQ=8Qs<;`w$lko{A-A+Bd zCOi>)WH+dh<YJE`l#beH+P$#1{UVj>!gE%$xE7IX5!C><6GW;vv{jMN&cUq)m?BOW zr@Ms(X(msU9^?XK2qWHfX+D>t9$SC4uhCNL1yi%ORNwrtwj=}n6dh%mR6&bVrlwtZ zH-x?!cVc_)0*@rDTtpUy@bbzD2?{(YE-tMwKN@x4F-k_2bQ{{rX(RXTOAWyhr*xu_ zli8S_I9QZh%}h-uk<=<8&F&_^?W4SuN<TR^t}&sbY%ROd2{uRttKu5mtDr973$@z; zuGWC4lnLAIAxJ2r(0WVNRt)W;0>J6OtFFk+xm>V<tz7<8o(DCHmX8@(KS`v*$y0TN znJ3guVs)c-3Qrx&<-oiqOvc7%R5IEogrzM;lW#1=kOSNec29}X-JVV=nP`A)=nGl1 zu?YZTrbBWk6;NcQVp=wtIdBt;Ccrh6N;RRQ6ln-t_igV9+^XhuLzy9q;MSTI&TY15 zH-`z}_=<vvf#f;PGGtx%>C>R5$ZV4}#VIlL*$!3Kk_I1Z&^ZA^k4@W1!#x9dR>x2> zhmH-iUnN*4Z<90X02R5OZiG}a&{4u!zU82b(~pGWso=C=a78s3j^t|QK$y*@aFn}o z*T|~Ld?%3?PRP$*vm0yOBK}jXVM*!jNS&P$J-m&uoc>}GOLEJ3sw@y)CHII`E=ehK z$uOzf5Vc7Y*0k8Z*bwc-s(N&p?>CI`4P8L0BbR(HCAI2@!!>X^s+ka?Tv@QiwX#$Q zSIf3i56~ui0I6vWswC1BreY|1PEaE=OQ)Q#z@!@vd@XR9b#T^Ge)Or)vWaHb!FoW` zf$uF&vSQo33>cBb3Ag;nUUs2K;zsG9S<CAlkG2ji03?7k9h`>Hl7aJUxXo)h1=th7 zoR4AxkQV#;w>wgE!?ga*&O}<o5c`0MZYbJqZilL%1bJ+d%KWWLjUy73SWI(Apr>_f zEgEqPajmzZk5q^=jN(TRnCp4bu6rQkLK%>!8w274R9ghw_Qj+gA#1hei7oVA!wsEO z(bJT>$U~%nL>&_$Oo(u_+Q2+Gw$U*{GFxPbmJX0awF+XZ^HTO(fTNi$wlKJqC`rv) z_B`VvqxU*#HfXG9m5{;JvO1^ygrqV$!DM{toTQQ$YD{$;FW927Gf~ev0960Dc!I3N z85Pccx^8|WH0@c)BZD%G?ZpH@7)eM0ZSK%#OB)=FDasXnX&GLMr7@Ywve7WPX&hSN zOaB0E@`%o$_G{Y2p=pfC3}|#ywN2((flUkJ4l@u{iZ+uX*PIkR>2(f&x0SG!(v>zY z44O)Tl1<;(=~KbTq+_TCy@%Vkz1patQ(tkcxfciAz$h39Cm#JsG1qyZYIKeYB;0Z= zf=1jdg{&TCv=HpZnPO=f>kHqecMJX6R?*$|0X~ntHo0$j4kTkevqT6JIF&=ErlC#& zHV$?(>j7FVK}gIx1AvPlL{SDvQ6W9;))jhooa{l8!O%61j%{mu&t+zC1fiOIz2gI3 zT3w{VmAgF?<ap>^8~$S#j(R!e+*lXEFs`3wNP(Pe1Hv<nV?7W$wz-VTAxc{s5q_P5 zIygv=R?T~|APdh@)PsIn?g1t})y3WrJ6_DMk%s`o#$f~+Lkgwpi;%TCa?CczVVZ;1 z%s#@h*hA^v7({v!LkQ+XU9?+ND`Q140^ft3_jqTZ2JKvB1;hKya~6Z+Rfj}!nU08y zVD%*+d{LK*g8=-5?bGjmq*=D%gSG~QPmlQyQM8vz()5F5Oyr^|32k13EOcAD&5ULt zF)%tgS9LB7*A5=^;cN@oJr|LxFB!0zYIt>va6^NMRa+vZc`&6OT<39-Yz!NEXbqtH zClefPZbF|mPo$vJ&HjiuH#T}1gNsbFg2n2w3YMTd;Z^iSvB>~h7kjZKcj0mLT<H)2 z&uU#?5SkS;9vMGBxGte7Kp7+esE<K2lv!~eS&wCt8a3*P0E)&OIHl`d*G)FfuNJCk zw%154$P$mbU2h#QWRdf^UCBU)+HLGGcRR}@qH@xwOP?$Q85|$oRWNkzp>XmSyHF%- z({vK1na2F|QLsNM)GSQ{6nq*92iR?G_+e^PLjyQbE9I&v;YRQ50kV={_qCnjD-FDk zcP%a@l7`NztB8F2o3@~cs#&coT#G6QS?3iyQW~_BRjc-_hJqCte0#9-NxryRTg&KE zpcWfKQ?vRCdV?Erjl3FYVgHE+hN9H68Vj3h)6(E1x<vOZ00P%WNOQTLnkO-FTfF%6 zWEYoDE@o#18&M}b<z;UR@-%>RO=;pZg3*hnuJ$E1yJ<;u9(v{}e-`_?3kM7FZcHOu zYG<7pamvR(scB%x6pj=GQ)Kwkq?v4Km0EG^P7<BKYE2IjG4bf0G6C#y-!j$Xs&-7` zgs+SmU(ZK*QtQhuuf=NSM=-jqMf;m7X+5c=1@n6#h3fkt?;c`~RDS@&7VM_cgEE;h zE}nGP=Sa10C5~EB)T~FvFWs%Mdg_YAm@o7r*GB>k`)m?HOVVO{YWPEF@0{hU4Y5wF zYP>KTmy-O7Dbh|*2#oDX3^8hd72CN6?c<G~I@G5djaB<}uKPiQ;yY?$&7GudX3zRd zlkj=7^92&|YElE#20ciy)Yj7$!wwkhCs!49xGuHmR~oybXX|;^^H{8<eg1$)v+_EJ zB|*Sxk3|jobn<Ssik`q?o`bcidRPk{kt`O6kcW8zATSMj)Dm-c6WobYP0X7biUni2 zszcMEi02Zf$1GtBt%yqKo+m?FW7pg;HcPsYs7v#^9R13v*_yYoXeBe%;|V@Q-8qnz zv?o!%GgBV~s?~1|sbN_4?N7Qv!;0Yis-0-jJBl=*`9jtBWQ%!yBe*VXO&uo*{JNVn z|4kl`;6}Xy;NvZCDS?P6QDnKes5<nRf>^CoPwXwg`An7V#>r-_31C{EEkYcfI`>qE z{xP`a2}jaa?4}u{o(8i|goprxw?R~Ew#X$o&*)KOEO3i;&8S~tdut|E1fh1{4eEpA zmsZz+IbJ9=Jjq+D9ndLNt?~s*!b!W<MqPZIH?k@X6BFh=JYm~ii!w}VaK)v;jWTr; zYBp9aw<kEa5fcLkV+zUFB0}r{I%i4Pg>O1&+Gq|k)zg^iAB`$$63x-DLC)j5dY(b3 zV3tyve=P|??fRR%HI<A{s(M?d6f*}|IJgnE${M(X{3LC~Iq+3upeYkN_7JM29;NLK zlE9XGq<!4mR4Xzby9&T-OW!+jiM?1x51`hQkh4@{Pf|F$CqOr5h_1+h!O*J1Q58^L zUQ*!2FhQFw9gANvY*Uj-8v(bABaZskIJ<E@Q@lU~xN2bLAuyr{Ahb0Kcx4F0qfy;8 z7SGV&Q&1afUVDuUZ8I(tY6vveRn#|p04k}a%!dl*fk=37p8AjCw(0=6js1>c>Ubrj zc&+Qkw!k@z6%HTHJsHl>RKiY#Dl)byZ5NBi3mL@$*cpJsxPS$PiuI2z1~Ddv4M;V< z0m2#@I`wew>IP`ZO14^rU8p8}S6m4}{VMM=P)qzG6KR{GJ#(lgq0AZ<Uff&b4FU5T z6t=Kb9P8RRngPAcQ)L0ss@OH5hLH`(tZ1k36b1}!idmaP)XSu+9vsC<2ao4{Q<$Lk zRU0SD2c&*dFaax`qqNef$uj~!h742N+EgV~x<+rXg?xCluH^&1y)D$M&x)&#z+7cE zTlO8c7%Sm!9iR^w%uVbgH(HZJ0wrEP)~sGdruIaLK%kPgJwcpvJy||lZB*;*>l*U5 zn1g~I2n~-daMijA6?9*b^EV9mC7Tl{Dw0JuJ;K?Zt}8Ljgx9xQ+7FKF_7Oj_wdR}y z+-hGHYSytRQ94va_^Q@m<bf+iJ)Hdku9?tku2;`nC`HiG#}zm{g+(BSuGY<~7wyB+ z@)EEVf~2a4tLaKZKy*l<^y?n$ngXg8Jolk$t+o)%NWNecG<KZhp`r4?1~aVDU86oc zYFd;`1}A_65saO%Ik#BU*pKXsj}+A|gy8hM?R_Yt1JQyUib3k8s$4B-Is`NU;^QBC zh!ber$s6~Y5KP90+EYRVVb%d(lh6e9rV3x3eVEp#;0Grax}>McW7qm#doW8&-K3+q zRjO&Vz!DSKc@B6F8%N8D*K{6u>)6tc1>eZIiBhH-dnZ#=+YGiOqb-n2137jUY_2|t zVg+A!U5SUlft9B0M=7BIcG0E38_>#Fz1&nyj?mU-6fi+0uHbiFj|-rcc_-VkDHu>~ zb*9Od@L-cM6^mER<pKGr*kie}QhhXwh_`u_l_qOV10NO9RCOm5OPC-Wx!P!9A7}Db z7-?)OsoJtPXo|?6eRMyF3s%GxFH=iCRmmJ{86bBpR1x7l>b_QB#i{iuF~>bf9RSjd ze)@SRT%FRMdVBOSQQd|at2pF+GwYm8A<Ba`x}{c_He?noa*gAw&DGzztq!|o%@C;| zao_cGcXJ3cV;WIC2Y_p6ed>`0*ju;D!RvV;;-aUA%tezI6FTjAYPIUvIF&U>(Vl78 zHvh=bviF3UAnaVLPsIy&bqzvq8xpgvH4RLA#+N$d17YGhHkaIxIQNACni>k`Om2AV z{X!*(4QHbNW)c3;cV3i|q|~vZZzno+qZd-e+dU2rZw1;0?&UTG;Hm(GHpzyJdYcQG zgRuZKqo?p-=fs2#VG!EN3Y7$PD5Fih+)0Ea3VJ)5T#rB~NXX3T(vhJL*t$Lh-SMOq zQLB+}qyij@HZ(f+6^J-(`@>t3QimKt(Smjdtx5B(1?WKVYnx1LB<|MgY+K(DM1Qu1 zc$3IQ_+~9NUG3YT0SjCcmNmz;<)+laEK-vN+c6GQSjhu%)M6Q+{+R}yoi*!GSJhM= z)w75dW*8i%+AlM7CcD*n1w)F#a7m#q^9&xcT56jRG<PyMFgPKRhB_{8t<t2e%;;lW z*~6zrjO;9{%r`mlz^pp7kYX3jYI4JA(9#5MUJ~sft+T+?O)iPtUn@+qBw3+I)s%|B zQsxYVpiKm=b>Bg7t~u9cZ_aA&&1@mGL^8WuO3QTXK{C}#hIg3oj4LJ|2DaBM#;HQ! z3llW)3uVjrs}kiF=Vp~m(9OFf1c4l6nXRx#f%QTM>rM;M)~*uTS+1+vZXAxDhOb}2 zh)dr)euSy)^la~-&_$?CB27#aH5RVkFS{bd3Szwx8q`it!e)Mrs)$Jn*AOQfwh6+( zMa8Bv&{wD&+6mhJrv<@l!B|T5Srt)nKyk08(8Y~V)XQe0iOmL5gVB{!i~gpoY&BqG zT)n>a7r<%Hd_0U~%K1);9-|g)+FFpfxfdd(I9iT$U27AugzQP*tyG4#CoRfDglNzc zPPuOD_<;*+vH(3^KsxGku`TUbcs*q1$2BROt#J)W5_=<5(uT#N!f|8CTz*G_vqtt% zj%i^;dE$Rx!3<ZO3qyr^_iQWiTon4WRlQh9K~Iv2MN-v$h$d%?Q(8WMZ;A#mrKL8h z4RV0GjK)c|d^M&KwU<JD!*+1BFZL6kN6VlOL?C9jNVJ2Vjp<PswVRVNK4#tvgp@{S z-T*WxpppL?*OIIKrJBs844Fk2#3s8=Z1fT5e*3324IMxMNXqFP2JN6}30k8X-M+wx zrv#@^?13SJkLK1KrS4oFkZz=&sLo3OXc_?Cwn<VU>`^_l5C6VfitFY|RDQ(v&TVA+ z0U6lF`vYfZv|477IdoGgveIC@2sKN?90-GR14`>`?vaReLmDHGi&ufhDdynRqJgf0 zU^5#Wg0AtLWOaJN2u;5ZiXK|p$68C1TFd0^uJ8Vxl9y-u>CX1I-r?Et4IrV!J^YL8 zvg>4UJe0NXWARxq5TzP;tu{~uI20~a%xTNmB`ain`83WCy&anXCv4lZCKSREz{y{8 ziRwvxpr#6M(M_nV+t?Vjpbg4I7b~YT7@@SESL<R@%<u4Cl%<21Q}_6URn9nxg)GrL z{2?$tI1<zh&6*B48KSO)m(&a=OS-HP0iDGM0q85KBPe=kgRLG2x6%|xz=3N(K#A6K zMde5Y;w)?31|X!h+f@L-uD7g`qye>YhqGDq@`C~soS@0LNH9%0Dq4JmZXkz{vnU3= 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%0Aej=|$V{W5K@7Ta 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%0D{VQw@M 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%0AUzI*t9UnU+XQ;eC=mb11864 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 AX#fBK literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-zalgo-text-plain-apache-httpcomp.expected.txt b/jetty-jmh/src/main/resources/multipart/browser-capture-zalgo-text-plain-apache-httpcomp.expected.txt new file mode 100644 index 00000000000..9fecae5916c --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/browser-capture-zalgo-text-plain-apache-httpcomp.expected.txt @@ -0,0 +1,12 @@ +Request-Header|Accept-Encoding|gzip,deflate +Request-Header|Connection|keep-alive +Request-Header|Content-Length|1870 +Request-Header|Content-Type|multipart/form-data; boundary=V9oY7Ug2J-n4sFXLWdb7yd2LtU0hdK36ejhKYh +Request-Header|Host|localhost:9090 +Request-Header|User-Agent|Apache-HttpClient/4.5.5 (Java/1.8.0_162) +Request-Header|X-BrowserId|apache-httpcomp +Parts-Count|4 +Part-ContainsContents|zalgo-8|y͔͕͍o̪̞͎̥͇̤̕u'̛̰̫̳̰v̧̘̪̠̟̟e̥͈̱ ̥̠͇͎͕̜s̤e̺e̙ͅņ̜ ̲̟͝za̴͖̱̲͈̘l͖̖͓̙̮͔g͕̞͖͘o͕̤͈̗ ̯̲̹̲͓b͙͟e̞͎̜̗͈͉̭͞f̸or̰̩e̡̝̺,̸͕̙̥̼͇̜ ̪͇̹r̘̪ͅị͔̥͈ͅg̠̟̯͖̦͇ht͖̪͍͚̖͡?͙̝͖̞ +Part-ContainsContents|zalgo-16|y͔͕͍o̪̞͎̥͇̤̕u'̛̰̫̳̰v̧̘̪̠̟̟e̥͈̱ ̥̠͇͎͕̜s̤e̺e̙ͅņ̜ ̲̟͝za̴͖̱̲͈̘l͖̖͓̙̮͔g͕̞͖͘o͕̤͈̗ ̯̲̹̲͓b͙͟e̞͎̜̗͈͉̭͞f̸or̰̩e̡̝̺,̸͕̙̥̼͇̜ ̪͇̹r̘̪ͅị͔̥͈ͅg̠̟̯͖̦͇ht͖̪͍͚̖͡?͙̝͖̞ +Part-ContainsContents|zalgo-16-be|y͔͕͍o̪̞͎̥͇̤̕u'̛̰̫̳̰v̧̘̪̠̟̟e̥͈̱ ̥̠͇͎͕̜s̤e̺e̙ͅņ̜ ̲̟͝za̴͖̱̲͈̘l͖̖͓̙̮͔g͕̞͖͘o͕̤͈̗ ̯̲̹̲͓b͙͟e̞͎̜̗͈͉̭͞f̸or̰̩e̡̝̺,̸͕̙̥̼͇̜ ̪͇̹r̘̪ͅị͔̥͈ͅg̠̟̯͖̦͇ht͖̪͍͚̖͡?͙̝͖̞ +Part-ContainsContents|zalgo-16-le|y͔͕͍o̪̞͎̥͇̤̕u'̛̰̫̳̰v̧̘̪̠̟̟e̥͈̱ ̥̠͇͎͕̜s̤e̺e̙ͅņ̜ ̲̟͝za̴͖̱̲͈̘l͖̖͓̙̮͔g͕̞͖͘o͕̤͈̗ ̯̲̹̲͓b͙͟e̞͎̜̗͈͉̭͞f̸or̰̩e̡̝̺,̸͕̙̥̼͇̜ ̪͇̹r̘̪ͅị͔̥͈ͅg̠̟̯͖̦͇ht͖̪͍͚̖͡?͙̝͖̞ diff --git a/jetty-jmh/src/main/resources/multipart/browser-capture-zalgo-text-plain-apache-httpcomp.raw b/jetty-jmh/src/main/resources/multipart/browser-capture-zalgo-text-plain-apache-httpcomp.raw new file mode 100644 index 0000000000000000000000000000000000000000..2cd8c76db09458c7d1f49555b0a908815bd78465 GIT binary patch literal 1870 zcmeH{%TE(g6vl7z?V5BcLPQ)9B_bma36>%uQNag~4HUsd&6G~tF?EJaM`GC<bfFs_ zQsto$G-6ah7ijzw&i$9vuMMfyRap=>E^f}9p6{Idot*q?nqytw#Q9jN{krLPWc$Yl zZzSU9bBXrBAl8~r44mt<@1_SP(&5l0&kbxhFfTjVDKF~;j^{>=r03r=6INh#8?JTF z?x~-#GAYlD)c@9x=BDhZ5!ercmZ^;8xZTEN+VZn@&=VW&HzQ?2-*U4_+c*2%NiX5J zsi+Z&J3%-U4(0T`UeHfGS&&Ux)lX$Z&&vA!MtLDy@?Jj6*0j8pB_?0WnylH(Kay=j zHsqzA)lc<;EN5limT$IxD0!FKWkavXj;zgC@<lJow(PKCDZ}fco|C+M)blC5#KKj* z=rOD_{mhV0tocgqTwJf|yscM@ZkFYlexx7EhotO!J}teo<&~_+w`SR8ZJs{9)9|t( zn+#ulnxI#Q;kBMGcuf_3f8y(J^lUoNuXx+kPxNzH?A3W$;pb{NWFE+_+Bz#<R$FI9 z+xqcS<uHmEhLndxXhI!^aS~V1pzf<i96>A2;2c`jG#XLOyn$mlrfh1iqD>i$2Gzst zP^+@6vJvI!LydA-QA@=ww6kJHS?ItR+W2)9)hfe#6-H2lvlvw=jI%=>#^@r31}YA- zvW40%o)Hzt9ZazA?V`V09H!zLOqE1LdCI5D)65>nQNG@c2z%7f*#$Z)IA~(*qN=Yj zfpQp6aAr=xcMJ2h(90=YQE3&x;=Kt&xQQy&iwSldL*2pc(~R5uSn0*SikA9+rT=uL znf<JEu(FlrR1s2m>JLakNL2|^OcU7>q_9;HQW%USNRd?y%tUzzDO^_6Qc;8ygjAJ5 zii|3Q6e+a_DP8PA%E}U?h$}+MzJEcAq>8Y@SA>+=BBW^MZ)K3OPZ3i1bXAzZVcdh1 Z@0LLdLdw6A5~S!=dyt}XN=-8y`UO3~3(Wuk literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/multipart-base64-long.expected.txt b/jetty-jmh/src/main/resources/multipart/multipart-base64-long.expected.txt new file mode 100644 index 00000000000..2b1d5ded060 --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/multipart-base64-long.expected.txt @@ -0,0 +1,4 @@ +Content-Type|multipart/form-data; boundary="JuH4rALGPJfmAquncS_U1du8s59GjKKiG9a8" +Parts-Count|1 +Part-Filename|png|jetty-avatar-256.png +Part-Sha1sum|png|e75b73644afe9b234d70da9ff225229de68cdff8 \ No newline at end of file diff --git a/jetty-jmh/src/main/resources/multipart/multipart-base64-long.raw b/jetty-jmh/src/main/resources/multipart/multipart-base64-long.raw new file mode 100644 index 0000000000000000000000000000000000000000..2e2b49915681db0a40a02248e33ce05e9b3220d1 GIT binary patch literal 29278 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 literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/multipart-base64.expected.txt b/jetty-jmh/src/main/resources/multipart/multipart-base64.expected.txt new file mode 100644 index 00000000000..5d4a189b8dc --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/multipart-base64.expected.txt @@ -0,0 +1,4 @@ +Content-Type|multipart/form-data; boundary="8GbcZNTauFWYMt7GeM9BxFMdlNBJ6aLJhGdXp" +Parts-Count|1 +Part-Filename|png|jetty-avatar-256.png +Part-Sha1sum|png|e75b73644afe9b234d70da9ff225229de68cdff8 \ No newline at end of file diff --git a/jetty-jmh/src/main/resources/multipart/multipart-base64.raw b/jetty-jmh/src/main/resources/multipart/multipart-base64.raw new file mode 100644 index 0000000000000000000000000000000000000000..514a6a1ed3cb3f3d3987b8323ff9b67cbe860016 GIT binary patch literal 29661 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 literal 0 HcmV?d00001 diff --git a/jetty-jmh/src/main/resources/multipart/multipart-uppercase.expected.txt b/jetty-jmh/src/main/resources/multipart/multipart-uppercase.expected.txt new file mode 100644 index 00000000000..ef8470f4cc7 --- /dev/null +++ b/jetty-jmh/src/main/resources/multipart/multipart-uppercase.expected.txt @@ -0,0 +1,5 @@ +Content-Type|multipart/form-data; boundary="8Q4MHJ3LWIQEQQ_OXYU5U9ZLYEH60_CFZQYANCZ" +Parts-Count|2 +Part-ContainsContents|STATE|TEXAS +Part-ContainsContents|CITY|AUSTIN + diff --git a/jetty-jmh/src/main/resources/multipart/multipart-uppercase.raw b/jetty-jmh/src/main/resources/multipart/multipart-uppercase.raw new file mode 100644 index 0000000000000000000000000000000000000000..3aecb111bc72c0b4c094d35334c7a7d5e28a9d87 GIT binary patch literal 403 zcmcJ}Jr2S!3_#&MQtlA3Tl^zv#b8pG8nsT-xGL$w{ciyqtVpmwJ$(Sjxa*qRww*Xq zjE`{7<9<BNZKme1diZ*d8O6`m_#jH6P;u%*V&x!(tHaPig^HyU?C88mib{)jt+}Vd zDcyD1x5!dD-{6o)&l5`(rUdKFe)G`}D5<6aNPMVRu7x{ZSgo<<HNj*J{F>}p^MAxR LCT0183}DR@nwM%N literal 0 HcmV?d00001 diff --git a/jetty-util/pom.xml b/jetty-util/pom.xml index 4d90bf11b3d..1ad979120da 100644 --- a/jetty-util/pom.xml +++ b/jetty-util/pom.xml @@ -54,95 +54,6 @@ </instructions> </configuration> </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-shade-plugin</artifactId> - <executions> - <execution> - <phase>package</phase> - <goals> - <goal>shade</goal> - </goals> - <configuration> - <finalName>${jmhjar.name}</finalName> - <shadeTestJar>true</shadeTestJar> - <artifactSet> - <includes> - <include>org.openjdk.jmh:jmh-core</include> - </includes> - </artifactSet> - <transformers> - <transformer - implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> - <mainClass>org.openjdk.jmh.Main</mainClass> - </transformer> - </transformers> - <filters> - <filter> - <artifact>org.openjdk.jmh:jmh-core</artifact> - <includes> - <include>**</include> - </includes> - </filter> - <filter> - <artifact>*:*</artifact> - <excludes> - <exclude>META-INF/*.SF</exclude> - <exclude>META-INF/*.DSA</exclude> - <exclude>META-INF/*.RSA</exclude> - </excludes> - </filter> - </filters> - </configuration> - </execution> - </executions> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <executions> - <execution> - <goals> - <goal>testCompile</goal> - </goals> - <configuration> - <annotationProcessorPaths> - <path> - <groupId>org.openjdk.jmh</groupId> - <artifactId>jmh-generator-annprocess</artifactId> - <version>${jmh.version}</version> - </path> - </annotationProcessorPaths> - </configuration> - </execution> - </executions> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-assembly-plugin</artifactId> - <executions> - <execution> - <id>make-perf-assembly</id> - <phase>package</phase> - <goals> - <goal>single</goal> - </goals> - <configuration> - <descriptors> - <descriptor>src/main/assembly/perf-tests.xml</descriptor> - </descriptors> - <finalName>perf-test</finalName> - <appendAssemblyId>false</appendAssemblyId> - <attach>false</attach> - <archive> - <manifest> - <mainClass>org.openjdk.jmh.Main</mainClass> - </manifest> - </archive> - </configuration> - </execution> - </executions> - </plugin> </plugins> <pluginManagement> <plugins> @@ -191,17 +102,5 @@ <version>${slf4j.version}</version> <scope>test</scope> </dependency> - <dependency> - <groupId>org.openjdk.jmh</groupId> - <artifactId>jmh-core</artifactId> - <version>${jmh.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.openjdk.jmh</groupId> - <artifactId>jmh-generator-annprocess</artifactId> - <version>${jmh.version}</version> - <scope>test</scope> - </dependency> </dependencies> </project> diff --git a/pom.xml b/pom.xml index 75543b1cba0..523b2a90ca4 100644 --- a/pom.xml +++ b/pom.xml @@ -92,6 +92,7 @@ <module>jetty-memcached</module> <module>jetty-hazelcast</module> <module>jetty-unixsocket</module> + <module>jetty-jmh</module> <module>tests</module> <module>examples</module> <module>jetty-quickstart</module> From da9c5fcae20a8440ac26cff5c10f155d114ffd6d Mon Sep 17 00:00:00 2001 From: Simone Bordet <simone.bordet@gmail.com> Date: Mon, 6 Aug 2018 12:41:44 +0200 Subject: [PATCH 48/48] Fixes #2777 - Workaround for Conscrypt's ssl == null. Isolated SSLEngine method calls and wrapped them into try/catch blocks to ignore the NullPointerException thrown by Conscrypt. Signed-off-by: Simone Bordet <simone.bordet@gmail.com> --- .../eclipse/jetty/io/ssl/SslConnection.java | 48 +++++++++++++++++-- 1 file changed, 43 insertions(+), 5 deletions(-) diff --git a/jetty-io/src/main/java/org/eclipse/jetty/io/ssl/SslConnection.java b/jetty-io/src/main/java/org/eclipse/jetty/io/ssl/SslConnection.java index c82d6e37a8c..9cb3cf94bda 100644 --- a/jetty-io/src/main/java/org/eclipse/jetty/io/ssl/SslConnection.java +++ b/jetty-io/src/main/java/org/eclipse/jetty/io/ssl/SslConnection.java @@ -705,7 +705,19 @@ public class SslConnection extends AbstractConnection { _sslEngine.closeInbound(); } - catch (SSLException x) + catch (Throwable x) + { + LOG.ignore(x); + } + } + + private void closeOutbound() + { + try + { + _sslEngine.closeOutbound(); + } + catch (Throwable x) { LOG.ignore(x); } @@ -728,7 +740,7 @@ public class SslConnection extends AbstractConnection { if (_cannotAcceptMoreAppDataToFlush) { - if (_sslEngine.isOutboundDone()) + if (isOutboundDone()) throw new EofException(new ClosedChannelException()); return false; } @@ -897,7 +909,7 @@ public class SslConnection extends AbstractConnection { try { - _sslEngine.closeOutbound(); + closeOutbound(); flush(BufferUtil.EMPTY_BUFFER); // Send close handshake SslConnection.this.fillInterested(); // seek reply FIN or RST or close handshake } @@ -912,7 +924,7 @@ public class SslConnection extends AbstractConnection @Override public boolean isOutputShutdown() { - return _sslEngine.isOutboundDone() || getEndPoint().isOutputShutdown(); + return isOutboundDone() || getEndPoint().isOutputShutdown(); } @Override @@ -939,7 +951,33 @@ public class SslConnection extends AbstractConnection @Override public boolean isInputShutdown() { - return _sslEngine.isInboundDone(); + return isInboundDone(); + } + + private boolean isOutboundDone() + { + try + { + return _sslEngine.isOutboundDone(); + } + catch (Throwable x) + { + LOG.ignore(x); + return true; + } + } + + private boolean isInboundDone() + { + try + { + return _sslEngine.isInboundDone(); + } + catch (Throwable x) + { + LOG.ignore(x); + return true; + } } @Override