From 27da746168fd133dc5349319e3f0689cc2349d7b Mon Sep 17 00:00:00 2001
From: "Deployment Bot (from Travis CI)" <deploy@travis-ci.org>
Date: Thu, 28 May 2020 19:38:27 +0000
Subject: [PATCH] Deploy ReactPHP Website to
 github.com/reactphp/reactphp.github.io.git:master

---
 CNAME                                      |    1 +
 android-chrome-192x192.png                 |  Bin 0 -> 4556 bytes
 android-chrome-512x512.png                 |  Bin 0 -> 12680 bytes
 apple-touch-icon.png                       |  Bin 0 -> 4087 bytes
 assets/2.0f8f4948.js                       |    8 +
 assets/3.284c81ab.css                      |    1 +
 assets/3.ca2827c9.js                       |    1 +
 assets/4.7d534a7e.js                       |    1 +
 assets/4.87863994.css                      |    1 +
 assets/5.99f8f23a.js                       |    1 +
 assets/5.ef18ddd4.css                      |    1 +
 assets/icons.063d0ba7.ttf                  |  Bin 0 -> 3764 bytes
 assets/icons.5ea4cc5c.woff                 |  Bin 0 -> 3840 bytes
 assets/icons.d59afb7d.svg                  |   25 +
 assets/main.d691d407.js                    |    1 +
 assets/main.e474d84e.css                   |    1 +
 assets/manifest.json                       |   18 +
 assets/runtime.c39e0f59.js                 |    1 +
 assets/search.72dc4739.svg                 |    1 +
 assets/sourcesanspro-bold.be4ba3dd.woff    |  Bin 0 -> 18056 bytes
 assets/sourcesanspro-regular.19ca4d35.woff |  Bin 0 -> 18364 bytes
 browserconfig.xml                          |    9 +
 cache/changelog.html                       |  668 ++
 cache/index.html                           |  676 ++
 cache/license.html                         |  407 ++
 changelog.atom                             |  303 +
 changelog.html                             | 7311 ++++++++++++++++++++
 child-process/changelog.html               |  739 ++
 child-process/index.html                   |  890 +++
 child-process/license.html                 |  432 ++
 datagram/changelog.html                    |  642 ++
 datagram/index.html                        |  428 ++
 datagram/license.html                      |  398 ++
 dns/changelog.html                         | 1394 ++++
 dns/index.html                             |  886 +++
 dns/license.html                           |  532 ++
 event-loop/changelog.html                  | 1324 ++++
 event-loop/index.html                      | 1124 +++
 event-loop/license.html                    |  572 ++
 favicon-32x32.png                          |  Bin 0 -> 719 bytes
 favicon.ico                                |  Bin 0 -> 15086 bytes
 http-client/changelog.html                 | 1445 ++++
 http-client/index.html                     |  754 ++
 http-client/license.html                   |  587 ++
 http/changelog.html                        | 1574 +++++
 http/index.html                            | 1803 +++++
 http/license.html                          |  567 ++
 index.html                                 |  788 +++
 manifest.json                              |   18 +
 mstile-150x150.png                         |  Bin 0 -> 3973 bytes
 og-image.png                               |  Bin 0 -> 31391 bytes
 promise-stream/changelog.html              |  564 ++
 promise-stream/index.html                  |  568 ++
 promise-stream/license.html                |  383 +
 promise-timer/changelog.html               |  632 ++
 promise-timer/index.html                   |  676 ++
 promise-timer/license.html                 |  398 ++
 promise/changelog.html                     | 1058 +++
 promise/index.html                         | 1217 ++++
 promise/license.html                       |  500 ++
 robots.txt                                 |    2 +
 safari-pinned-tab.svg                      |    1 +
 socket/changelog.html                      | 1856 +++++
 socket/index.html                          | 1769 +++++
 socket/license.html                        |  637 ++
 stream/changelog.html                      | 1564 +++++
 stream/index.html                          | 1469 ++++
 stream/license.html                        |  567 ++
 68 files changed, 40194 insertions(+)
 create mode 100644 CNAME
 create mode 100644 android-chrome-192x192.png
 create mode 100644 android-chrome-512x512.png
 create mode 100644 apple-touch-icon.png
 create mode 100644 assets/2.0f8f4948.js
 create mode 100644 assets/3.284c81ab.css
 create mode 100644 assets/3.ca2827c9.js
 create mode 100644 assets/4.7d534a7e.js
 create mode 100644 assets/4.87863994.css
 create mode 100644 assets/5.99f8f23a.js
 create mode 100644 assets/5.ef18ddd4.css
 create mode 100644 assets/icons.063d0ba7.ttf
 create mode 100644 assets/icons.5ea4cc5c.woff
 create mode 100644 assets/icons.d59afb7d.svg
 create mode 100644 assets/main.d691d407.js
 create mode 100644 assets/main.e474d84e.css
 create mode 100644 assets/manifest.json
 create mode 100644 assets/runtime.c39e0f59.js
 create mode 100644 assets/search.72dc4739.svg
 create mode 100644 assets/sourcesanspro-bold.be4ba3dd.woff
 create mode 100644 assets/sourcesanspro-regular.19ca4d35.woff
 create mode 100644 browserconfig.xml
 create mode 100644 cache/changelog.html
 create mode 100644 cache/index.html
 create mode 100644 cache/license.html
 create mode 100644 changelog.atom
 create mode 100644 changelog.html
 create mode 100644 child-process/changelog.html
 create mode 100644 child-process/index.html
 create mode 100644 child-process/license.html
 create mode 100644 datagram/changelog.html
 create mode 100644 datagram/index.html
 create mode 100644 datagram/license.html
 create mode 100644 dns/changelog.html
 create mode 100644 dns/index.html
 create mode 100644 dns/license.html
 create mode 100644 event-loop/changelog.html
 create mode 100644 event-loop/index.html
 create mode 100644 event-loop/license.html
 create mode 100644 favicon-32x32.png
 create mode 100644 favicon.ico
 create mode 100644 http-client/changelog.html
 create mode 100644 http-client/index.html
 create mode 100644 http-client/license.html
 create mode 100644 http/changelog.html
 create mode 100644 http/index.html
 create mode 100644 http/license.html
 create mode 100644 index.html
 create mode 100644 manifest.json
 create mode 100644 mstile-150x150.png
 create mode 100644 og-image.png
 create mode 100644 promise-stream/changelog.html
 create mode 100644 promise-stream/index.html
 create mode 100644 promise-stream/license.html
 create mode 100644 promise-timer/changelog.html
 create mode 100644 promise-timer/index.html
 create mode 100644 promise-timer/license.html
 create mode 100644 promise/changelog.html
 create mode 100644 promise/index.html
 create mode 100644 promise/license.html
 create mode 100644 robots.txt
 create mode 100644 safari-pinned-tab.svg
 create mode 100644 socket/changelog.html
 create mode 100644 socket/index.html
 create mode 100644 socket/license.html
 create mode 100644 stream/changelog.html
 create mode 100644 stream/index.html
 create mode 100644 stream/license.html

diff --git a/CNAME b/CNAME
new file mode 100644
index 000000000..77687c8d4
--- /dev/null
+++ b/CNAME
@@ -0,0 +1 @@
+reactphp.org
diff --git a/android-chrome-192x192.png b/android-chrome-192x192.png
new file mode 100644
index 0000000000000000000000000000000000000000..7617f1663b3474a3da711edd40f18684f756ec67
GIT binary patch
diff --git a/android-chrome-512x512.png b/android-chrome-512x512.png
new file mode 100644
index 0000000000000000000000000000000000000000..77bd8c549b334f9cfbefd2638c1ce470c7d0c694
GIT binary patch
diff --git a/apple-touch-icon.png b/apple-touch-icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..f8c13013ae1f5065b82c5610b280efa07b728b09
GIT binary patch
diff --git a/assets/2.0f8f4948.js b/assets/2.0f8f4948.js
new file mode 100644
index 000000000..e8ccfb9aa
--- /dev/null
+++ b/assets/2.0f8f4948.js
@@ -0,0 +1,8 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{"+Ewk":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default="2.6.3"},"+RWU":function(t,e,n){"use strict";t.exports=function(t,e,n){if("GET"!==e.method)return void n(new Error("Method "+e.method+" "+t+" is not supported by JSONP."));e.debug("JSONP: start");var o=!1,s=!1;i+=1;var a=document.getElementsByTagName("head")[0],u=document.createElement("script"),c="algoliaJSONP_"+i,l=!1;window[c]=function(t){!function(){try{delete window[c],delete window[c+"_loaded"]}catch(t){window[c]=window[c+"_loaded"]=void 0}}(),s?e.debug("JSONP: Late answer, ignoring"):(o=!0,f(),n(null,{body:t,responseText:JSON.stringify(t)}))},t+="&callback="+c,e.jsonBody&&e.jsonBody.params&&(t+="&"+e.jsonBody.params);var h=setTimeout((function(){e.debug("JSONP: Script timeout"),s=!0,f(),n(new r.RequestTimeout)}),e.timeouts.complete);function p(){e.debug("JSONP: success"),l||s||(l=!0,o||(e.debug("JSONP: Fail. Script loaded but did not call the callback"),f(),n(new r.JSONPScriptFail)))}function f(){clearTimeout(h),u.onload=null,u.onreadystatechange=null,u.onerror=null,a.removeChild(u)}u.onreadystatechange=function(){"loaded"!==this.readyState&&"complete"!==this.readyState||p()},u.onload=p,u.onerror=function(){e.debug("JSONP: Script error"),l||s||(f(),n(new r.JSONPScriptError))},u.async=!0,u.defer=!0,u.src=t,a.appendChild(u)};var r=n("Z4lL"),i=0},"/kzE":function(t,e){function n(t){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var r;r=window,t.exports=function(t){var e,r,i=function(){var e,r,i,o,s,a,u=[],c=u.concat,l=u.filter,h=u.slice,p=t.document,f={},d={},m={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},g=/^\s*<(\w+|!)[^>]*>/,y=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,b=/^(?:body|html)$/i,w=/([A-Z])/g,_=["val","css","html","text","data","width","height","offset"],x=p.createElement("table"),S=p.createElement("tr"),C={tr:p.createElement("tbody"),tbody:x,thead:x,tfoot:x,td:S,th:S,"*":p.createElement("div")},A=/complete|loaded|interactive/,T=/^[\w-]*$/,k={},O=k.toString,E={},N=p.createElement("div"),j={tabindex:"tabIndex",readonly:"readOnly",for:"htmlFor",class:"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},R=Array.isArray||function(t){return t instanceof Array};function I(t){return null==t?String(t):k[O.call(t)]||"object"}function P(t){return"function"==I(t)}function D(t){return null!=t&&t==t.window}function $(t){return null!=t&&t.nodeType==t.DOCUMENT_NODE}function q(t){return"object"==I(t)}function L(t){return q(t)&&!D(t)&&Object.getPrototypeOf(t)==Object.prototype}function M(t){var e=!!t&&"length"in t&&t.length,n=i.type(t);return"function"!=n&&!D(t)&&("array"==n||0===e||"number"==typeof e&&e>0&&e-1 in t)}function H(t){return t.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function F(t){return t in d?d[t]:d[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}function U(t,e){return"number"!=typeof e||m[H(t)]?e:e+"px"}function B(t){return"children"in t?h.call(t.children):i.map(t.childNodes,(function(t){if(1==t.nodeType)return t}))}function V(t,e){var n,r=t?t.length:0;for(n=0;n<r;n++)this[n]=t[n];this.length=r,this.selector=e||""}function K(t,n,i){for(r in n)i&&(L(n[r])||R(n[r]))?(L(n[r])&&!L(t[r])&&(t[r]={}),R(n[r])&&!R(t[r])&&(t[r]=[]),K(t[r],n[r],i)):n[r]!==e&&(t[r]=n[r])}function J(t,e){return null==e?i(t):i(t).filter(e)}function z(t,e,n,r){return P(e)?e.call(t,n,r):e}function W(t,e,n){null==n?t.removeAttribute(e):t.setAttribute(e,n)}function X(t,n){var r=t.className||"",i=r&&r.baseVal!==e;if(n===e)return i?r.baseVal:r;i?r.baseVal=n:t.className=n}function Q(t){try{return t?"true"==t||"false"!=t&&("null"==t?null:+t+""==t?+t:/^[\[\{]/.test(t)?i.parseJSON(t):t):t}catch(e){return t}}function Z(t,e){e(t);for(var n=0,r=t.childNodes.length;n<r;n++)Z(t.childNodes[n],e)}return E.matches=function(t,e){if(!e||!t||1!==t.nodeType)return!1;var n=t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.oMatchesSelector||t.matchesSelector;if(n)return n.call(t,e);var r,i=t.parentNode,o=!i;return o&&(i=N).appendChild(t),r=~E.qsa(i,e).indexOf(t),o&&N.removeChild(t),r},s=function(t){return t.replace(/-+(.)?/g,(function(t,e){return e?e.toUpperCase():""}))},a=function(t){return l.call(t,(function(e,n){return t.indexOf(e)==n}))},E.fragment=function(t,n,r){var o,s,a;return y.test(t)&&(o=i(p.createElement(RegExp.$1))),o||(t.replace&&(t=t.replace(v,"<$1></$2>")),n===e&&(n=g.test(t)&&RegExp.$1),n in C||(n="*"),(a=C[n]).innerHTML=""+t,o=i.each(h.call(a.childNodes),(function(){a.removeChild(this)}))),L(r)&&(s=i(o),i.each(r,(function(t,e){_.indexOf(t)>-1?s[t](e):s.attr(t,e)}))),o},E.Z=function(t,e){return new V(t,e)},E.isZ=function(t){return t instanceof E.Z},E.init=function(t,n){var r,o;if(!t)return E.Z();if("string"==typeof t)if("<"==(t=t.trim())[0]&&g.test(t))r=E.fragment(t,RegExp.$1,n),t=null;else{if(n!==e)return i(n).find(t);r=E.qsa(p,t)}else{if(P(t))return i(p).ready(t);if(E.isZ(t))return t;if(R(t))o=t,r=l.call(o,(function(t){return null!=t}));else if(q(t))r=[t],t=null;else if(g.test(t))r=E.fragment(t.trim(),RegExp.$1,n),t=null;else{if(n!==e)return i(n).find(t);r=E.qsa(p,t)}}return E.Z(r,t)},(i=function(t,e){return E.init(t,e)}).extend=function(t){var e,n=h.call(arguments,1);return"boolean"==typeof t&&(e=t,t=n.shift()),n.forEach((function(n){K(t,n,e)})),t},E.qsa=function(t,e){var n,r="#"==e[0],i=!r&&"."==e[0],o=r||i?e.slice(1):e,s=T.test(o);return t.getElementById&&s&&r?(n=t.getElementById(o))?[n]:[]:1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType?[]:h.call(s&&!r&&t.getElementsByClassName?i?t.getElementsByClassName(o):t.getElementsByTagName(e):t.querySelectorAll(e))},i.contains=p.documentElement.contains?function(t,e){return t!==e&&t.contains(e)}:function(t,e){for(;e&&(e=e.parentNode);)if(e===t)return!0;return!1},i.type=I,i.isFunction=P,i.isWindow=D,i.isArray=R,i.isPlainObject=L,i.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},i.isNumeric=function(t){var e=Number(t),r=n(t);return null!=t&&"boolean"!=r&&("string"!=r||t.length)&&!isNaN(e)&&isFinite(e)||!1},i.inArray=function(t,e,n){return u.indexOf.call(e,t,n)},i.camelCase=s,i.trim=function(t){return null==t?"":String.prototype.trim.call(t)},i.uuid=0,i.support={},i.expr={},i.noop=function(){},i.map=function(t,e){var n,r,o,s,a=[];if(M(t))for(r=0;r<t.length;r++)null!=(n=e(t[r],r))&&a.push(n);else for(o in t)null!=(n=e(t[o],o))&&a.push(n);return(s=a).length>0?i.fn.concat.apply([],s):s},i.each=function(t,e){var n,r;if(M(t)){for(n=0;n<t.length;n++)if(!1===e.call(t[n],n,t[n]))return t}else for(r in t)if(!1===e.call(t[r],r,t[r]))return t;return t},i.grep=function(t,e){return l.call(t,e)},t.JSON&&(i.parseJSON=JSON.parse),i.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),(function(t,e){k["[object "+e+"]"]=e.toLowerCase()})),i.fn={constructor:E.Z,length:0,forEach:u.forEach,reduce:u.reduce,push:u.push,sort:u.sort,splice:u.splice,indexOf:u.indexOf,concat:function(){var t,e,n=[];for(t=0;t<arguments.length;t++)e=arguments[t],n[t]=E.isZ(e)?e.toArray():e;return c.apply(E.isZ(this)?this.toArray():this,n)},map:function(t){return i(i.map(this,(function(e,n){return t.call(e,n,e)})))},slice:function(){return i(h.apply(this,arguments))},ready:function(t){return A.test(p.readyState)&&p.body?t(i):p.addEventListener("DOMContentLoaded",(function(){t(i)}),!1),this},get:function(t){return t===e?h.call(this):this[t>=0?t:t+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each((function(){null!=this.parentNode&&this.parentNode.removeChild(this)}))},each:function(t){return u.every.call(this,(function(e,n){return!1!==t.call(e,n,e)})),this},filter:function(t){return P(t)?this.not(this.not(t)):i(l.call(this,(function(e){return E.matches(e,t)})))},add:function(t,e){return i(a(this.concat(i(t,e))))},is:function(t){return this.length>0&&E.matches(this[0],t)},not:function(t){var n=[];if(P(t)&&t.call!==e)this.each((function(e){t.call(this,e)||n.push(this)}));else{var r="string"==typeof t?this.filter(t):M(t)&&P(t.item)?h.call(t):i(t);this.forEach((function(t){r.indexOf(t)<0&&n.push(t)}))}return i(n)},has:function(t){return this.filter((function(){return q(t)?i.contains(this,t):i(this).find(t).size()}))},eq:function(t){return-1===t?this.slice(t):this.slice(t,+t+1)},first:function(){var t=this[0];return t&&!q(t)?t:i(t)},last:function(){var t=this[this.length-1];return t&&!q(t)?t:i(t)},find:function(t){var e=this;return t?"object"==n(t)?i(t).filter((function(){var t=this;return u.some.call(e,(function(e){return i.contains(e,t)}))})):1==this.length?i(E.qsa(this[0],t)):this.map((function(){return E.qsa(this,t)})):i()},closest:function(t,e){var r=[],o="object"==n(t)&&i(t);return this.each((function(n,i){for(;i&&!(o?o.indexOf(i)>=0:E.matches(i,t));)i=i!==e&&!$(i)&&i.parentNode;i&&r.indexOf(i)<0&&r.push(i)})),i(r)},parents:function(t){for(var e=[],n=this;n.length>0;)n=i.map(n,(function(t){if((t=t.parentNode)&&!$(t)&&e.indexOf(t)<0)return e.push(t),t}));return J(e,t)},parent:function(t){return J(a(this.pluck("parentNode")),t)},children:function(t){return J(this.map((function(){return B(this)})),t)},contents:function(){return this.map((function(){return this.contentDocument||h.call(this.childNodes)}))},siblings:function(t){return J(this.map((function(t,e){return l.call(B(e.parentNode),(function(t){return t!==e}))})),t)},empty:function(){return this.each((function(){this.innerHTML=""}))},pluck:function(t){return i.map(this,(function(e){return e[t]}))},show:function(){return this.each((function(){var t,e,n;"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=(t=this.nodeName,f[t]||(e=p.createElement(t),p.body.appendChild(e),n=getComputedStyle(e,"").getPropertyValue("display"),e.parentNode.removeChild(e),"none"==n&&(n="block"),f[t]=n),f[t]))}))},replaceWith:function(t){return this.before(t).remove()},wrap:function(t){var e=P(t);if(this[0]&&!e)var n=i(t).get(0),r=n.parentNode||this.length>1;return this.each((function(o){i(this).wrapAll(e?t.call(this,o):r?n.cloneNode(!0):n)}))},wrapAll:function(t){if(this[0]){var e;for(i(this[0]).before(t=i(t));(e=t.children()).length;)t=e.first();i(t).append(this)}return this},wrapInner:function(t){var e=P(t);return this.each((function(n){var r=i(this),o=r.contents(),s=e?t.call(this,n):t;o.length?o.wrapAll(s):r.append(s)}))},unwrap:function(){return this.parent().each((function(){i(this).replaceWith(i(this).children())})),this},clone:function(){return this.map((function(){return this.cloneNode(!0)}))},hide:function(){return this.css("display","none")},toggle:function(t){return this.each((function(){var n=i(this);(t===e?"none"==n.css("display"):t)?n.show():n.hide()}))},prev:function(t){return i(this.pluck("previousElementSibling")).filter(t||"*")},next:function(t){return i(this.pluck("nextElementSibling")).filter(t||"*")},html:function(t){return 0 in arguments?this.each((function(e){var n=this.innerHTML;i(this).empty().append(z(this,t,e,n))})):0 in this?this[0].innerHTML:null},text:function(t){return 0 in arguments?this.each((function(e){var n=z(this,t,e,this.textContent);this.textContent=null==n?"":""+n})):0 in this?this.pluck("textContent").join(""):null},attr:function(t,n){var i;return"string"!=typeof t||1 in arguments?this.each((function(e){if(1===this.nodeType)if(q(t))for(r in t)W(this,r,t[r]);else W(this,t,z(this,n,e,this.getAttribute(t)))})):0 in this&&1==this[0].nodeType&&null!=(i=this[0].getAttribute(t))?i:e},removeAttr:function(t){return this.each((function(){1===this.nodeType&&t.split(" ").forEach((function(t){W(this,t)}),this)}))},prop:function(t,e){return t=j[t]||t,1 in arguments?this.each((function(n){this[t]=z(this,e,n,this[t])})):this[0]&&this[0][t]},removeProp:function(t){return t=j[t]||t,this.each((function(){delete this[t]}))},data:function(t,n){var r="data-"+t.replace(w,"-$1").toLowerCase(),i=1 in arguments?this.attr(r,n):this.attr(r);return null!==i?Q(i):e},val:function(t){return 0 in arguments?(null==t&&(t=""),this.each((function(e){this.value=z(this,t,e,this.value)}))):this[0]&&(this[0].multiple?i(this[0]).find("option").filter((function(){return this.selected})).pluck("value"):this[0].value)},offset:function(e){if(e)return this.each((function(t){var n=i(this),r=z(this,e,t,n.offset()),o=n.offsetParent().offset(),s={top:r.top-o.top,left:r.left-o.left};"static"==n.css("position")&&(s.position="relative"),n.css(s)}));if(!this.length)return null;if(p.documentElement!==this[0]&&!i.contains(p.documentElement,this[0]))return{top:0,left:0};var n=this[0].getBoundingClientRect();return{left:n.left+t.pageXOffset,top:n.top+t.pageYOffset,width:Math.round(n.width),height:Math.round(n.height)}},css:function(t,e){if(arguments.length<2){var n=this[0];if("string"==typeof t){if(!n)return;return n.style[s(t)]||getComputedStyle(n,"").getPropertyValue(t)}if(R(t)){if(!n)return;var o={},a=getComputedStyle(n,"");return i.each(t,(function(t,e){o[e]=n.style[s(e)]||a.getPropertyValue(e)})),o}}var u="";if("string"==I(t))e||0===e?u=H(t)+":"+U(t,e):this.each((function(){this.style.removeProperty(H(t))}));else for(r in t)t[r]||0===t[r]?u+=H(r)+":"+U(r,t[r])+";":this.each((function(){this.style.removeProperty(H(r))}));return this.each((function(){this.style.cssText+=";"+u}))},index:function(t){return t?this.indexOf(i(t)[0]):this.parent().children().indexOf(this[0])},hasClass:function(t){return!!t&&u.some.call(this,(function(t){return this.test(X(t))}),F(t))},addClass:function(t){return t?this.each((function(e){if("className"in this){o=[];var n=X(this);z(this,t,e,n).split(/\s+/g).forEach((function(t){i(this).hasClass(t)||o.push(t)}),this),o.length&&X(this,n+(n?" ":"")+o.join(" "))}})):this},removeClass:function(t){return this.each((function(n){if("className"in this){if(t===e)return X(this,"");o=X(this),z(this,t,n,o).split(/\s+/g).forEach((function(t){o=o.replace(F(t)," ")})),X(this,o.trim())}}))},toggleClass:function(t,n){return t?this.each((function(r){var o=i(this);z(this,t,r,X(this)).split(/\s+/g).forEach((function(t){(n===e?!o.hasClass(t):n)?o.addClass(t):o.removeClass(t)}))})):this},scrollTop:function(t){if(this.length){var n="scrollTop"in this[0];return t===e?n?this[0].scrollTop:this[0].pageYOffset:this.each(n?function(){this.scrollTop=t}:function(){this.scrollTo(this.scrollX,t)})}},scrollLeft:function(t){if(this.length){var n="scrollLeft"in this[0];return t===e?n?this[0].scrollLeft:this[0].pageXOffset:this.each(n?function(){this.scrollLeft=t}:function(){this.scrollTo(t,this.scrollY)})}},position:function(){if(this.length){var t=this[0],e=this.offsetParent(),n=this.offset(),r=b.test(e[0].nodeName)?{top:0,left:0}:e.offset();return n.top-=parseFloat(i(t).css("margin-top"))||0,n.left-=parseFloat(i(t).css("margin-left"))||0,r.top+=parseFloat(i(e[0]).css("border-top-width"))||0,r.left+=parseFloat(i(e[0]).css("border-left-width"))||0,{top:n.top-r.top,left:n.left-r.left}}},offsetParent:function(){return this.map((function(){for(var t=this.offsetParent||p.body;t&&!b.test(t.nodeName)&&"static"==i(t).css("position");)t=t.offsetParent;return t}))}},i.fn.detach=i.fn.remove,["width","height"].forEach((function(t){var n=t.replace(/./,(function(t){return t[0].toUpperCase()}));i.fn[t]=function(r){var o,s=this[0];return r===e?D(s)?s["inner"+n]:$(s)?s.documentElement["scroll"+n]:(o=this.offset())&&o[t]:this.each((function(e){(s=i(this)).css(t,z(this,r,e,s[t]()))}))}})),["after","prepend","before","append"].forEach((function(n,r){var o=r%2;i.fn[n]=function(){var n,s,a=i.map(arguments,(function(t){var r=[];return"array"==(n=I(t))?(t.forEach((function(t){return t.nodeType!==e?r.push(t):i.zepto.isZ(t)?r=r.concat(t.get()):void(r=r.concat(E.fragment(t)))})),r):"object"==n||null==t?t:E.fragment(t)})),u=this.length>1;return a.length<1?this:this.each((function(e,n){s=o?n:n.parentNode,n=0==r?n.nextSibling:1==r?n.firstChild:2==r?n:null;var c=i.contains(p.documentElement,s);a.forEach((function(e){if(u)e=e.cloneNode(!0);else if(!s)return i(e).remove();s.insertBefore(e,n),c&&Z(e,(function(e){if(!(null==e.nodeName||"SCRIPT"!==e.nodeName.toUpperCase()||e.type&&"text/javascript"!==e.type||e.src)){var n=e.ownerDocument?e.ownerDocument.defaultView:t;n.eval.call(n,e.innerHTML)}}))}))}))},i.fn[o?n+"To":"insert"+(r?"Before":"After")]=function(t){return i(t)[n](this),this}})),E.Z.prototype=V.prototype=i.fn,E.uniq=a,E.deserializeValue=Q,i.zepto=E,i}();return function(e){var n,r=1,i=Array.prototype.slice,o=e.isFunction,s=function(t){return"string"==typeof t},a={},u={},c="onfocusin"in t,l={focus:"focusin",blur:"focusout"},h={mouseenter:"mouseover",mouseleave:"mouseout"};function p(t){return t._zid||(t._zid=r++)}function f(t,e,n,r){if((e=d(e)).ns)var i=(o=e.ns,new RegExp("(?:^| )"+o.replace(" "," .* ?")+"(?: |$)"));var o;return(a[p(t)]||[]).filter((function(t){return t&&(!e.e||t.e==e.e)&&(!e.ns||i.test(t.ns))&&(!n||p(t.fn)===p(n))&&(!r||t.sel==r)}))}function d(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort().join(" ")}}function m(t,e){return t.del&&!c&&t.e in l||!!e}function g(t){return h[t]||c&&l[t]||t}function y(t,r,i,o,s,u,c){var l=p(t),f=a[l]||(a[l]=[]);r.split(/\s/).forEach((function(r){if("ready"==r)return e(document).ready(i);var a=d(r);a.fn=i,a.sel=s,a.e in h&&(i=function(t){var n=t.relatedTarget;if(!n||n!==this&&!e.contains(this,n))return a.fn.apply(this,arguments)}),a.del=u;var l=u||i;a.proxy=function(e){if(!(e=S(e)).isImmediatePropagationStopped()){try{var r=Object.getOwnPropertyDescriptor(e,"data");r&&!r.writable||(e.data=o)}catch(e){}var i=l.apply(t,e._args==n?[e]:[e].concat(e._args));return!1===i&&(e.preventDefault(),e.stopPropagation()),i}},a.i=f.length,f.push(a),"addEventListener"in t&&t.addEventListener(g(a.e),a.proxy,m(a,c))}))}function v(t,e,n,r,i){var o=p(t);(e||"").split(/\s/).forEach((function(e){f(t,e,n,r).forEach((function(e){delete a[o][e.i],"removeEventListener"in t&&t.removeEventListener(g(e.e),e.proxy,m(e,i))}))}))}u.click=u.mousedown=u.mouseup=u.mousemove="MouseEvents",e.event={add:y,remove:v},e.proxy=function(t,n){var r=2 in arguments&&i.call(arguments,2);if(o(t)){var a=function(){return t.apply(n,r?r.concat(i.call(arguments)):arguments)};return a._zid=p(t),a}if(s(n))return r?(r.unshift(t[n],t),e.proxy.apply(null,r)):e.proxy(t[n],t);throw new TypeError("expected function")},e.fn.bind=function(t,e,n){return this.on(t,e,n)},e.fn.unbind=function(t,e){return this.off(t,e)},e.fn.one=function(t,e,n,r){return this.on(t,e,n,r,1)};var b=function(){return!0},w=function(){return!1},_=/^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,x={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};function S(t,r){return!r&&t.isDefaultPrevented||(r||(r=t),e.each(x,(function(e,n){var i=r[e];t[e]=function(){return this[n]=b,i&&i.apply(r,arguments)},t[n]=w})),t.timeStamp||(t.timeStamp=Date.now()),(r.defaultPrevented!==n?r.defaultPrevented:"returnValue"in r?!1===r.returnValue:r.getPreventDefault&&r.getPreventDefault())&&(t.isDefaultPrevented=b)),t}function C(t){var e,r={originalEvent:t};for(e in t)_.test(e)||t[e]===n||(r[e]=t[e]);return S(r,t)}e.fn.delegate=function(t,e,n){return this.on(e,t,n)},e.fn.undelegate=function(t,e,n){return this.off(e,t,n)},e.fn.live=function(t,n){return e(document.body).delegate(this.selector,t,n),this},e.fn.die=function(t,n){return e(document.body).undelegate(this.selector,t,n),this},e.fn.on=function(t,r,a,u,c){var l,h,p=this;return t&&!s(t)?(e.each(t,(function(t,e){p.on(t,r,a,e,c)})),p):(s(r)||o(u)||!1===u||(u=a,a=r,r=n),u!==n&&!1!==a||(u=a,a=n),!1===u&&(u=w),p.each((function(n,o){c&&(l=function(t){return v(o,t.type,u),u.apply(this,arguments)}),r&&(h=function(t){var n,s=e(t.target).closest(r,o).get(0);if(s&&s!==o)return n=e.extend(C(t),{currentTarget:s,liveFired:o}),(l||u).apply(s,[n].concat(i.call(arguments,1)))}),y(o,t,u,a,r,h||l)})))},e.fn.off=function(t,r,i){var a=this;return t&&!s(t)?(e.each(t,(function(t,e){a.off(t,r,e)})),a):(s(r)||o(i)||!1===i||(i=r,r=n),!1===i&&(i=w),a.each((function(){v(this,t,i,r)})))},e.fn.trigger=function(t,n){return(t=s(t)||e.isPlainObject(t)?e.Event(t):S(t))._args=n,this.each((function(){t.type in l&&"function"==typeof this[t.type]?this[t.type]():"dispatchEvent"in this?this.dispatchEvent(t):e(this).triggerHandler(t,n)}))},e.fn.triggerHandler=function(t,n){var r,i;return this.each((function(o,a){(r=C(s(t)?e.Event(t):t))._args=n,r.target=a,e.each(f(a,t.type||t),(function(t,e){if(i=e.proxy(r),r.isImmediatePropagationStopped())return!1}))})),i},"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach((function(t){e.fn[t]=function(e){return 0 in arguments?this.bind(t,e):this.trigger(t)}})),e.Event=function(t,e){s(t)||(t=(e=t).type);var n=document.createEvent(u[t]||"Events"),r=!0;if(e)for(var i in e)"bubbles"==i?r=!!e[i]:n[i]=e[i];return n.initEvent(t,r,!0),S(n)}}(i),r=[],i.fn.remove=function(){return this.each((function(){this.parentNode&&("IMG"===this.tagName&&(r.push(this),this.src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=",e&&clearTimeout(e),e=setTimeout((function(){r=[]}),6e4)),this.parentNode.removeChild(this))}))},function(t){var e={},n=t.fn.data,r=t.camelCase,i=t.expando="Zepto"+ +new Date,o=[];function s(n,s,a){var u=n[i]||(n[i]=++t.uuid),c=e[u]||(e[u]=function(e){var n={};return t.each(e.attributes||o,(function(e,i){0==i.name.indexOf("data-")&&(n[r(i.name.replace("data-",""))]=t.zepto.deserializeValue(i.value))})),n}(n));return void 0!==s&&(c[r(s)]=a),c}t.fn.data=function(o,a){return void 0===a?t.isPlainObject(o)?this.each((function(e,n){t.each(o,(function(t,e){s(n,t,e)}))})):0 in this?function(o,a){var u=o[i],c=u&&e[u];if(void 0===a)return c||s(o);if(c){if(a in c)return c[a];var l=r(a);if(l in c)return c[l]}return n.call(t(o),a)}(this[0],o):void 0:this.each((function(){s(this,o,a)}))},t.data=function(e,n,r){return t(e).data(n,r)},t.hasData=function(n){var r=n[i],o=r&&e[r];return!!o&&!t.isEmptyObject(o)},t.fn.removeData=function(n){return"string"==typeof n&&(n=n.split(/\s+/)),this.each((function(){var o=this[i],s=o&&e[o];s&&t.each(n||s,(function(t){delete s[n?r(this):t]}))}))},["remove","empty"].forEach((function(e){var n=t.fn[e];t.fn[e]=function(){var t=this.find("*");return"remove"===e&&(t=t.add(this)),t.removeData(),n.call(this)}}))}(i),i}(r)},"0Ul8":function(t,e,n){(function(e){t.exports=u;var r=n("Z4lL"),i=n("c+Bx"),o=n("ilQL"),s=n("ef3p"),a=e.env.RESET_APP_DATA_TIMER&&parseInt(e.env.RESET_APP_DATA_TIMER,10)||12e4;function u(t,e,i){var o=n("NOtv")("algoliasearch"),s=n("sLmk"),a=n("49sm"),u=n("7Ule"),l="Usage: algoliasearch(applicationID, apiKey, opts)";if(!0!==i._allowEmptyCredentials&&!t)throw new r.AlgoliaSearchError("Please provide an application ID. "+l);if(!0!==i._allowEmptyCredentials&&!e)throw new r.AlgoliaSearchError("Please provide an API key. "+l);this.applicationID=t,this.apiKey=e,this.hosts={read:[],write:[]},i=i||{},this._timeouts=i.timeouts||{connect:1e3,read:2e3,write:3e4},i.timeout&&(this._timeouts.connect=this._timeouts.read=this._timeouts.write=i.timeout);var h=i.protocol||"https:";if(/:$/.test(h)||(h+=":"),"http:"!==h&&"https:"!==h)throw new r.AlgoliaSearchError("protocol must be `http:` or `https:` (was `"+i.protocol+"`)");if(this._checkAppIdData(),i.hosts)a(i.hosts)?(this.hosts.read=s(i.hosts),this.hosts.write=s(i.hosts)):(this.hosts.read=s(i.hosts.read),this.hosts.write=s(i.hosts.write));else{var p=u(this._shuffleResult,(function(e){return t+"-"+e+".algolianet.com"})),f=(!1===i.dsn?"":"-dsn")+".algolia.net";this.hosts.read=[this.applicationID+f].concat(p),this.hosts.write=[this.applicationID+".algolia.net"].concat(p)}this.hosts.read=u(this.hosts.read,c(h)),this.hosts.write=u(this.hosts.write,c(h)),this.extraHeaders={},this.cache=i._cache||{},this._ua=i._ua,this._useCache=!(void 0!==i._useCache&&!i._cache)||i._useCache,this._useRequestCache=this._useCache&&i._useRequestCache,this._useFallback=void 0===i.useFallback||i.useFallback,this._setTimeout=i._setTimeout,o("init done, %j",this)}function c(t){return function(e){return t+"//"+e.toLowerCase()}}function l(t){if(void 0===Array.prototype.toJSON)return JSON.stringify(t);var e=Array.prototype.toJSON;delete Array.prototype.toJSON;var n=JSON.stringify(t);return Array.prototype.toJSON=e,n}function h(t){var e={};for(var n in t){var r;if(Object.prototype.hasOwnProperty.call(t,n))r="x-algolia-api-key"===n||"x-algolia-application-id"===n?"**hidden for security purposes**":t[n],e[n]=r}return e}u.prototype.initIndex=function(t){return new o(this,t)},u.prototype.setExtraHeader=function(t,e){this.extraHeaders[t.toLowerCase()]=e},u.prototype.getExtraHeader=function(t){return this.extraHeaders[t.toLowerCase()]},u.prototype.unsetExtraHeader=function(t){delete this.extraHeaders[t.toLowerCase()]},u.prototype.addAlgoliaAgent=function(t){var e="; "+t;-1===this._ua.indexOf(e)&&(this._ua+=e)},u.prototype._jsonRequest=function(t){this._checkAppIdData();var e,o,s,a=n("NOtv")("algoliasearch:"+t.url),u=t.additionalUA||"",c=t.cache,p=this,f=0,d=!1,m=p._useFallback&&p._request.fallback&&t.fallback;this.apiKey.length>500&&void 0!==t.body&&(void 0!==t.body.params||void 0!==t.body.requests)?(t.body.apiKey=this.apiKey,s=this._computeRequestHeaders({additionalUA:u,withApiKey:!1,headers:t.headers})):s=this._computeRequestHeaders({additionalUA:u,headers:t.headers}),void 0!==t.body&&(e=l(t.body)),a("request start");var g=[];function y(t,e,n){return p._useCache&&t&&e&&void 0!==e[n]}function v(e,n){if(y(p._useRequestCache,c,o)&&e.catch((function(){delete c[o]})),"function"!=typeof t.callback)return e.then(n);e.then((function(e){i((function(){t.callback(null,n(e))}),p._setTimeout||setTimeout)}),(function(e){i((function(){t.callback(e)}),p._setTimeout||setTimeout)}))}if(p._useCache&&p._useRequestCache&&(o=t.url),p._useCache&&p._useRequestCache&&e&&(o+="_body_"+e),y(p._useRequestCache,c,o)){a("serving request from cache");var b=c[o];return v("function"!=typeof b.then?p._promise.resolve({responseText:b}):b,(function(t){return JSON.parse(t.responseText)}))}var w=function n(i,v){p._checkAppIdData();var b=new Date;if(p._useCache&&!p._useRequestCache&&(o=t.url),p._useCache&&!p._useRequestCache&&e&&(o+="_body_"+v.body),y(!p._useRequestCache,c,o)){a("serving response from cache");var w=c[o];return p._promise.resolve({body:JSON.parse(w),responseText:w})}if(f>=p.hosts[t.hostType].length)return!m||d?(a("could not get any response"),p._promise.reject(new r.AlgoliaSearchError("Cannot connect to the AlgoliaSearch API. Send an email to support@algolia.com to report and resolve the issue. Application id was: "+p.applicationID,{debugData:g}))):(a("switching to fallback"),f=0,v.method=t.fallback.method,v.url=t.fallback.url,v.jsonBody=t.fallback.body,v.jsonBody&&(v.body=l(v.jsonBody)),s=p._computeRequestHeaders({additionalUA:u,headers:t.headers}),v.timeouts=p._getTimeoutsForRequest(t.hostType),p._setHostIndexByType(0,t.hostType),d=!0,n(p._request.fallback,v));var _=p._getHostByType(t.hostType),x=_+v.url,S={body:v.body,jsonBody:v.jsonBody,method:v.method,headers:s,timeouts:v.timeouts,debug:a,forceAuthHeaders:v.forceAuthHeaders};return a("method: %s, url: %s, headers: %j, timeouts: %d",S.method,x,S.headers,S.timeouts),i===p._request.fallback&&a("using fallback"),i.call(p,x,S).then((function(t){var n=t&&t.body&&t.body.message&&t.body.status||t.statusCode||t&&t.body&&200;a("received response: statusCode: %s, computed statusCode: %d, headers: %j",t.statusCode,n,t.headers);var i=2===Math.floor(n/100),u=new Date;if(g.push({currentHost:_,headers:h(s),content:e||null,contentLength:void 0!==e?e.length:null,method:v.method,timeouts:v.timeouts,url:v.url,startTime:b,endTime:u,duration:u-b,statusCode:n}),i)return p._useCache&&!p._useRequestCache&&c&&(c[o]=t.responseText),{responseText:t.responseText,body:t.body};if(4!==Math.floor(n/100))return f+=1,C();a("unrecoverable error");var l=new r.AlgoliaSearchError(t.body&&t.body.message,{debugData:g,statusCode:n});return p._promise.reject(l)}),(function(o){a("error: %s, stack: %s",o.message,o.stack);var u=new Date;g.push({currentHost:_,headers:h(s),content:e||null,contentLength:void 0!==e?e.length:null,method:v.method,timeouts:v.timeouts,url:v.url,startTime:b,endTime:u,duration:u-b}),o instanceof r.AlgoliaSearchError||(o=new r.Unknown(o&&o.message,o));if(f+=1,o instanceof r.Unknown||o instanceof r.UnparsableJSON||f>=p.hosts[t.hostType].length&&(d||!m))return o.debugData=g,p._promise.reject(o);if(o instanceof r.RequestTimeout)return a("retrying request with higher timeout"),p._incrementHostIndex(t.hostType),p._incrementTimeoutMultipler(),v.timeouts=p._getTimeoutsForRequest(t.hostType),n(i,v);return C()}));function C(){return a("retrying request"),p._incrementHostIndex(t.hostType),n(i,v)}}(p._request,{url:t.url,method:t.method,body:e,jsonBody:t.body,timeouts:p._getTimeoutsForRequest(t.hostType),forceAuthHeaders:t.forceAuthHeaders});return p._useCache&&p._useRequestCache&&c&&(c[o]=w),v(w,(function(t){return t.body}))},u.prototype._getSearchParams=function(t,e){if(null==t)return e;for(var n in t)null!==n&&void 0!==t[n]&&t.hasOwnProperty(n)&&(e+=""===e?"":"&",e+=n+"="+encodeURIComponent("[object Array]"===Object.prototype.toString.call(t[n])?l(t[n]):t[n]));return e},u.prototype._computeRequestHeaders=function(t){var e=n("v61W"),r={"x-algolia-agent":t.additionalUA?this._ua+"; "+t.additionalUA:this._ua,"x-algolia-application-id":this.applicationID};return!1!==t.withApiKey&&(r["x-algolia-api-key"]=this.apiKey),this.userToken&&(r["x-algolia-usertoken"]=this.userToken),this.securityTags&&(r["x-algolia-tagfilters"]=this.securityTags),e(this.extraHeaders,(function(t,e){r[e]=t})),t.headers&&e(t.headers,(function(t,e){r[e]=t})),r},u.prototype.search=function(t,e,r){var i=n("49sm"),o=n("7Ule");if(!i(t))throw new Error("Usage: client.search(arrayOfQueries[, callback])");"function"==typeof e?(r=e,e={}):void 0===e&&(e={});var s=this,a={requests:o(t,(function(t){var e="";return void 0!==t.query&&(e+="query="+encodeURIComponent(t.query)),{indexName:t.indexName,params:s._getSearchParams(t.params,e)}}))},u=o(a.requests,(function(t,e){return e+"="+encodeURIComponent("/1/indexes/"+encodeURIComponent(t.indexName)+"?"+t.params)})).join("&");return void 0!==e.strategy&&(a.strategy=e.strategy),this._jsonRequest({cache:this.cache,method:"POST",url:"/1/indexes/*/queries",body:a,hostType:"read",fallback:{method:"GET",url:"/1/indexes/*",body:{params:u}},callback:r})},u.prototype.searchForFacetValues=function(t){var e=n("49sm"),r=n("7Ule"),i="Usage: client.searchForFacetValues([{indexName, params: {facetName, facetQuery, ...params}}, ...queries])";if(!e(t))throw new Error(i);var o=this;return o._promise.all(r(t,(function(t){if(!t||void 0===t.indexName||void 0===t.params.facetName||void 0===t.params.facetQuery)throw new Error(i);var e=n("sLmk"),r=n("PGxr"),s=t.indexName,a=t.params,u=a.facetName,c=r(e(a),(function(t){return"facetName"===t})),l=o._getSearchParams(c,"");return o._jsonRequest({cache:o.cache,method:"POST",url:"/1/indexes/"+encodeURIComponent(s)+"/facets/"+encodeURIComponent(u)+"/query",hostType:"read",body:{params:l}})})))},u.prototype.setSecurityTags=function(t){if("[object Array]"===Object.prototype.toString.call(t)){for(var e=[],n=0;n<t.length;++n)if("[object Array]"===Object.prototype.toString.call(t[n])){for(var r=[],i=0;i<t[n].length;++i)r.push(t[n][i]);e.push("("+r.join(",")+")")}else e.push(t[n]);t=e.join(",")}this.securityTags=t},u.prototype.setUserToken=function(t){this.userToken=t},u.prototype.clearCache=function(){this.cache={}},u.prototype.setRequestTimeout=function(t){t&&(this._timeouts.connect=this._timeouts.read=this._timeouts.write=t)},u.prototype.setTimeouts=function(t){this._timeouts=t},u.prototype.getTimeouts=function(){return this._timeouts},u.prototype._getAppIdData=function(){var t=s.get(this.applicationID);return null!==t&&this._cacheAppIdData(t),t},u.prototype._setAppIdData=function(t){return t.lastChange=(new Date).getTime(),this._cacheAppIdData(t),s.set(this.applicationID,t)},u.prototype._checkAppIdData=function(){var t=this._getAppIdData(),e=(new Date).getTime();return null===t||e-t.lastChange>a?this._resetInitialAppIdData(t):t},u.prototype._resetInitialAppIdData=function(t){var e=t||{};return e.hostIndexes={read:0,write:0},e.timeoutMultiplier=1,e.shuffleResult=e.shuffleResult||function(t){var e,n,r=t.length;for(;0!==r;)n=Math.floor(Math.random()*r),e=t[r-=1],t[r]=t[n],t[n]=e;return t}([1,2,3]),this._setAppIdData(e)},u.prototype._cacheAppIdData=function(t){this._hostIndexes=t.hostIndexes,this._timeoutMultiplier=t.timeoutMultiplier,this._shuffleResult=t.shuffleResult},u.prototype._partialAppIdDataUpdate=function(t){var e=n("v61W"),r=this._getAppIdData();return e(t,(function(t,e){r[e]=t})),this._setAppIdData(r)},u.prototype._getHostByType=function(t){return this.hosts[t][this._getHostIndexByType(t)]},u.prototype._getTimeoutMultiplier=function(){return this._timeoutMultiplier},u.prototype._getHostIndexByType=function(t){return this._hostIndexes[t]},u.prototype._setHostIndexByType=function(t,e){var r=n("sLmk")(this._hostIndexes);return r[e]=t,this._partialAppIdDataUpdate({hostIndexes:r}),t},u.prototype._incrementHostIndex=function(t){return this._setHostIndexByType((this._getHostIndexByType(t)+1)%this.hosts[t].length,t)},u.prototype._incrementTimeoutMultipler=function(){var t=Math.max(this._timeoutMultiplier+1,4);return this._partialAppIdDataUpdate({timeoutMultiplier:t})},u.prototype._getTimeoutsForRequest=function(t){return{connect:this._timeouts.connect*this._timeoutMultiplier,complete:this._timeouts[t]*this._timeoutMultiplier}}}).call(this,n("8oxB"))},"1KsK":function(t,e,n){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var i=Object.prototype.toString;t.exports=function(t){var e=i.call(t),n="[object Arguments]"===e;return n||(n="[object Array]"!==e&&null!==t&&"object"===r(t)&&"number"==typeof t.length&&t.length>=0&&"[object Function]"===i.call(t.callee)),n}},"1seS":function(t,e,n){"use strict";var r=Array.prototype.slice,i=n("1KsK"),o=Object.keys,s=o?function(t){return o(t)}:n("sYn3"),a=Object.keys;s.shim=function(){Object.keys?function(){var t=Object.keys(arguments);return t&&t.length===arguments.length}(1,2)||(Object.keys=function(t){return i(t)?a(r.call(t)):a(t)}):Object.keys=s;return Object.keys||s},t.exports=s},"1wyU":function(t,e,n){"use strict";var r=n("cUo3"),i=/\s+/;function o(t,e,n,r){var o;if(!n)return this;for(e=e.split(i),n=r?function(t,e){return t.bind?t.bind(e):function(){t.apply(e,[].slice.call(arguments,0))}}(n,r):n,this._callbacks=this._callbacks||{};o=e.shift();)this._callbacks[o]=this._callbacks[o]||{sync:[],async:[]},this._callbacks[o][t].push(n);return this}function s(t,e,n){return function(){for(var r,i=0,o=t.length;!r&&i<o;i+=1)r=!1===t[i].apply(e,n);return!r}}t.exports={onSync:function(t,e,n){return o.call(this,"sync",t,e,n)},onAsync:function(t,e,n){return o.call(this,"async",t,e,n)},off:function(t){var e;if(!this._callbacks)return this;t=t.split(i);for(;e=t.shift();)delete this._callbacks[e];return this},trigger:function(t){var e,n,o,a,u;if(!this._callbacks)return this;t=t.split(i),o=[].slice.call(arguments,1);for(;(e=t.shift())&&(n=this._callbacks[e]);)a=s(n.sync,this,[e].concat(o)),u=s(n.async,this,[e].concat(o)),a()&&r(u);return this}}},"49sm":function(t,e){var n={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==n.call(t)}},"4JlD":function(t,e,n){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var i=function(t){switch(r(t)){case"string":return t;case"boolean":return t?"true":"false";case"number":return isFinite(t)?t:"";default:return""}};t.exports=function(t,e,n,u){return e=e||"&",n=n||"=",null===t&&(t=void 0),"object"===r(t)?s(a(t),(function(r){var a=encodeURIComponent(i(r))+n;return o(t[r])?s(t[r],(function(t){return a+encodeURIComponent(i(t))})).join(e):a+encodeURIComponent(i(t[r]))})).join(e):u?encodeURIComponent(i(u))+n+encodeURIComponent(i(t)):""};var o=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)};function s(t,e){if(t.map)return t.map(e);for(var n=[],r=0;r<t.length;r++)n.push(e(t[r],r));return n}var a=Object.keys||function(t){var e=[];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.push(n);return e}},"4qm/":function(t,e,n){"use strict";e.test=function(){return!0},e.install=function(t){return function(){setTimeout(t,0)}}},"5b/b":function(t,e,n){function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}t.exports=function(t){return function(e,s,a){var u=n("sLmk");(a=a&&u(a)||{}).hosts=a.hosts||["places-dsn.algolia.net","places-1.algolianet.com","places-2.algolianet.com","places-3.algolianet.com"],0!==arguments.length&&"object"!==r(e)&&void 0!==e||(e="",s="",a._allowEmptyCredentials=!0);var c=t(e,s,a),l=c.initIndex("places");return l.search=o("query","/1/places/query"),l.reverse=function(t,e){var n=i.encode(t);return this.as._jsonRequest({method:"GET",url:"/1/places/reverse?"+n,hostType:"read",callback:e})},l.getObject=function(t,e){return this.as._jsonRequest({method:"GET",url:"/1/places/"+encodeURIComponent(t),hostType:"read",callback:e})},l}};var i=n("s4NR"),o=n("9SYa")},"7Ule":function(t,e,n){var r=n("v61W");t.exports=function(t,e){var n=[];return r(t,(function(r,i){n.push(e(r,i,t))})),n}},"7kQj":function(t,e,n){"use strict";var r=n("jgMb"),i=n("x0Qz"),o=n("X9Cu");t.exports=function(t,e){var n=o(t.as._ua);return n&&n[0]>=3&&n[1]>20&&((e=e||{}).additionalUA="autocomplete.js "+i),function(n,i){t.search(n,e,(function(t,e){t?r.error(t.message):i(e.hits,e)}))}}},"7kYT":function(t,e,n){"use strict";var r=Function.prototype.bind;t.exports=function(t){var e=function(){for(var e=arguments.length,n=Array(e),i=0;i<e;i++)n[i]=arguments[i];return new(r.apply(t,[null].concat(n)))};return e.__proto__=t,e.prototype=t.prototype,e}},"8oxB":function(t,e){var n,r,i=t.exports={};function o(){throw new Error("setTimeout has not been defined")}function s(){throw new Error("clearTimeout has not been defined")}function a(t){if(n===setTimeout)return setTimeout(t,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:o}catch(t){n=o}try{r="function"==typeof clearTimeout?clearTimeout:s}catch(t){r=s}}();var u,c=[],l=!1,h=-1;function p(){l&&u&&(l=!1,u.length?c=u.concat(c):h=-1,c.length&&f())}function f(){if(!l){var t=a(p);l=!0;for(var e=c.length;e;){for(u=c,c=[];++h<e;)u&&u[h].run();h=-1,e=c.length}u=null,l=!1,function(t){if(r===clearTimeout)return clearTimeout(t);if((r===s||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(t);try{r(t)}catch(e){try{return r.call(null,t)}catch(e){return r.call(this,t)}}}(t)}}function d(t,e){this.fun=t,this.array=e}function m(){}i.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];c.push(new d(t,e)),1!==c.length||l||a(f)},d.prototype.run=function(){this.fun.apply(null,this.array)},i.title="browser",i.browser=!0,i.env={},i.argv=[],i.version="",i.versions={},i.on=m,i.addListener=m,i.once=m,i.off=m,i.removeListener=m,i.removeAllListeners=m,i.emit=m,i.prependListener=m,i.prependOnceListener=m,i.listeners=function(t){return[]},i.binding=function(t){throw new Error("process.binding is not supported")},i.cwd=function(){return"/"},i.chdir=function(t){throw new Error("process.chdir is not supported")},i.umask=function(){return 0}},"8ujV":function(t,e,n){"use strict";var r=n("jgMb"),i=n("BoXp");function o(t){t&&t.el||r.error("EventBus initialized without el"),this.$el=i.element(t.el)}r.mixin(o.prototype,{trigger:function(t,e,n,i){var o=r.Event("autocomplete:"+t);return this.$el.trigger(o,[e,n,i]),o}}),t.exports=o},"9SYa":function(t,e,n){function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}t.exports=function(t,e){return function(n,o,s){if("function"==typeof n&&"object"===r(o)||"object"===r(s))throw new i.AlgoliaSearchError("index.search usage is index.search(query, params, cb)");0===arguments.length||"function"==typeof n?(s=n,n=""):1!==arguments.length&&"function"!=typeof o||(s=o,o=void 0),"object"===r(n)&&null!==n?(o=n,n=void 0):null==n&&(n="");var a,u="";return void 0!==n&&(u+=t+"="+encodeURIComponent(n)),void 0!==o&&(o.additionalUA&&(a=o.additionalUA,delete o.additionalUA),u=this.as._getSearchParams(o,u)),this._search(u,e,s,a)}};var i=n("Z4lL")},ATuh:function(t,e,n){"use strict";var r=n("jgMb"),i=n("BoXp"),o=n("1wyU"),s=n("l1Z7"),a=n("kppr");function u(t){var e,n,o,s=this;(t=t||{}).menu||r.error("menu is required"),r.isArray(t.datasets)||r.isObject(t.datasets)||r.error("1 or more datasets required"),t.datasets||r.error("datasets is required"),this.isOpen=!1,this.isEmpty=!0,this.minLength=t.minLength||0,this.templates={},this.appendTo=t.appendTo||!1,this.css=r.mixin({},a,t.appendTo?a.appendTo:{}),this.cssClasses=t.cssClasses=r.mixin({},a.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix||r.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),e=r.bind(this._onSuggestionClick,this),n=r.bind(this._onSuggestionMouseEnter,this),o=r.bind(this._onSuggestionMouseLeave,this);var c=r.className(this.cssClasses.prefix,this.cssClasses.suggestion);this.$menu=i.element(t.menu).on("mouseenter.aa",c,n).on("mouseleave.aa",c,o).on("click.aa",c,e),this.$container=t.appendTo?t.wrapper:this.$menu,t.templates&&t.templates.header&&(this.templates.header=r.templatify(t.templates.header),this.$menu.prepend(this.templates.header())),t.templates&&t.templates.empty&&(this.templates.empty=r.templatify(t.templates.empty),this.$empty=i.element('<div class="'+r.className(this.cssClasses.prefix,this.cssClasses.empty,!0)+'"></div>'),this.$menu.append(this.$empty),this.$empty.hide()),this.datasets=r.map(t.datasets,(function(e){return function(t,e,n){return new u.Dataset(r.mixin({$menu:t,cssClasses:n},e))}(s.$menu,e,t.cssClasses)})),r.each(this.datasets,(function(t){var e=t.getRoot();e&&0===e.parent().length&&s.$menu.append(e),t.onSync("rendered",s._onRendered,s)})),t.templates&&t.templates.footer&&(this.templates.footer=r.templatify(t.templates.footer),this.$menu.append(this.templates.footer()));var l=this;i.element(window).resize((function(){l._redraw()}))}r.mixin(u.prototype,o,{_onSuggestionClick:function(t){this.trigger("suggestionClicked",i.element(t.currentTarget))},_onSuggestionMouseEnter:function(t){var e=i.element(t.currentTarget);if(!e.hasClass(r.className(this.cssClasses.prefix,this.cssClasses.cursor,!0))){this._removeCursor();var n=this;setTimeout((function(){n._setCursor(e,!1)}),0)}},_onSuggestionMouseLeave:function(t){if(t.relatedTarget&&i.element(t.relatedTarget).closest("."+r.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).length>0)return;this._removeCursor(),this.trigger("cursorRemoved")},_onRendered:function(t,e){if(this.isEmpty=r.every(this.datasets,(function(t){return t.isEmpty()})),this.isEmpty)if(e.length>=this.minLength&&this.trigger("empty"),this.$empty)if(e.length<this.minLength)this._hide();else{var n=this.templates.empty({query:this.datasets[0]&&this.datasets[0].query});this.$empty.html(n),this.$empty.show(),this._show()}else r.any(this.datasets,(function(t){return t.templates&&t.templates.empty}))?e.length<this.minLength?this._hide():this._show():this._hide();else this.isOpen&&(this.$empty&&(this.$empty.empty(),this.$empty.hide()),e.length>=this.minLength?this._show():this._hide());this.trigger("datasetRendered")},_hide:function(){this.$container.hide()},_show:function(){this.$container.css("display","block"),this._redraw(),this.trigger("shown")},_redraw:function(){this.isOpen&&this.appendTo&&this.trigger("redrawn")},_getSuggestions:function(){return this.$menu.find(r.className(this.cssClasses.prefix,this.cssClasses.suggestion))},_getCursor:function(){return this.$menu.find(r.className(this.cssClasses.prefix,this.cssClasses.cursor)).first()},_setCursor:function(t,e){t.first().addClass(r.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).attr("aria-selected","true"),this.trigger("cursorMoved",e)},_removeCursor:function(){this._getCursor().removeClass(r.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).removeAttr("aria-selected")},_moveCursor:function(t){var e,n,r,i;this.isOpen&&(n=this._getCursor(),e=this._getSuggestions(),this._removeCursor(),-1!==(r=((r=e.index(n)+t)+1)%(e.length+1)-1)?(r<-1&&(r=e.length-1),this._setCursor(i=e.eq(r),!0),this._ensureVisible(i)):this.trigger("cursorRemoved"))},_ensureVisible:function(t){var e,n,r,i;n=(e=t.position().top)+t.height()+parseInt(t.css("margin-top"),10)+parseInt(t.css("margin-bottom"),10),r=this.$menu.scrollTop(),i=this.$menu.height()+parseInt(this.$menu.css("padding-top"),10)+parseInt(this.$menu.css("padding-bottom"),10),e<0?this.$menu.scrollTop(r+e):i<n&&this.$menu.scrollTop(r+(n-i))},close:function(){this.isOpen&&(this.isOpen=!1,this._removeCursor(),this._hide(),this.trigger("closed"))},open:function(){this.isOpen||(this.isOpen=!0,this.isEmpty||this._show(),this.trigger("opened"))},setLanguageDirection:function(t){this.$menu.css("ltr"===t?this.css.ltr:this.css.rtl)},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getDatumForSuggestion:function(t){var e=null;return t.length&&(e={raw:s.extractDatum(t),value:s.extractValue(t),datasetName:s.extractDatasetName(t)}),e},getCurrentCursor:function(){return this._getCursor().first()},getDatumForCursor:function(){return this.getDatumForSuggestion(this._getCursor().first())},getDatumForTopSuggestion:function(){return this.getDatumForSuggestion(this._getSuggestions().first())},cursorTopSuggestion:function(){this._setCursor(this._getSuggestions().first(),!1)},update:function(t){r.each(this.datasets,(function(e){e.update(t)}))},empty:function(){r.each(this.datasets,(function(t){t.clear()})),this.isEmpty=!0},isVisible:function(){return this.isOpen&&!this.isEmpty},destroy:function(){this.$menu.off(".aa"),this.$menu=null,r.each(this.datasets,(function(t){t.destroy()}))}}),u.Dataset=s,t.exports=u},BWnO:function(t,e,n){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}Object.defineProperty(e,"__esModule",{value:!0});var i,o="function"==typeof Symbol&&"symbol"===r(Symbol.iterator)?function(t){return r(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":r(t)},s=n("imfo"),a=(i=s)&&i.__esModule?i:{default:i};var u={mergeKeyWithParent:function(t,e){if(void 0===t[e])return t;if("object"!==o(t[e]))return t;var n=a.default.extend({},t,t[e]);return delete n[e],n},groupBy:function(t,e){var n={};return a.default.each(t,(function(t,r){if(void 0===r[e])throw new Error("[groupBy]: Object has no key "+e);var i=r[e];"string"==typeof i&&(i=i.toLowerCase()),Object.prototype.hasOwnProperty.call(n,i)||(n[i]=[]),n[i].push(r)})),n},values:function(t){return Object.keys(t).map((function(e){return t[e]}))},flatten:function(t){var e=[];return t.forEach((function(t){Array.isArray(t)?t.forEach((function(t){e.push(t)})):e.push(t)})),e},flattenAndFlagFirst:function(t,e){var n=this.values(t).map((function(t){return t.map((function(t,n){return t[e]=0===n,t}))}));return this.flatten(n)},compact:function(t){var e=[];return t.forEach((function(t){t&&e.push(t)})),e},getHighlightedValue:function(t,e){return t._highlightResult&&t._highlightResult.hierarchy_camel&&t._highlightResult.hierarchy_camel[e]&&t._highlightResult.hierarchy_camel[e].matchLevel&&"none"!==t._highlightResult.hierarchy_camel[e].matchLevel&&t._highlightResult.hierarchy_camel[e].value?t._highlightResult.hierarchy_camel[e].value:t._highlightResult&&t._highlightResult&&t._highlightResult[e]&&t._highlightResult[e].value?t._highlightResult[e].value:t[e]},getSnippetedValue:function(t,e){if(!t._snippetResult||!t._snippetResult[e]||!t._snippetResult[e].value)return t[e];var n=t._snippetResult[e].value;return n[0]!==n[0].toUpperCase()&&(n="…"+n),-1===[".","!","?"].indexOf(n[n.length-1])&&(n+="…"),n},deepClone:function(t){return JSON.parse(JSON.stringify(t))}};e.default=u},BoXp:function(t,e,n){"use strict";t.exports={element:null}},BqH8:function(t,e,n){"use strict";(function(t){var n=t.MutationObserver||t.WebKitMutationObserver;e.test=function(){return n},e.install=function(e){var r=0,i=new n(e),o=t.document.createTextNode("");return i.observe(o,{characterData:!0}),function(){o.data=r=++r%2}}}).call(this,n("yLpj"))},DiRl:function(t,e,n){"use strict";t.exports="3.35.1"},E2g8:function(t,e,n){(function(r,i){var o,s,a;function u(t){return(u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}
+/*!
+ * @overview es6-promise - a tiny implementation of Promises/A+.
+ * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)
+ * @license   Licensed under MIT license
+ *            See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE
+ * @version   v4.2.8+1e68dce6
+ */a=function(){"use strict";function t(t){return"function"==typeof t}var e=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},n=0,o=void 0,s=void 0,a=function(t,e){m[n]=t,m[n+1]=e,2===(n+=2)&&(s?s(g):_())},c="undefined"!=typeof window?window:void 0,l=c||{},h=l.MutationObserver||l.WebKitMutationObserver,p="undefined"==typeof self&&void 0!==r&&"[object process]"==={}.toString.call(r),f="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel;function d(){var t=setTimeout;return function(){return t(g,1)}}var m=new Array(1e3);function g(){for(var t=0;t<n;t+=2)(0,m[t])(m[t+1]),m[t]=void 0,m[t+1]=void 0;n=0}var y,v,b,w,_=void 0;function x(t,e){var n=this,r=new this.constructor(A);void 0===r[C]&&L(r);var i=n._state;if(i){var o=arguments[i-1];a((function(){return $(i,r,o,n._result)}))}else P(n,r,t,e);return r}function S(t){if(t&&"object"===u(t)&&t.constructor===this)return t;var e=new this(A);return N(e,t),e}p?_=function(){return r.nextTick(g)}:h?(v=0,b=new h(g),w=document.createTextNode(""),b.observe(w,{characterData:!0}),_=function(){w.data=v=++v%2}):f?((y=new MessageChannel).port1.onmessage=g,_=function(){return y.port2.postMessage(0)}):_=void 0===c?function(){try{var t=Function("return this")().require("vertx");return void 0!==(o=t.runOnLoop||t.runOnContext)?function(){o(g)}:d()}catch(t){return d()}}():d();var C=Math.random().toString(36).substring(2);function A(){}var T=void 0,k=1,O=2;function E(e,n,r){n.constructor===e.constructor&&r===x&&n.constructor.resolve===S?function(t,e){e._state===k?R(t,e._result):e._state===O?I(t,e._result):P(e,void 0,(function(e){return N(t,e)}),(function(e){return I(t,e)}))}(e,n):void 0===r?R(e,n):t(r)?function(t,e,n){a((function(t){var r=!1,i=function(t,e,n,r){try{t.call(e,n,r)}catch(t){return t}}(n,e,(function(n){r||(r=!0,e!==n?N(t,n):R(t,n))}),(function(e){r||(r=!0,I(t,e))}),t._label);!r&&i&&(r=!0,I(t,i))}),t)}(e,n,r):R(e,n)}function N(t,e){if(t===e)I(t,new TypeError("You cannot resolve a promise with itself"));else if(i=u(r=e),null===r||"object"!==i&&"function"!==i)R(t,e);else{var n=void 0;try{n=e.then}catch(e){return void I(t,e)}E(t,e,n)}var r,i}function j(t){t._onerror&&t._onerror(t._result),D(t)}function R(t,e){t._state===T&&(t._result=e,t._state=k,0!==t._subscribers.length&&a(D,t))}function I(t,e){t._state===T&&(t._state=O,t._result=e,a(j,t))}function P(t,e,n,r){var i=t._subscribers,o=i.length;t._onerror=null,i[o]=e,i[o+k]=n,i[o+O]=r,0===o&&t._state&&a(D,t)}function D(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r=void 0,i=void 0,o=t._result,s=0;s<e.length;s+=3)r=e[s],i=e[s+n],r?$(n,r,i,o):i(o);t._subscribers.length=0}}function $(e,n,r,i){var o=t(r),s=void 0,a=void 0,u=!0;if(o){try{s=r(i)}catch(t){u=!1,a=t}if(n===s)return void I(n,new TypeError("A promises callback cannot return that same promise."))}else s=i;n._state!==T||(o&&u?N(n,s):!1===u?I(n,a):e===k?R(n,s):e===O&&I(n,s))}var q=0;function L(t){t[C]=q++,t._state=void 0,t._result=void 0,t._subscribers=[]}var M=function(){function t(t,n){this._instanceConstructor=t,this.promise=new t(A),this.promise[C]||L(this.promise),e(n)?(this.length=n.length,this._remaining=n.length,this._result=new Array(this.length),0===this.length?R(this.promise,this._result):(this.length=this.length||0,this._enumerate(n),0===this._remaining&&R(this.promise,this._result))):I(this.promise,new Error("Array Methods must be provided an Array"))}return t.prototype._enumerate=function(t){for(var e=0;this._state===T&&e<t.length;e++)this._eachEntry(t[e],e)},t.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===S){var i=void 0,o=void 0,s=!1;try{i=t.then}catch(t){s=!0,o=t}if(i===x&&t._state!==T)this._settledAt(t._state,e,t._result);else if("function"!=typeof i)this._remaining--,this._result[e]=t;else if(n===H){var a=new n(A);s?I(a,o):E(a,t,i),this._willSettleAt(a,e)}else this._willSettleAt(new n((function(e){return e(t)})),e)}else this._willSettleAt(r(t),e)},t.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===T&&(this._remaining--,t===O?I(r,n):this._result[e]=n),0===this._remaining&&R(r,this._result)},t.prototype._willSettleAt=function(t,e){var n=this;P(t,void 0,(function(t){return n._settledAt(k,e,t)}),(function(t){return n._settledAt(O,e,t)}))},t}(),H=function(){function e(t){this[C]=q++,this._result=this._state=void 0,this._subscribers=[],A!==t&&("function"!=typeof t&&function(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}(),this instanceof e?function(t,e){try{e((function(e){N(t,e)}),(function(e){I(t,e)}))}catch(e){I(t,e)}}(this,t):function(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}())}return e.prototype.catch=function(t){return this.then(null,t)},e.prototype.finally=function(e){var n=this.constructor;return t(e)?this.then((function(t){return n.resolve(e()).then((function(){return t}))}),(function(t){return n.resolve(e()).then((function(){throw t}))})):this.then(e,e)},e}();return H.prototype.then=x,H.all=function(t){return new M(this,t).promise},H.race=function(t){var n=this;return e(t)?new n((function(e,r){for(var i=t.length,o=0;o<i;o++)n.resolve(t[o]).then(e,r)})):new n((function(t,e){return e(new TypeError("You must pass an array to race."))}))},H.resolve=S,H.reject=function(t){var e=new this(A);return I(e,t),e},H._setScheduler=function(t){s=t},H._setAsap=function(t){a=t},H._asap=a,H.polyfill=function(){var t=void 0;if(void 0!==i)t=i;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var e=t.Promise;if(e){var n=null;try{n=Object.prototype.toString.call(e.resolve())}catch(t){}if("[object Promise]"===n&&!e.cast)return}t.Promise=H},H.Promise=H,H},"object"===u(e)&&void 0!==t?t.exports=a():void 0===(s="function"==typeof(o=a)?o.call(e,n,e,t):o)||(t.exports=s)}).call(this,n("8oxB"),n("yLpj"))},FGiv:function(t,e){function n(t){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var r=1e3,i=60*r,o=60*i,s=24*o,a=365.25*s;function u(t,e,n){if(!(t<e))return t<1.5*e?Math.floor(t/e)+" "+n:Math.ceil(t/e)+" "+n+"s"}t.exports=function(t,e){e=e||{};var c,l=n(t);if("string"===l&&t.length>0)return function(t){if((t=String(t)).length>100)return;var e=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(t);if(!e)return;var n=parseFloat(e[1]);switch((e[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return n*a;case"days":case"day":case"d":return n*s;case"hours":case"hour":case"hrs":case"hr":case"h":return n*o;case"minutes":case"minute":case"mins":case"min":case"m":return n*i;case"seconds":case"second":case"secs":case"sec":case"s":return n*r;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return n;default:return}}(t);if("number"===l&&!1===isNaN(t))return e.long?u(c=t,s,"day")||u(c,o,"hour")||u(c,i,"minute")||u(c,r,"second")||c+" ms":function(t){if(t>=s)return Math.round(t/s)+"d";if(t>=o)return Math.round(t/o)+"h";if(t>=i)return Math.round(t/i)+"m";if(t>=r)return Math.round(t/r)+"s";return t+"ms"}(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))}},GlCl:function(t,e,n){"use strict";var r;r={9:"tab",27:"esc",37:"left",39:"right",13:"enter",38:"up",40:"down"};var i=n("jgMb"),o=n("BoXp"),s=n("1wyU");function a(t){var e,n,s,a,u,c=this;(t=t||{}).input||i.error("input is missing"),e=i.bind(this._onBlur,this),n=i.bind(this._onFocus,this),s=i.bind(this._onKeydown,this),a=i.bind(this._onInput,this),this.$hint=o.element(t.hint),this.$input=o.element(t.input).on("blur.aa",e).on("focus.aa",n).on("keydown.aa",s),0===this.$hint.length&&(this.setHint=this.getHint=this.clearHint=this.clearHintIfInvalid=i.noop),i.isMsie()?this.$input.on("keydown.aa keypress.aa cut.aa paste.aa",(function(t){r[t.which||t.keyCode]||i.defer(i.bind(c._onInput,c,t))})):this.$input.on("input.aa",a),this.query=this.$input.val(),this.$overflowHelper=(u=this.$input,o.element('<pre aria-hidden="true"></pre>').css({position:"absolute",visibility:"hidden",whiteSpace:"pre",fontFamily:u.css("font-family"),fontSize:u.css("font-size"),fontStyle:u.css("font-style"),fontVariant:u.css("font-variant"),fontWeight:u.css("font-weight"),wordSpacing:u.css("word-spacing"),letterSpacing:u.css("letter-spacing"),textIndent:u.css("text-indent"),textRendering:u.css("text-rendering"),textTransform:u.css("text-transform")}).insertAfter(u))}function u(t){return t.altKey||t.ctrlKey||t.metaKey||t.shiftKey}a.normalizeQuery=function(t){return(t||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ")},i.mixin(a.prototype,s,{_onBlur:function(){this.resetInputValue(),this.$input.removeAttr("aria-activedescendant"),this.trigger("blurred")},_onFocus:function(){this.trigger("focused")},_onKeydown:function(t){var e=r[t.which||t.keyCode];this._managePreventDefault(e,t),e&&this._shouldTrigger(e,t)&&this.trigger(e+"Keyed",t)},_onInput:function(){this._checkInputValue()},_managePreventDefault:function(t,e){var n,r,i;switch(t){case"tab":r=this.getHint(),i=this.getInputValue(),n=r&&r!==i&&!u(e);break;case"up":case"down":n=!u(e);break;default:n=!1}n&&e.preventDefault()},_shouldTrigger:function(t,e){var n;switch(t){case"tab":n=!u(e);break;default:n=!0}return n},_checkInputValue:function(){var t,e,n,r,i;t=this.getInputValue(),r=t,i=this.query,n=!(!(e=a.normalizeQuery(r)===a.normalizeQuery(i))||!this.query)&&this.query.length!==t.length,this.query=t,e?n&&this.trigger("whitespaceChanged",this.query):this.trigger("queryChanged",this.query)},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(t){this.query=t},getInputValue:function(){return this.$input.val()},setInputValue:function(t,e){void 0===t&&(t=this.query),this.$input.val(t),e?this.clearHint():this._checkInputValue()},expand:function(){this.$input.attr("aria-expanded","true")},collapse:function(){this.$input.attr("aria-expanded","false")},setActiveDescendant:function(t){this.$input.attr("aria-activedescendant",t)},removeActiveDescendant:function(){this.$input.removeAttr("aria-activedescendant")},resetInputValue:function(){this.setInputValue(this.query,!0)},getHint:function(){return this.$hint.val()},setHint:function(t){this.$hint.val(t)},clearHint:function(){this.setHint("")},clearHintIfInvalid:function(){var t,e,n;n=(t=this.getInputValue())!==(e=this.getHint())&&0===e.indexOf(t),""!==t&&n&&!this.hasOverflow()||this.clearHint()},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},hasOverflow:function(){var t=this.$input.width()-2;return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>=t},isCursorAtEnd:function(){var t,e,n;return t=this.$input.val().length,e=this.$input[0].selectionStart,i.isNumber(e)?e===t:!document.selection||((n=document.selection.createRange()).moveStart("character",-t),t===n.text.length)},destroy:function(){this.$hint.off(".aa"),this.$input.off(".aa"),this.$hint=this.$input=this.$overflowHelper=null}}),t.exports=a},JRE2:function(t,e){t.exports=function(t,e){var n=t.toLowerCase().replace(/[\.\(\)]/g,"");return"algoliasearch: `"+t+"` was replaced by `"+e+"`. Please see https://github.com/algolia/algoliasearch-client-javascript/wiki/Deprecated#"+n}},MYMM:function(t,e,n){function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var i=n("v61W");t.exports=function t(e){var n=Array.prototype.slice.call(arguments);return i(n,(function(n){for(var i in n)n.hasOwnProperty(i)&&("object"===r(e[i])&&"object"===r(n[i])?e[i]=t({},e[i],n[i]):void 0!==n[i]&&(e[i]=n[i]))})),e}},NOtv:function(t,e,n){(function(r){function i(t){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function o(){var t;try{t=e.storage.debug}catch(t){}return!t&&void 0!==r&&"env"in r&&(t=r.env.DEBUG),t}(e=t.exports=n("lv48")).log=function(){return"object"===("undefined"==typeof console?"undefined":i(console))&&console.log&&Function.prototype.apply.call(console.log,console,arguments)},e.formatArgs=function(t){var n=this.useColors;if(t[0]=(n?"%c":"")+this.namespace+(n?" %c":" ")+t[0]+(n?"%c ":" ")+"+"+e.humanize(this.diff),!n)return;var r="color: "+this.color;t.splice(1,0,r,"color: inherit");var i=0,o=0;t[0].replace(/%[a-zA-Z%]/g,(function(t){"%%"!==t&&(i++,"%c"===t&&(o=i))})),t.splice(o,0,r)},e.save=function(t){try{null==t?e.storage.removeItem("debug"):e.storage.debug=t}catch(t){}},e.load=o,e.useColors=function(){if("undefined"!=typeof window&&window.process&&"renderer"===window.process.type)return!0;return"undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},e.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(t){}}(),e.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],e.formatters.j=function(t){try{return JSON.stringify(t)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}},e.enable(o())}).call(this,n("8oxB"))},P5ON:function(t,e,n){"use strict";var r=n("vgmO"),i=r.Promise||n("E2g8").Promise;t.exports=function(t,e){var o=n("P7XM"),s=n("Z4lL"),a=n("bQm7"),u=n("+RWU"),c=n("5b/b");function l(t,e,r){return(r=n("sLmk")(r||{}))._ua=r._ua||l.ua,new p(t,e,r)}e=e||"",l.version=n("DiRl"),l.ua="Algolia for JavaScript ("+l.version+"); "+e,l.initPlaces=c(l),r.__algolia={debug:n("NOtv"),algoliasearch:l};var h={hasXMLHttpRequest:"XMLHttpRequest"in r,hasXDomainRequest:"XDomainRequest"in r};function p(){t.apply(this,arguments)}return h.hasXMLHttpRequest&&(h.cors="withCredentials"in new XMLHttpRequest),o(p,t),p.prototype._request=function(t,e){return new i((function(n,r){if(h.cors||h.hasXDomainRequest){t=a(t,e.headers);var i,o,u=e.body,c=h.cors?new XMLHttpRequest:new XDomainRequest,l=!1;i=setTimeout(p,e.timeouts.connect),c.onprogress=function(){l||f()},"onreadystatechange"in c&&(c.onreadystatechange=function(){!l&&c.readyState>1&&f()}),c.onload=function(){if(o)return;var t;clearTimeout(i);try{t={body:JSON.parse(c.responseText),responseText:c.responseText,statusCode:c.status,headers:c.getAllResponseHeaders&&c.getAllResponseHeaders()||{}}}catch(e){t=new s.UnparsableJSON({more:c.responseText})}t instanceof s.UnparsableJSON?r(t):n(t)},c.onerror=function(t){if(o)return;clearTimeout(i),r(new s.Network({more:t}))},c instanceof XMLHttpRequest?(c.open(e.method,t,!0),e.forceAuthHeaders&&(c.setRequestHeader("x-algolia-application-id",e.headers["x-algolia-application-id"]),c.setRequestHeader("x-algolia-api-key",e.headers["x-algolia-api-key"]))):c.open(e.method,t),h.cors&&(u&&("POST"===e.method?c.setRequestHeader("content-type","application/x-www-form-urlencoded"):c.setRequestHeader("content-type","application/json")),c.setRequestHeader("accept","application/json")),u?c.send(u):c.send()}else r(new s.Network("CORS not supported"));function p(){o=!0,c.abort(),r(new s.RequestTimeout)}function f(){l=!0,clearTimeout(i),i=setTimeout(p,e.timeouts.complete)}}))},p.prototype._request.fallback=function(t,e){return t=a(t,e.headers),new i((function(n,r){u(t,e,(function(t,e){t?r(t):n(e)}))}))},p.prototype._promise={reject:function(t){return i.reject(t)},resolve:function(t){return i.resolve(t)},delay:function(t){return new i((function(e){setTimeout(e,t)}))},all:function(t){return i.all(t)}},l}},P7XM:function(t,e){"function"==typeof Object.create?t.exports=function(t,e){e&&(t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}))}:t.exports=function(t,e){if(e){t.super_=e;var n=function(){};n.prototype=e.prototype,t.prototype=new n,t.prototype.constructor=t}}},PGxr:function(t,e,n){t.exports=function(t,e){var r=n("1seS"),i=n("v61W"),o={};return i(r(t),(function(n){!0!==e(n)&&(o[n]=t[n])})),o}},PKsF:function(t,e,n){!function(t){var e=/\S/,n=/\"/g,r=/\n/g,i=/\r/g,o=/\\/g,s=/\u2028/,a=/\u2029/;function u(t){"}"===t.n.substr(t.n.length-1)&&(t.n=t.n.substring(0,t.n.length-1))}function c(t){return t.trim?t.trim():t.replace(/^\s*|\s*$/g,"")}function l(t,e,n){if(e.charAt(n)!=t.charAt(0))return!1;for(var r=1,i=t.length;r<i;r++)if(e.charAt(n+r)!=t.charAt(r))return!1;return!0}t.tags={"#":1,"^":2,"<":3,$:4,"/":5,"!":6,">":7,"=":8,_v:9,"{":10,"&":11,_t:12},t.scan=function(n,r){var i=n.length,o=0,s=null,a=null,h="",p=[],f=!1,d=0,m=0,g="{{",y="}}";function v(){h.length>0&&(p.push({tag:"_t",text:new String(h)}),h="")}function b(n,r){if(v(),n&&function(){for(var n=!0,r=m;r<p.length;r++)if(!(n=t.tags[p[r].tag]<t.tags._v||"_t"==p[r].tag&&null===p[r].text.match(e)))return!1;return n}())for(var i,o=m;o<p.length;o++)p[o].text&&((i=p[o+1])&&">"==i.tag&&(i.indent=p[o].text.toString()),p.splice(o,1));else r||p.push({tag:"\n"});f=!1,m=p.length}function w(t,e){var n="="+y,r=t.indexOf(n,e),i=c(t.substring(t.indexOf("=",e)+1,r)).split(" ");return g=i[0],y=i[i.length-1],r+n.length-1}for(r&&(r=r.split(" "),g=r[0],y=r[1]),d=0;d<i;d++)0==o?l(g,n,d)?(--d,v(),o=1):"\n"==n.charAt(d)?b(f):h+=n.charAt(d):1==o?(d+=g.length-1,"="==(s=(a=t.tags[n.charAt(d+1)])?n.charAt(d+1):"_v")?(d=w(n,d),o=0):(a&&d++,o=2),f=d):l(y,n,d)?(p.push({tag:s,n:c(h),otag:g,ctag:y,i:"/"==s?f-g.length:d+y.length}),h="",d+=y.length-1,o=0,"{"==s&&("}}"==y?d++:u(p[p.length-1]))):h+=n.charAt(d);return b(f,!0),p};var h={_t:!0,"\n":!0,$:!0,"/":!0};function p(t,e){for(var n=0,r=e.length;n<r;n++)if(e[n].o==t.n)return t.tag="#",!0}function f(t,e,n){for(var r=0,i=n.length;r<i;r++)if(n[r].c==t&&n[r].o==e)return!0}function d(t){var e=[];for(var n in t.partials)e.push('"'+g(n)+'":{name:"'+g(t.partials[n].name)+'", '+d(t.partials[n])+"}");return"partials: {"+e.join(",")+"}, subs: "+function(t){var e=[];for(var n in t)e.push('"'+g(n)+'": function(c,p,t,i) {'+t[n]+"}");return"{ "+e.join(",")+" }"}(t.subs)}t.stringify=function(e,n,r){return"{code: function (c,p,i) { "+t.wrapMain(e.code)+" },"+d(e)+"}"};var m=0;function g(t){return t.replace(o,"\\\\").replace(n,'\\"').replace(r,"\\n").replace(i,"\\r").replace(s,"\\u2028").replace(a,"\\u2029")}function y(t){return~t.indexOf(".")?"d":"f"}function v(t,e){var n="<"+(e.prefix||"")+t.n+m++;return e.partials[n]={name:t.n,partials:{}},e.code+='t.b(t.rp("'+g(n)+'",c,p,"'+(t.indent||"")+'"));',n}function b(t,e){e.code+="t.b(t.t(t."+y(t.n)+'("'+g(t.n)+'",c,p,0)));'}function w(t){return"t.b("+t+");"}t.generate=function(e,n,r){m=0;var i={code:"",subs:{},partials:{}};return t.walk(e,i),r.asString?this.stringify(i,n,r):this.makeTemplate(i,n,r)},t.wrapMain=function(t){return'var t=this;t.b(i=i||"");'+t+"return t.fl();"},t.template=t.Template,t.makeTemplate=function(t,e,n){var r=this.makePartials(t);return r.code=new Function("c","p","i",this.wrapMain(t.code)),new this.template(r,e,this,n)},t.makePartials=function(t){var e,n={subs:{},partials:t.partials,name:t.name};for(e in n.partials)n.partials[e]=this.makePartials(n.partials[e]);for(e in t.subs)n.subs[e]=new Function("c","p","t","i",t.subs[e]);return n},t.codegen={"#":function(e,n){n.code+="if(t.s(t."+y(e.n)+'("'+g(e.n)+'",c,p,1),c,p,0,'+e.i+","+e.end+',"'+e.otag+" "+e.ctag+'")){t.rs(c,p,function(c,p,t){',t.walk(e.nodes,n),n.code+="});c.pop();}"},"^":function(e,n){n.code+="if(!t.s(t."+y(e.n)+'("'+g(e.n)+'",c,p,1),c,p,1,0,0,"")){',t.walk(e.nodes,n),n.code+="};"},">":v,"<":function(e,n){var r={partials:{},code:"",subs:{},inPartial:!0};t.walk(e.nodes,r);var i=n.partials[v(e,n)];i.subs=r.subs,i.partials=r.partials},$:function(e,n){var r={subs:{},code:"",partials:n.partials,prefix:e.n};t.walk(e.nodes,r),n.subs[e.n]=r.code,n.inPartial||(n.code+='t.sub("'+g(e.n)+'",c,p,i);')},"\n":function(t,e){e.code+=w('"\\n"'+(t.last?"":" + i"))},_v:function(t,e){e.code+="t.b(t.v(t."+y(t.n)+'("'+g(t.n)+'",c,p,0)));'},_t:function(t,e){e.code+=w('"'+g(t.text)+'"')},"{":b,"&":b},t.walk=function(e,n){for(var r,i=0,o=e.length;i<o;i++)(r=t.codegen[e[i].tag])&&r(e[i],n);return n},t.parse=function(e,n,r){return function e(n,r,i,o){var s,a=[],u=null,c=null;for(s=i[i.length-1];n.length>0;){if(c=n.shift(),s&&"<"==s.tag&&!(c.tag in h))throw new Error("Illegal content in < super tag.");if(t.tags[c.tag]<=t.tags.$||p(c,o))i.push(c),c.nodes=e(n,c.tag,i,o);else{if("/"==c.tag){if(0===i.length)throw new Error("Closing tag without opener: /"+c.n);if(u=i.pop(),c.n!=u.n&&!f(c.n,u.n,o))throw new Error("Nesting error: "+u.n+" vs. "+c.n);return u.end=c.i,a}"\n"==c.tag&&(c.last=0==n.length||"\n"==n[0].tag)}a.push(c)}if(i.length>0)throw new Error("missing closing tag: "+i.pop().n);return a}(e,0,[],(r=r||{}).sectionTags||[])},t.cache={},t.cacheKey=function(t,e){return[t,!!e.asString,!!e.disableLambda,e.delimiters,!!e.modelGet].join("||")},t.compile=function(e,n){n=n||{};var r=t.cacheKey(e,n),i=this.cache[r];if(i){var o=i.partials;for(var s in o)delete o[s].instance;return i}return i=this.generate(this.parse(this.scan(e,n.delimiters),e,n),e,n),this.cache[r]=i}}(e)},Ruv9:function(t,e,n){var r=n("PKsF");r.Template=n("cK6b").Template,r.template=r.Template,t.exports=r},"UjO/":function(t,e,n){"use strict";var r,i=n("YQXE"),o=(r=i)&&r.__esModule?r:{default:r};t.exports=o.default},X9Cu:function(t,e,n){"use strict";t.exports=function(t){var e=t.match(/Algolia for vanilla JavaScript (\d+\.)(\d+\.)(\d+)/);if(e)return[e[1],e[2],e[3]]}},YQXE:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=s(n("7kYT")),i=s(n("cq35")),o=s(n("+Ewk"));function s(t){return t&&t.__esModule?t:{default:t}}var a=(0,r.default)(i.default);a.version=o.default,e.default=a},Z4lL:function(t,e,n){"use strict";var r=n("P7XM");function i(t,e){var r=n("v61W"),i=this;"function"==typeof Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):i.stack=(new Error).stack||"Cannot get a stacktrace, browser is too old",this.name="AlgoliaSearchError",this.message=t||"Unknown error",e&&r(e,(function(t,e){i[e]=t}))}function o(t,e){function n(){var n=Array.prototype.slice.call(arguments,0);"string"!=typeof n[0]&&n.unshift(e),i.apply(this,n),this.name="AlgoliaSearch"+t+"Error"}return r(n,i),n}r(i,Error),t.exports={AlgoliaSearchError:i,UnparsableJSON:o("UnparsableJSON","Could not parse the incoming response as JSON, see err.more for details"),RequestTimeout:o("RequestTimeout","Request timed out before getting a response"),Network:o("Network","Network issue, see err.more for details"),JSONPScriptFail:o("JSONPScriptFail","<script> was loaded but did not call our provided callback"),ValidUntilNotFound:o("ValidUntilNotFound","The SecuredAPIKey does not have a validUntil parameter."),JSONPScriptError:o("JSONPScriptError","<script> unable to load due to an `error` event on it"),ObjectNotFound:o("ObjectNotFound","Object not found"),Unknown:o("Unknown","Unknown error occured")}},ZoZZ:function(t,e,n){"use strict";var r=n("/kzE");n("BoXp").element=r;var i=n("jgMb");i.isArray=r.isArray,i.isFunction=r.isFunction,i.isObject=r.isPlainObject,i.bind=r.proxy,i.each=function(t,e){r.each(t,(function(t,n){return e(n,t)}))},i.map=r.map,i.mixin=r.extend,i.Event=r.Event;var o="aaAutocomplete",s=n("govL"),a=n("8ujV");function u(t,e,n,u){n=i.isArray(n)?n:[].slice.call(arguments,2);var c=r(t).each((function(t,i){var c=r(i),l=new a({el:c}),h=u||new s({input:c,eventBus:l,dropdownMenuContainer:e.dropdownMenuContainer,hint:void 0===e.hint||!!e.hint,minLength:e.minLength,autoselect:e.autoselect,autoselectOnBlur:e.autoselectOnBlur,tabAutocomplete:e.tabAutocomplete,openOnFocus:e.openOnFocus,templates:e.templates,debug:e.debug,clearOnSelected:e.clearOnSelected,cssClasses:e.cssClasses,datasets:n,keyboardShortcuts:e.keyboardShortcuts,appendTo:e.appendTo,autoWidth:e.autoWidth,ariaLabel:e.ariaLabel||i.getAttribute("aria-label")});c.data(o,h)}));return c.autocomplete={},i.each(["open","close","getVal","setVal","destroy","getWrapper"],(function(t){c.autocomplete[t]=function(){var e,n=arguments;return c.each((function(i,s){var a=r(s).data(o);e=a[t].apply(a,n)})),e}})),c}u.sources=s.sources,u.escapeHighlightedString=i.escapeHighlightedString;var c="autocomplete"in window,l=window.autocomplete;u.noConflict=function(){return c?window.autocomplete=l:delete window.autocomplete,u},t.exports=u},bQm7:function(t,e,n){"use strict";t.exports=function(t,e){/\?/.test(t)?t+="&":t+="?";return t+r(e)};var r=n("4JlD")},"c+Bx":function(t,e){t.exports=function(t,e){e(t,0)}},cK6b:function(t,e,n){function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}!function(t){function e(t,e,n){var i;return e&&"object"==r(e)&&(void 0!==e[t]?i=e[t]:n&&e.get&&"function"==typeof e.get&&(i=e.get(t))),i}t.Template=function(t,e,n,r){t=t||{},this.r=t.code||this.r,this.c=n,this.options=r||{},this.text=e||"",this.partials=t.partials||{},this.subs=t.subs||{},this.buf=""},t.Template.prototype={r:function(t,e,n){return""},v:function(t){return t=c(t),u.test(t)?t.replace(n,"&amp;").replace(i,"&lt;").replace(o,"&gt;").replace(s,"&#39;").replace(a,"&quot;"):t},t:c,render:function(t,e,n){return this.ri([t],e||{},n)},ri:function(t,e,n){return this.r(t,e,n)},ep:function(t,e){var n=this.partials[t],r=e[n.name];if(n.instance&&n.base==r)return n.instance;if("string"==typeof r){if(!this.c)throw new Error("No compiler available.");r=this.c.compile(r,this.options)}if(!r)return null;if(this.partials[t].base=r,n.subs){for(key in e.stackText||(e.stackText={}),n.subs)e.stackText[key]||(e.stackText[key]=void 0!==this.activeSub&&e.stackText[this.activeSub]?e.stackText[this.activeSub]:this.text);r=function(t,e,n,r,i,o){function s(){}function a(){}var u;s.prototype=t,a.prototype=t.subs;var c=new s;for(u in c.subs=new a,c.subsText={},c.buf="",r=r||{},c.stackSubs=r,c.subsText=o,e)r[u]||(r[u]=e[u]);for(u in r)c.subs[u]=r[u];for(u in i=i||{},c.stackPartials=i,n)i[u]||(i[u]=n[u]);for(u in i)c.partials[u]=i[u];return c}(r,n.subs,n.partials,this.stackSubs,this.stackPartials,e.stackText)}return this.partials[t].instance=r,r},rp:function(t,e,n,r){var i=this.ep(t,n);return i?i.ri(e,n,r):""},rs:function(t,e,n){var r=t[t.length-1];if(l(r))for(var i=0;i<r.length;i++)t.push(r[i]),n(t,e,this),t.pop();else n(t,e,this)},s:function(t,e,n,i,o,s,a){var u;return(!l(t)||0!==t.length)&&("function"==typeof t&&(t=this.ms(t,e,n,i,o,s,a)),u=!!t,!i&&u&&e&&e.push("object"==r(t)?t:e[e.length-1]),u)},d:function(t,n,r,i){var o,s=t.split("."),a=this.f(s[0],n,r,i),u=this.options.modelGet,c=null;if("."===t&&l(n[n.length-2]))a=n[n.length-1];else for(var h=1;h<s.length;h++)void 0!==(o=e(s[h],a,u))?(c=a,a=o):a="";return!(i&&!a)&&(i||"function"!=typeof a||(n.push(c),a=this.mv(a,n,r),n.pop()),a)},f:function(t,n,r,i){for(var o=!1,s=!1,a=this.options.modelGet,u=n.length-1;u>=0;u--)if(void 0!==(o=e(t,n[u],a))){s=!0;break}return s?(i||"function"!=typeof o||(o=this.mv(o,n,r)),o):!i&&""},ls:function(t,e,n,r,i){var o=this.options.delimiters;return this.options.delimiters=i,this.b(this.ct(c(t.call(e,r)),e,n)),this.options.delimiters=o,!1},ct:function(t,e,n){if(this.options.disableLambda)throw new Error("Lambda features disabled.");return this.c.compile(t,this.options).render(e,n)},b:function(t){this.buf+=t},fl:function(){var t=this.buf;return this.buf="",t},ms:function(t,e,n,r,i,o,s){var a,u=e[e.length-1],c=t.call(u);return"function"==typeof c?!!r||(a=this.activeSub&&this.subsText&&this.subsText[this.activeSub]?this.subsText[this.activeSub]:this.text,this.ls(c,u,n,a.substring(i,o),s)):c},mv:function(t,e,n){var r=e[e.length-1],i=t.call(r);return"function"==typeof i?this.ct(c(i.call(r)),r,n):i},sub:function(t,e,n,r){var i=this.subs[t];i&&(this.activeSub=t,i(e,n,this,r),this.activeSub=!1)}};var n=/&/g,i=/</g,o=/>/g,s=/\'/g,a=/\"/g,u=/[&<>\"\']/;function c(t){return String(null==t?"":t)}var l=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}}(e)},cUo3:function(t,e,n){"use strict";var r,i,o,s=[n("u6PF"),n("BqH8"),n("zVWv"),n("hWx8"),n("4qm/")],a=-1,u=[],c=!1;function l(){r&&i&&(r=!1,i.length?u=i.concat(u):a=-1,u.length&&h())}function h(){if(!r){c=!1,r=!0;for(var t=u.length,e=setTimeout(l);t;){for(i=u,u=[];i&&++a<t;)i[a].run();a=-1,t=u.length}i=null,a=-1,r=!1,clearTimeout(e)}}for(var p=-1,f=s.length;++p<f;)if(s[p]&&s[p].test&&s[p].test()){o=s[p].install(h);break}function d(t,e){this.fun=t,this.array=e}d.prototype.run=function(){var t=this.fun,e=this.array;switch(e.length){case 0:return t();case 1:return t(e[0]);case 2:return t(e[0],e[1]);case 3:return t(e[0],e[1],e[2]);default:return t.apply(null,e)}},t.exports=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];u.push(new d(t,e)),c||r||(c=!0,o())}},cq35:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},i=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),o=p(n("Ruv9")),s=p(n("uyml")),a=p(n("xCN5")),u=p(n("pJ13")),c=p(n("BWnO")),l=p(n("+Ewk")),h=p(n("imfo"));function p(t){return t&&t.__esModule?t:{default:t}}var f=function(){function t(e){var n=e.apiKey,i=e.indexName,o=e.inputSelector,c=e.appId,p=void 0===c?"BH4D9OD16A":c,f=e.debug,d=void 0!==f&&f,m=e.algoliaOptions,g=void 0===m?{}:m,y=e.queryDataCallback,v=void 0===y?null:y,b=e.autocompleteOptions,w=void 0===b?{debug:!1,hint:!1,autoselect:!0}:b,_=e.transformData,x=void 0!==_&&_,S=e.queryHook,C=void 0!==S&&S,A=e.handleSelected,T=void 0!==A&&A,k=e.enhancedSearchInput,O=void 0!==k&&k,E=e.layout,N=void 0===E?"collumns":E;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),t.checkArguments({apiKey:n,indexName:i,inputSelector:o,debug:d,algoliaOptions:g,queryDataCallback:v,autocompleteOptions:w,transformData:x,queryHook:C,handleSelected:T,enhancedSearchInput:O,layout:N}),this.apiKey=n,this.appId=p,this.indexName=i,this.input=t.getInputFromSelector(o),this.algoliaOptions=r({hitsPerPage:5},g),this.queryDataCallback=v||null;var j=!(!w||!w.debug)&&w.debug;w.debug=d||j,this.autocompleteOptions=w,this.autocompleteOptions.cssClasses=this.autocompleteOptions.cssClasses||{},this.autocompleteOptions.cssClasses.prefix=this.autocompleteOptions.cssClasses.prefix||"ds";var R=this.input&&"function"==typeof this.input.attr&&this.input.attr("aria-label");this.autocompleteOptions.ariaLabel=this.autocompleteOptions.ariaLabel||R||"search input",this.isSimpleLayout="simple"===N,this.client=(0,s.default)(this.appId,this.apiKey),this.client.addAlgoliaAgent("docsearch.js "+l.default),O&&(this.input=t.injectSearchBox(this.input)),this.autocomplete=(0,a.default)(this.input,w,[{source:this.getAutocompleteSource(x,C),templates:{suggestion:t.getSuggestionTemplate(this.isSimpleLayout),footer:u.default.footer,empty:t.getEmptyTemplate()}}]);var I=T;this.handleSelected=I||this.handleSelected,I&&(0,h.default)(".algolia-autocomplete").on("click",".ds-suggestions a",(function(t){t.preventDefault()})),this.autocomplete.on("autocomplete:selected",this.handleSelected.bind(null,this.autocomplete.autocomplete)),this.autocomplete.on("autocomplete:shown",this.handleShown.bind(null,this.input)),O&&t.bindSearchBoxEvent()}return i(t,[{key:"getAutocompleteSource",value:function(e,n){var r=this;return function(i,o){n&&(i=n(i)||i),r.client.search([{indexName:r.indexName,query:i,params:r.algoliaOptions}]).then((function(n){r.queryDataCallback&&"function"==typeof r.queryDataCallback&&r.queryDataCallback(n);var i=n.results[0].hits;e&&(i=e(i)||i),o(t.formatHits(i))}))}}},{key:"handleSelected",value:function(t,e,n,r){var i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};"click"!==i.selectionMethod&&(t.setVal(""),window.location.assign(n.url))}},{key:"handleShown",value:function(t){var e=t.offset().left+t.width()/2,n=(0,h.default)(document).width()/2;isNaN(n)&&(n=900);var r=e-n>=0?"algolia-autocomplete-right":"algolia-autocomplete-left",i=e-n<0?"algolia-autocomplete-right":"algolia-autocomplete-left",o=(0,h.default)(".algolia-autocomplete");o.hasClass(r)||o.addClass(r),o.hasClass(i)&&o.removeClass(i)}}],[{key:"checkArguments",value:function(e){if(!e.apiKey||!e.indexName)throw new Error("Usage:\n  documentationSearch({\n  apiKey,\n  indexName,\n  inputSelector,\n  [ appId ],\n  [ algoliaOptions.{hitsPerPage} ]\n  [ autocompleteOptions.{hint,debug} ]\n})");if("string"!=typeof e.inputSelector)throw new Error("Error: inputSelector:"+e.inputSelector+"  must be a string. Each selector must match only one element and separated by ','");if(!t.getInputFromSelector(e.inputSelector))throw new Error("Error: No input element in the page matches "+e.inputSelector)}},{key:"injectSearchBox",value:function(t){t.before(u.default.searchBox);var e=t.prev().prev().find("input");return t.remove(),e}},{key:"bindSearchBoxEvent",value:function(){(0,h.default)('.searchbox [type="reset"]').on("click",(function(){(0,h.default)("input#docsearch").focus(),(0,h.default)(this).addClass("hide"),a.default.autocomplete.setVal("")})),(0,h.default)("input#docsearch").on("keyup",(function(){var t=document.querySelector("input#docsearch"),e=document.querySelector('.searchbox [type="reset"]');e.className="searchbox__reset",0===t.value.length&&(e.className+=" hide")}))}},{key:"getInputFromSelector",value:function(t){var e=(0,h.default)(t).filter("input");return e.length?(0,h.default)(e[0]):null}},{key:"formatHits",value:function(e){var n=c.default.deepClone(e).map((function(t){return t._highlightResult&&(t._highlightResult=c.default.mergeKeyWithParent(t._highlightResult,"hierarchy")),c.default.mergeKeyWithParent(t,"hierarchy")})),r=c.default.groupBy(n,"lvl0");return h.default.each(r,(function(t,e){var n=c.default.groupBy(e,"lvl1"),i=c.default.flattenAndFlagFirst(n,"isSubCategoryHeader");r[t]=i})),(r=c.default.flattenAndFlagFirst(r,"isCategoryHeader")).map((function(e){var n=t.formatURL(e),r=c.default.getHighlightedValue(e,"lvl0"),i=c.default.getHighlightedValue(e,"lvl1")||r,o=c.default.compact([c.default.getHighlightedValue(e,"lvl2")||i,c.default.getHighlightedValue(e,"lvl3"),c.default.getHighlightedValue(e,"lvl4"),c.default.getHighlightedValue(e,"lvl5"),c.default.getHighlightedValue(e,"lvl6")]).join('<span class="aa-suggestion-title-separator" aria-hidden="true"> › </span>'),s=c.default.getSnippetedValue(e,"content"),a=i&&""!==i||o&&""!==o,u=o&&""!==o&&o!==i,l=!u&&i&&""!==i&&i!==r;return{isLvl0:!l&&!u,isLvl1:l,isLvl2:u,isLvl1EmptyOrDuplicate:!i||""===i||i===r,isCategoryHeader:e.isCategoryHeader,isSubCategoryHeader:e.isSubCategoryHeader,isTextOrSubcategoryNonEmpty:a,category:r,subcategory:i,title:o,text:s,url:n}}))}},{key:"formatURL",value:function(t){var e=t.url,n=t.anchor;return e?-1!==e.indexOf("#")?e:n?t.url+"#"+t.anchor:e:n?"#"+t.anchor:(console.warn("no anchor nor url for : ",JSON.stringify(t)),null)}},{key:"getEmptyTemplate",value:function(){return function(t){return o.default.compile(u.default.empty).render(t)}}},{key:"getSuggestionTemplate",value:function(t){var e=t?u.default.suggestionSimple:u.default.suggestion,n=o.default.compile(e);return function(t){return n.render(t)}}}]),t}();e.default=f},ef3p:function(t,e,n){(function(e){var r,i=n("NOtv")("algoliasearch:src/hostIndexState.js"),o="algoliasearch-client-js",s={state:{},set:function(t,e){return this.state[t]=e,this.state[t]},get:function(t){return this.state[t]||null}},a={set:function(t,n){s.set(t,n);try{var r=JSON.parse(e.localStorage[o]);return r[t]=n,e.localStorage[o]=JSON.stringify(r),r[t]}catch(e){return u(t,e)}},get:function(t){try{return JSON.parse(e.localStorage[o])[t]||null}catch(e){return u(t,e)}}};function u(t,n){return i("localStorage failed with",n),function(){try{e.localStorage.removeItem(o)}catch(t){}}(),(r=s).get(t)}function c(t,e){return 1===arguments.length?r.get(t):r.set(t,e)}function l(){try{return"localStorage"in e&&null!==e.localStorage&&(e.localStorage[o]||e.localStorage.setItem(o,JSON.stringify({})),!0)}catch(t){return!1}}r=l()?a:s,t.exports={get:c,set:c,supportsLocalStorage:l}}).call(this,n("yLpj"))},govL:function(t,e,n){"use strict";var r="aaAttrs",i=n("jgMb"),o=n("BoXp"),s=n("8ujV"),a=n("GlCl"),u=n("ATuh"),c=n("kMSt"),l=n("kppr");function h(t){var e,n;if((t=t||{}).input||i.error("missing input"),this.isActivated=!1,this.debug=!!t.debug,this.autoselect=!!t.autoselect,this.autoselectOnBlur=!!t.autoselectOnBlur,this.openOnFocus=!!t.openOnFocus,this.minLength=i.isNumber(t.minLength)?t.minLength:1,this.autoWidth=void 0===t.autoWidth||!!t.autoWidth,this.clearOnSelected=!!t.clearOnSelected,this.tabAutocomplete=void 0===t.tabAutocomplete||!!t.tabAutocomplete,t.hint=!!t.hint,t.hint&&t.appendTo)throw new Error("[autocomplete.js] hint and appendTo options can't be used at the same time");this.css=t.css=i.mixin({},l,t.appendTo?l.appendTo:{}),this.cssClasses=t.cssClasses=i.mixin({},l.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix=i.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),this.listboxId=t.listboxId=[this.cssClasses.root,"listbox",i.getUniqueId()].join("-");var a=function(t){var e,n,s,a;e=o.element(t.input),n=o.element(c.wrapper.replace("%ROOT%",t.cssClasses.root)).css(t.css.wrapper),t.appendTo||"block"!==e.css("display")||"table"!==e.parent().css("display")||n.css("display","table-cell");var u=c.dropdown.replace("%PREFIX%",t.cssClasses.prefix).replace("%DROPDOWN_MENU%",t.cssClasses.dropdownMenu);s=o.element(u).css(t.css.dropdown).attr({role:"listbox",id:t.listboxId}),t.templates&&t.templates.dropdownMenu&&s.html(i.templatify(t.templates.dropdownMenu)());(a=e.clone().css(t.css.hint).css(function(t){return{backgroundAttachment:t.css("background-attachment"),backgroundClip:t.css("background-clip"),backgroundColor:t.css("background-color"),backgroundImage:t.css("background-image"),backgroundOrigin:t.css("background-origin"),backgroundPosition:t.css("background-position"),backgroundRepeat:t.css("background-repeat"),backgroundSize:t.css("background-size")}}(e))).val("").addClass(i.className(t.cssClasses.prefix,t.cssClasses.hint,!0)).removeAttr("id name placeholder required").prop("readonly",!0).attr({"aria-hidden":"true",autocomplete:"off",spellcheck:"false",tabindex:-1}),a.removeData&&a.removeData();e.data(r,{"aria-autocomplete":e.attr("aria-autocomplete"),"aria-expanded":e.attr("aria-expanded"),"aria-owns":e.attr("aria-owns"),autocomplete:e.attr("autocomplete"),dir:e.attr("dir"),role:e.attr("role"),spellcheck:e.attr("spellcheck"),style:e.attr("style"),type:e.attr("type")}),e.addClass(i.className(t.cssClasses.prefix,t.cssClasses.input,!0)).attr({autocomplete:"off",spellcheck:!1,role:"combobox","aria-autocomplete":t.datasets&&t.datasets[0]&&t.datasets[0].displayKey?"both":"list","aria-expanded":"false","aria-label":t.ariaLabel,"aria-owns":t.listboxId}).css(t.hint?t.css.input:t.css.inputWithNoHint);try{e.attr("dir")||e.attr("dir","auto")}catch(t){}return(n=t.appendTo?n.appendTo(o.element(t.appendTo).eq(0)).eq(0):e.wrap(n).parent()).prepend(t.hint?a:null).append(s),{wrapper:n,input:e,hint:a,menu:s}}(t);this.$node=a.wrapper;var u=this.$input=a.input;e=a.menu,n=a.hint,t.dropdownMenuContainer&&o.element(t.dropdownMenuContainer).css("position","relative").append(e.css("top","0")),u.on("blur.aa",(function(t){var n=document.activeElement;i.isMsie()&&(e[0]===n||e[0].contains(n))&&(t.preventDefault(),t.stopImmediatePropagation(),i.defer((function(){u.focus()})))})),e.on("mousedown.aa",(function(t){t.preventDefault()})),this.eventBus=t.eventBus||new s({el:u}),this.dropdown=new h.Dropdown({appendTo:t.appendTo,wrapper:this.$node,menu:e,datasets:t.datasets,templates:t.templates,cssClasses:t.cssClasses,minLength:this.minLength}).onSync("suggestionClicked",this._onSuggestionClicked,this).onSync("cursorMoved",this._onCursorMoved,this).onSync("cursorRemoved",this._onCursorRemoved,this).onSync("opened",this._onOpened,this).onSync("closed",this._onClosed,this).onSync("shown",this._onShown,this).onSync("empty",this._onEmpty,this).onSync("redrawn",this._onRedrawn,this).onAsync("datasetRendered",this._onDatasetRendered,this),this.input=new h.Input({input:u,hint:n}).onSync("focused",this._onFocused,this).onSync("blurred",this._onBlurred,this).onSync("enterKeyed",this._onEnterKeyed,this).onSync("tabKeyed",this._onTabKeyed,this).onSync("escKeyed",this._onEscKeyed,this).onSync("upKeyed",this._onUpKeyed,this).onSync("downKeyed",this._onDownKeyed,this).onSync("leftKeyed",this._onLeftKeyed,this).onSync("rightKeyed",this._onRightKeyed,this).onSync("queryChanged",this._onQueryChanged,this).onSync("whitespaceChanged",this._onWhitespaceChanged,this),this._bindKeyboardShortcuts(t),this._setLanguageDirection()}i.mixin(h.prototype,{_bindKeyboardShortcuts:function(t){if(t.keyboardShortcuts){var e=this.$input,n=[];i.each(t.keyboardShortcuts,(function(t){"string"==typeof t&&(t=t.toUpperCase().charCodeAt(0)),n.push(t)})),o.element(document).keydown((function(t){var r=t.target||t.srcElement,i=r.tagName;if(!r.isContentEditable&&"INPUT"!==i&&"SELECT"!==i&&"TEXTAREA"!==i){var o=t.which||t.keyCode;-1!==n.indexOf(o)&&(e.focus(),t.stopPropagation(),t.preventDefault())}}))}},_onSuggestionClicked:function(t,e){var n;(n=this.dropdown.getDatumForSuggestion(e))&&this._select(n,{selectionMethod:"click"})},_onCursorMoved:function(t,e){var n=this.dropdown.getDatumForCursor(),r=this.dropdown.getCurrentCursor().attr("id");this.input.setActiveDescendant(r),n&&(e&&this.input.setInputValue(n.value,!0),this.eventBus.trigger("cursorchanged",n.raw,n.datasetName))},_onCursorRemoved:function(){this.input.resetInputValue(),this._updateHint(),this.eventBus.trigger("cursorremoved")},_onDatasetRendered:function(){this._updateHint(),this.eventBus.trigger("updated")},_onOpened:function(){this._updateHint(),this.input.expand(),this.eventBus.trigger("opened")},_onEmpty:function(){this.eventBus.trigger("empty")},_onRedrawn:function(){this.$node.css("top","0px"),this.$node.css("left","0px");var t=this.$input[0].getBoundingClientRect();this.autoWidth&&this.$node.css("width",t.width+"px");var e=this.$node[0].getBoundingClientRect(),n=t.bottom-e.top;this.$node.css("top",n+"px");var r=t.left-e.left;this.$node.css("left",r+"px"),this.eventBus.trigger("redrawn")},_onShown:function(){this.eventBus.trigger("shown"),this.autoselect&&this.dropdown.cursorTopSuggestion()},_onClosed:function(){this.input.clearHint(),this.input.removeActiveDescendant(),this.input.collapse(),this.eventBus.trigger("closed")},_onFocused:function(){if(this.isActivated=!0,this.openOnFocus){var t=this.input.getQuery();t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty(),this.dropdown.open()}},_onBlurred:function(){var t,e;t=this.dropdown.getDatumForCursor(),e=this.dropdown.getDatumForTopSuggestion();var n={selectionMethod:"blur"};this.debug||(this.autoselectOnBlur&&t?this._select(t,n):this.autoselectOnBlur&&e?this._select(e,n):(this.isActivated=!1,this.dropdown.empty(),this.dropdown.close()))},_onEnterKeyed:function(t,e){var n,r;n=this.dropdown.getDatumForCursor(),r=this.dropdown.getDatumForTopSuggestion();var i={selectionMethod:"enterKey"};n?(this._select(n,i),e.preventDefault()):this.autoselect&&r&&(this._select(r,i),e.preventDefault())},_onTabKeyed:function(t,e){if(this.tabAutocomplete){var n;(n=this.dropdown.getDatumForCursor())?(this._select(n,{selectionMethod:"tabKey"}),e.preventDefault()):this._autocomplete(!0)}else this.dropdown.close()},_onEscKeyed:function(){this.dropdown.close(),this.input.resetInputValue()},_onUpKeyed:function(){var t=this.input.getQuery();this.dropdown.isEmpty&&t.length>=this.minLength?this.dropdown.update(t):this.dropdown.moveCursorUp(),this.dropdown.open()},_onDownKeyed:function(){var t=this.input.getQuery();this.dropdown.isEmpty&&t.length>=this.minLength?this.dropdown.update(t):this.dropdown.moveCursorDown(),this.dropdown.open()},_onLeftKeyed:function(){"rtl"===this.dir&&this._autocomplete()},_onRightKeyed:function(){"ltr"===this.dir&&this._autocomplete()},_onQueryChanged:function(t,e){this.input.clearHintIfInvalid(),e.length>=this.minLength?this.dropdown.update(e):this.dropdown.empty(),this.dropdown.open(),this._setLanguageDirection()},_onWhitespaceChanged:function(){this._updateHint(),this.dropdown.open()},_setLanguageDirection:function(){var t=this.input.getLanguageDirection();this.dir!==t&&(this.dir=t,this.$node.css("direction",t),this.dropdown.setLanguageDirection(t))},_updateHint:function(){var t,e,n,r,o;(t=this.dropdown.getDatumForTopSuggestion())&&this.dropdown.isVisible()&&!this.input.hasOverflow()?(e=this.input.getInputValue(),n=a.normalizeQuery(e),r=i.escapeRegExChars(n),(o=new RegExp("^(?:"+r+")(.+$)","i").exec(t.value))?this.input.setHint(e+o[1]):this.input.clearHint()):this.input.clearHint()},_autocomplete:function(t){var e,n,r,i;e=this.input.getHint(),n=this.input.getQuery(),r=t||this.input.isCursorAtEnd(),e&&n!==e&&r&&((i=this.dropdown.getDatumForTopSuggestion())&&this.input.setInputValue(i.value),this.eventBus.trigger("autocompleted",i.raw,i.datasetName))},_select:function(t,e){void 0!==t.value&&this.input.setQuery(t.value),this.clearOnSelected?this.setVal(""):this.input.setInputValue(t.value,!0),this._setLanguageDirection(),!1===this.eventBus.trigger("selected",t.raw,t.datasetName,e).isDefaultPrevented()&&(this.dropdown.close(),i.defer(i.bind(this.dropdown.empty,this.dropdown)))},open:function(){if(!this.isActivated){var t=this.input.getInputValue();t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty()}this.dropdown.open()},close:function(){this.dropdown.close()},setVal:function(t){t=i.toStr(t),this.isActivated?this.input.setInputValue(t):(this.input.setQuery(t),this.input.setInputValue(t,!0)),this._setLanguageDirection()},getVal:function(){return this.input.getQuery()},destroy:function(){this.input.destroy(),this.dropdown.destroy(),function(t,e){var n=t.find(i.className(e.prefix,e.input));i.each(n.data(r),(function(t,e){void 0===t?n.removeAttr(e):n.attr(e,t)})),n.detach().removeClass(i.className(e.prefix,e.input,!0)).insertAfter(t),n.removeData&&n.removeData(r);t.remove()}(this.$node,this.cssClasses),this.$node=null},getWrapper:function(){return this.dropdown.$container[0]}}),h.Dropdown=u,h.Input=a,h.sources=n("lest"),t.exports=h},hWx8:function(t,e,n){"use strict";(function(t){e.test=function(){return"document"in t&&"onreadystatechange"in t.document.createElement("script")},e.install=function(e){return function(){var n=t.document.createElement("script");return n.onreadystatechange=function(){e(),n.onreadystatechange=null,n.parentNode.removeChild(n),n=null},t.document.documentElement.appendChild(n),e}}}).call(this,n("yLpj"))},ilQL:function(t,e,n){function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var i=n("9SYa"),o=n("nVSS"),s=n("JRE2");function a(t,e){this.indexName=e,this.as=t,this.typeAheadArgs=null,this.typeAheadValueOption=null,this.cache={}}t.exports=a,a.prototype.clearCache=function(){this.cache={}},a.prototype.search=i("query"),a.prototype.similarSearch=o(i("similarQuery"),s("index.similarSearch(query[, callback])","index.search({ similarQuery: query }[, callback])")),a.prototype.browse=function(t,e,i){var o,s,a=n("MYMM"),u=this;0===arguments.length||1===arguments.length&&"function"==typeof arguments[0]?(o=0,i=arguments[0],t=void 0):"number"==typeof arguments[0]?(o=arguments[0],"number"==typeof arguments[1]?s=arguments[1]:"function"==typeof arguments[1]&&(i=arguments[1],s=void 0),t=void 0,e=void 0):"object"===r(arguments[0])?("function"==typeof arguments[1]&&(i=arguments[1]),e=arguments[0],t=void 0):"string"==typeof arguments[0]&&"function"==typeof arguments[1]&&(i=arguments[1],e=void 0),e=a({},e||{},{page:o,hitsPerPage:s,query:t});var c=this.as._getSearchParams(e,"");return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(u.indexName)+"/browse",body:{params:c},hostType:"read",callback:i})},a.prototype.browseFrom=function(t,e){return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/browse",body:{cursor:t},hostType:"read",callback:e})},a.prototype.searchForFacetValues=function(t,e){var r=n("sLmk"),i=n("PGxr");if(void 0===t.facetName||void 0===t.facetQuery)throw new Error("Usage: index.searchForFacetValues({facetName, facetQuery, ...params}[, callback])");var o=t.facetName,s=i(r(t),(function(t){return"facetName"===t})),a=this.as._getSearchParams(s,"");return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/facets/"+encodeURIComponent(o)+"/query",hostType:"read",body:{params:a},callback:e})},a.prototype.searchFacet=o((function(t,e){return this.searchForFacetValues(t,e)}),s("index.searchFacet(params[, callback])","index.searchForFacetValues(params[, callback])")),a.prototype._search=function(t,e,n,r){return this.as._jsonRequest({cache:this.cache,method:"POST",url:e||"/1/indexes/"+encodeURIComponent(this.indexName)+"/query",body:{params:t},hostType:"read",fallback:{method:"GET",url:"/1/indexes/"+encodeURIComponent(this.indexName),body:{params:t}},callback:n,additionalUA:r})},a.prototype.getObject=function(t,e,n){var r=this;1!==arguments.length&&"function"!=typeof e||(n=e,e=void 0);var i="";if(void 0!==e){i="?attributes=";for(var o=0;o<e.length;++o)0!==o&&(i+=","),i+=e[o]}return this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(r.indexName)+"/"+encodeURIComponent(t)+i,hostType:"read",callback:n})},a.prototype.getObjects=function(t,e,r){var i=n("49sm"),o=n("7Ule"),s="Usage: index.getObjects(arrayOfObjectIDs[, callback])";if(!i(t))throw new Error(s);var a=this;1!==arguments.length&&"function"!=typeof e||(r=e,e=void 0);var u={requests:o(t,(function(t){var n={indexName:a.indexName,objectID:t};return e&&(n.attributesToRetrieve=e.join(",")),n}))};return this.as._jsonRequest({method:"POST",url:"/1/indexes/*/objects",hostType:"read",body:u,callback:r})},a.prototype.as=null,a.prototype.indexName=null,a.prototype.typeAheadArgs=null,a.prototype.typeAheadValueOption=null},imfo:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i=n("/kzE"),o=(r=i)&&r.__esModule?r:{default:r};e.default=o.default},jgMb:function(t,e,n){"use strict";var r,i=n("BoXp");function o(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}t.exports={isArray:null,isFunction:null,isObject:null,bind:null,each:null,map:null,mixin:null,isMsie:function(t){if(void 0===t&&(t=navigator.userAgent),/(msie|trident)/i.test(t)){var e=t.match(/(msie |rv:)(\d+(.\d+)?)/i);if(e)return e[2]}return!1},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isNumber:function(t){return"number"==typeof t},toStr:function(t){return null==t?"":t+""},cloneDeep:function(t){var e=this.mixin({},t),n=this;return this.each(e,(function(t,r){t&&(n.isArray(t)?e[r]=[].concat(t):n.isObject(t)&&(e[r]=n.cloneDeep(t)))})),e},error:function(t){throw new Error(t)},every:function(t,e){var n=!0;return t?(this.each(t,(function(r,i){n&&(n=e.call(null,r,i,t)&&n)})),!!n):n},any:function(t,e){var n=!1;return t?(this.each(t,(function(r,i){if(e.call(null,r,i,t))return n=!0,!1})),n):n},getUniqueId:(r=0,function(){return r++}),templatify:function(t){if(this.isFunction(t))return t;var e=i.element(t);return"SCRIPT"===e.prop("tagName")?function(){return e.text()}:function(){return String(t)}},defer:function(t){setTimeout(t,0)},noop:function(){},formatPrefix:function(t,e){return e?"":t+"-"},className:function(t,e,n){return(n?"":".")+t+e},escapeHighlightedString:function(t,e,n){e=e||"<em>";var r=document.createElement("div");r.appendChild(document.createTextNode(e)),n=n||"</em>";var i=document.createElement("div");i.appendChild(document.createTextNode(n));var s=document.createElement("div");return s.appendChild(document.createTextNode(t)),s.innerHTML.replace(RegExp(o(r.innerHTML),"g"),e).replace(RegExp(o(i.innerHTML),"g"),n)}}},kMSt:function(t,e,n){"use strict";t.exports={wrapper:'<span class="%ROOT%"></span>',dropdown:'<span class="%PREFIX%%DROPDOWN_MENU%"></span>',dataset:'<div class="%PREFIX%%DATASET%-%CLASS%"></div>',suggestions:'<span class="%PREFIX%%SUGGESTIONS%"></span>',suggestion:'<div class="%PREFIX%%SUGGESTION%"></div>'}},kd2E:function(t,e,n){"use strict";function r(t,e){return Object.prototype.hasOwnProperty.call(t,e)}t.exports=function(t,e,n,o){e=e||"&",n=n||"=";var s={};if("string"!=typeof t||0===t.length)return s;var a=/\+/g;t=t.split(e);var u=1e3;o&&"number"==typeof o.maxKeys&&(u=o.maxKeys);var c=t.length;u>0&&c>u&&(c=u);for(var l=0;l<c;++l){var h,p,f,d,m=t[l].replace(a,"%20"),g=m.indexOf(n);g>=0?(h=m.substr(0,g),p=m.substr(g+1)):(h=m,p=""),f=decodeURIComponent(h),d=decodeURIComponent(p),r(s,f)?i(s[f])?s[f].push(d):s[f]=[s[f],d]:s[f]=d}return s};var i=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},kppr:function(t,e,n){"use strict";var r=n("jgMb"),i={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"},suggestions:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"},ltr:{left:"0",right:"auto"},rtl:{left:"auto",right:"0"},defaultClasses:{root:"algolia-autocomplete",prefix:"aa",noPrefix:!1,dropdownMenu:"dropdown-menu",input:"input",hint:"hint",suggestions:"suggestions",suggestion:"suggestion",cursor:"cursor",dataset:"dataset",empty:"empty"},appendTo:{wrapper:{position:"absolute",zIndex:"100",display:"none"},input:{},inputWithNoHint:{},dropdown:{display:"block"}}};r.isMsie()&&r.mixin(i.input,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),r.isMsie()&&r.isMsie()<=7&&r.mixin(i.input,{marginTop:"-1px"}),t.exports=i},l1Z7:function(t,e,n){"use strict";var r="aaDataset",i="aaValue",o="aaDatum",s=n("jgMb"),a=n("BoXp"),u=n("kMSt"),c=n("kppr"),l=n("1wyU");function h(t){var e,n,r,i;(t=t||{}).templates=t.templates||{},t.source||s.error("missing source"),t.name&&(e=t.name,!/^[_a-zA-Z0-9-]+$/.test(e))&&s.error("invalid dataset name: "+t.name),this.query=null,this._isEmpty=!0,this.highlight=!!t.highlight,this.name=void 0===t.name||null===t.name?s.getUniqueId():t.name,this.source=t.source,this.displayFn=(n=(n=t.display||t.displayKey)||"value",s.isFunction(n)?n:function(t){return t[n]}),this.debounce=t.debounce,this.cache=!1!==t.cache,this.templates=(r=t.templates,i=this.displayFn,{empty:r.empty&&s.templatify(r.empty),header:r.header&&s.templatify(r.header),footer:r.footer&&s.templatify(r.footer),suggestion:r.suggestion||function(t){return"<p>"+i(t)+"</p>"}}),this.css=s.mixin({},c,t.appendTo?c.appendTo:{}),this.cssClasses=t.cssClasses=s.mixin({},c.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix||s.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix);var o=s.className(this.cssClasses.prefix,this.cssClasses.dataset);this.$el=t.$menu&&t.$menu.find(o+"-"+this.name).length>0?a.element(t.$menu.find(o+"-"+this.name)[0]):a.element(u.dataset.replace("%CLASS%",this.name).replace("%PREFIX%",this.cssClasses.prefix).replace("%DATASET%",this.cssClasses.dataset)),this.$menu=t.$menu,this.clearCachedSuggestions()}h.extractDatasetName=function(t){return a.element(t).data(r)},h.extractValue=function(t){return a.element(t).data(i)},h.extractDatum=function(t){var e=a.element(t).data(o);return"string"==typeof e&&(e=JSON.parse(e)),e},s.mixin(h.prototype,l,{_render:function(t,e){if(this.$el){var n,c=this,l=[].slice.call(arguments,2);if(this.$el.empty(),n=e&&e.length,this._isEmpty=!n,!n&&this.templates.empty)this.$el.html(h.apply(this,l)).prepend(c.templates.header?f.apply(this,l):null).append(c.templates.footer?d.apply(this,l):null);else if(n)this.$el.html(p.apply(this,l)).prepend(c.templates.header?f.apply(this,l):null).append(c.templates.footer?d.apply(this,l):null);else if(e&&!Array.isArray(e))throw new TypeError("suggestions must be an array");this.$menu&&this.$menu.addClass(this.cssClasses.prefix+(n?"with":"without")+"-"+this.name).removeClass(this.cssClasses.prefix+(n?"without":"with")+"-"+this.name),this.trigger("rendered",t)}function h(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!0}].concat(e),c.templates.empty.apply(this,e)}function p(){var t,n,l=[].slice.call(arguments,0),h=this,p=u.suggestions.replace("%PREFIX%",this.cssClasses.prefix).replace("%SUGGESTIONS%",this.cssClasses.suggestions);return t=a.element(p).css(this.css.suggestions),n=s.map(e,(function(t){var e,n=u.suggestion.replace("%PREFIX%",h.cssClasses.prefix).replace("%SUGGESTION%",h.cssClasses.suggestion);return(e=a.element(n).attr({role:"option",id:["option",Math.floor(1e8*Math.random())].join("-")}).append(c.templates.suggestion.apply(this,[t].concat(l)))).data(r,c.name),e.data(i,c.displayFn(t)||void 0),e.data(o,JSON.stringify(t)),e.children().each((function(){a.element(this).css(h.css.suggestionChild)})),e})),t.append.apply(t,n),t}function f(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!n}].concat(e),c.templates.header.apply(this,e)}function d(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!n}].concat(e),c.templates.footer.apply(this,e)}},getRoot:function(){return this.$el},update:function(t){function e(e){if(!this.canceled&&t===this.query){var n=[].slice.call(arguments,1);this.cacheSuggestions(t,e,n),this._render.apply(this,[t,e].concat(n))}}if(this.query=t,this.canceled=!1,this.shouldFetchFromCache(t))e.apply(this,[this.cachedSuggestions].concat(this.cachedRenderExtraArgs));else{var n=this,r=function(){n.canceled||n.source(t,e.bind(n))};if(this.debounce){clearTimeout(this.debounceTimeout),this.debounceTimeout=setTimeout((function(){n.debounceTimeout=null,r()}),this.debounce)}else r()}},cacheSuggestions:function(t,e,n){this.cachedQuery=t,this.cachedSuggestions=e,this.cachedRenderExtraArgs=n},shouldFetchFromCache:function(t){return this.cache&&this.cachedQuery===t&&this.cachedSuggestions&&this.cachedSuggestions.length},clearCachedSuggestions:function(){delete this.cachedQuery,delete this.cachedSuggestions,delete this.cachedRenderExtraArgs},cancel:function(){this.canceled=!0},clear:function(){this.cancel(),this.$el.empty(),this.trigger("rendered","")},isEmpty:function(){return this._isEmpty},destroy:function(){this.clearCachedSuggestions(),this.$el=null}}),t.exports=h},lest:function(t,e,n){"use strict";t.exports={hits:n("7kQj"),popularIn:n("uGaE")}},lv48:function(t,e,n){var r;function i(t){function n(){if(n.enabled){var t=n,i=+new Date,o=i-(r||i);t.diff=o,t.prev=r,t.curr=i,r=i;for(var s=new Array(arguments.length),a=0;a<s.length;a++)s[a]=arguments[a];s[0]=e.coerce(s[0]),"string"!=typeof s[0]&&s.unshift("%O");var u=0;s[0]=s[0].replace(/%([a-zA-Z%])/g,(function(n,r){if("%%"===n)return n;u++;var i=e.formatters[r];if("function"==typeof i){var o=s[u];n=i.call(t,o),s.splice(u,1),u--}return n})),e.formatArgs.call(t,s),(n.log||e.log||console.log.bind(console)).apply(t,s)}}return n.namespace=t,n.enabled=e.enabled(t),n.useColors=e.useColors(),n.color=function(t){var n,r=0;for(n in t)r=(r<<5)-r+t.charCodeAt(n),r|=0;return e.colors[Math.abs(r)%e.colors.length]}(t),"function"==typeof e.init&&e.init(n),n}(e=t.exports=i.debug=i.default=i).coerce=function(t){return t instanceof Error?t.stack||t.message:t},e.disable=function(){e.enable("")},e.enable=function(t){e.save(t),e.names=[],e.skips=[];for(var n=("string"==typeof t?t:"").split(/[\s,]+/),r=n.length,i=0;i<r;i++)n[i]&&("-"===(t=n[i].replace(/\*/g,".*?"))[0]?e.skips.push(new RegExp("^"+t.substr(1)+"$")):e.names.push(new RegExp("^"+t+"$")))},e.enabled=function(t){var n,r;for(n=0,r=e.skips.length;n<r;n++)if(e.skips[n].test(t))return!1;for(n=0,r=e.names.length;n<r;n++)if(e.names[n].test(t))return!0;return!1},e.humanize=n("FGiv"),e.names=[],e.skips=[],e.formatters={}},nVSS:function(t,e){t.exports=function(t,e){var n=!1;return function(){return n||(console.warn(e),n=!0),t.apply(this,arguments)}}},pJ13:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r="algolia-docsearch-suggestion",i={suggestion:'\n  <a class="'+r+"\n    {{#isCategoryHeader}}"+r+"__main{{/isCategoryHeader}}\n    {{#isSubCategoryHeader}}"+r+'__secondary{{/isSubCategoryHeader}}\n    "\n    aria-label="Link to the result"\n    href="{{{url}}}"\n    >\n    <div class="'+r+'--category-header">\n        <span class="'+r+'--category-header-lvl0">{{{category}}}</span>\n    </div>\n    <div class="'+r+'--wrapper">\n      <div class="'+r+'--subcategory-column">\n        <span class="'+r+'--subcategory-column-text">{{{subcategory}}}</span>\n      </div>\n      {{#isTextOrSubcategoryNonEmpty}}\n      <div class="'+r+'--content">\n        <div class="'+r+'--subcategory-inline">{{{subcategory}}}</div>\n        <div class="'+r+'--title">{{{title}}}</div>\n        {{#text}}<div class="'+r+'--text">{{{text}}}</div>{{/text}}\n      </div>\n      {{/isTextOrSubcategoryNonEmpty}}\n    </div>\n  </a>\n  ',suggestionSimple:'\n  <div class="'+r+"\n    {{#isCategoryHeader}}"+r+"__main{{/isCategoryHeader}}\n    {{#isSubCategoryHeader}}"+r+'__secondary{{/isSubCategoryHeader}}\n    suggestion-layout-simple\n  ">\n    <div class="'+r+'--category-header">\n        {{^isLvl0}}\n        <span class="'+r+"--category-header-lvl0 "+r+'--category-header-item">{{{category}}}</span>\n          {{^isLvl1}}\n          {{^isLvl1EmptyOrDuplicate}}\n          <span class="'+r+"--category-header-lvl1 "+r+'--category-header-item">\n              {{{subcategory}}}\n          </span>\n          {{/isLvl1EmptyOrDuplicate}}\n          {{/isLvl1}}\n        {{/isLvl0}}\n        <div class="'+r+"--title "+r+'--category-header-item">\n            {{#isLvl2}}\n                {{{title}}}\n            {{/isLvl2}}\n            {{#isLvl1}}\n                {{{subcategory}}}\n            {{/isLvl1}}\n            {{#isLvl0}}\n                {{{category}}}\n            {{/isLvl0}}\n        </div>\n    </div>\n    <div class="'+r+'--wrapper">\n      {{#text}}\n      <div class="'+r+'--content">\n        <div class="'+r+'--text">{{{text}}}</div>\n      </div>\n      {{/text}}\n    </div>\n  </div>\n  ',footer:'\n    <div class="algolia-docsearch-footer">\n      Search by <a class="algolia-docsearch-footer--logo" href="https://www.algolia.com/docsearch">Algolia</a>\n    </div>\n  ',empty:'\n  <div class="'+r+'">\n    <div class="'+r+'--wrapper">\n        <div class="'+r+"--content "+r+'--no-results">\n            <div class="'+r+'--title">\n                <div class="'+r+'--text">\n                    No results found for query <b>"{{query}}"</b>\n                </div>\n            </div>\n        </div>\n    </div>\n  </div>\n  ',searchBox:'\n  <form novalidate="novalidate" onsubmit="return false;" class="searchbox">\n    <div role="search" class="searchbox__wrapper">\n      <input id="docsearch" type="search" name="search" placeholder="Search the docs" autocomplete="off" required="required" class="searchbox__input"/>\n      <button type="submit" title="Submit your search query." class="searchbox__submit" >\n        <svg width=12 height=12 role="img" aria-label="Search">\n          <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#sbx-icon-search-13"></use>\n        </svg>\n      </button>\n      <button type="reset" title="Clear the search query." class="searchbox__reset hide">\n        <svg width=12 height=12 role="img" aria-label="Reset">\n          <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#sbx-icon-clear-3"></use>\n        </svg>\n      </button>\n    </div>\n</form>\n\n<div class="svg-icons" style="height: 0; width: 0; position: absolute; visibility: hidden">\n  <svg xmlns="http://www.w3.org/2000/svg">\n    <symbol id="sbx-icon-clear-3" viewBox="0 0 40 40"><path d="M16.228 20L1.886 5.657 0 3.772 3.772 0l1.885 1.886L20 16.228 34.343 1.886 36.228 0 40 3.772l-1.886 1.885L23.772 20l14.342 14.343L40 36.228 36.228 40l-1.885-1.886L20 23.772 5.657 38.114 3.772 40 0 36.228l1.886-1.885L16.228 20z" fill-rule="evenodd"></symbol>\n    <symbol id="sbx-icon-search-13" viewBox="0 0 40 40"><path d="M26.806 29.012a16.312 16.312 0 0 1-10.427 3.746C7.332 32.758 0 25.425 0 16.378 0 7.334 7.333 0 16.38 0c9.045 0 16.378 7.333 16.378 16.38 0 3.96-1.406 7.593-3.746 10.426L39.547 37.34c.607.608.61 1.59-.004 2.203a1.56 1.56 0 0 1-2.202.004L26.807 29.012zm-10.427.627c7.322 0 13.26-5.938 13.26-13.26 0-7.324-5.938-13.26-13.26-13.26-7.324 0-13.26 5.936-13.26 13.26 0 7.322 5.936 13.26 13.26 13.26z" fill-rule="evenodd"></symbol>\n  </svg>\n</div>\n  '};e.default=i},s4NR:function(t,e,n){"use strict";e.decode=e.parse=n("kd2E"),e.encode=e.stringify=n("4JlD")},sLmk:function(t,e){t.exports=function(t){return JSON.parse(JSON.stringify(t))}},sYn3:function(t,e,n){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var i;if(!Object.keys){var o=Object.prototype.hasOwnProperty,s=Object.prototype.toString,a=n("1KsK"),u=Object.prototype.propertyIsEnumerable,c=!u.call({toString:null},"toString"),l=u.call((function(){}),"prototype"),h=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],p=function(t){var e=t.constructor;return e&&e.prototype===t},f={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},d=function(){if("undefined"==typeof window)return!1;for(var t in window)try{if(!f["$"+t]&&o.call(window,t)&&null!==window[t]&&"object"===r(window[t]))try{p(window[t])}catch(t){return!0}}catch(t){return!0}return!1}();i=function(t){var e=null!==t&&"object"===r(t),n="[object Function]"===s.call(t),i=a(t),u=e&&"[object String]"===s.call(t),f=[];if(!e&&!n&&!i)throw new TypeError("Object.keys called on a non-object");var m=l&&n;if(u&&t.length>0&&!o.call(t,0))for(var g=0;g<t.length;++g)f.push(String(g));if(i&&t.length>0)for(var y=0;y<t.length;++y)f.push(String(y));else for(var v in t)m&&"prototype"===v||!o.call(t,v)||f.push(String(v));if(c)for(var b=function(t){if("undefined"==typeof window||!d)return p(t);try{return p(t)}catch(t){return!1}}(t),w=0;w<h.length;++w)b&&"constructor"===h[w]||!o.call(t,h[w])||f.push(h[w]);return f}}t.exports=i},u6PF:function(t,e,n){"use strict";(function(t){e.test=function(){return void 0!==t&&!t.browser},e.install=function(e){return function(){t.nextTick(e)}}}).call(this,n("8oxB"))},uGaE:function(t,e,n){"use strict";var r=n("jgMb"),i=n("x0Qz"),o=n("X9Cu");t.exports=function(t,e,n,s){var a=o(t.as._ua);if(a&&a[0]>=3&&a[1]>20&&((e=e||{}).additionalUA="autocomplete.js "+i),!n.source)return r.error("Missing 'source' key");var u=r.isFunction(n.source)?n.source:function(t){return t[n.source]};if(!n.index)return r.error("Missing 'index' key");var c=n.index;return s=s||{},function(a,l){t.search(a,e,(function(t,a){if(t)r.error(t.message);else{if(a.hits.length>0){var h=a.hits[0],p=r.mixin({hitsPerPage:0},n);delete p.source,delete p.index;var f=o(c.as._ua);return f&&f[0]>=3&&f[1]>20&&(e.additionalUA="autocomplete.js "+i),void c.search(u(h),p,(function(t,e){if(t)r.error(t.message);else{var n=[];if(s.includeAll){var i=s.allTitle||"All departments";n.push(r.mixin({facet:{value:i,count:e.nbHits}},r.cloneDeep(h)))}r.each(e.facets,(function(t,e){r.each(t,(function(t,i){n.push(r.mixin({facet:{facet:e,value:i,count:t}},r.cloneDeep(h)))}))}));for(var o=1;o<a.hits.length;++o)n.push(a.hits[o]);l(n,a)}}))}l([])}}))}}},uyml:function(t,e,n){"use strict";var r=n("0Ul8"),i=n("P5ON");t.exports=i(r,"Browser (lite)")},v61W:function(t,e){var n=Object.prototype.hasOwnProperty,r=Object.prototype.toString;t.exports=function(t,e,i){if("[object Function]"!==r.call(e))throw new TypeError("iterator must be a function");var o=t.length;if(o===+o)for(var s=0;s<o;s++)e.call(i,t[s],s,t);else for(var a in t)n.call(t,a)&&e.call(i,t[a],a,t)}},vgmO:function(t,e,n){(function(e){var n;n="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},t.exports=n}).call(this,n("yLpj"))},x0Qz:function(t,e){t.exports="0.36.0"},xCN5:function(t,e,n){"use strict";t.exports=n("ZoZZ")},zVWv:function(t,e,n){"use strict";(function(t){e.test=function(){return!t.setImmediate&&void 0!==t.MessageChannel},e.install=function(e){var n=new t.MessageChannel;return n.port1.onmessage=e,function(){n.port2.postMessage(0)}}}).call(this,n("yLpj"))}}]);
\ No newline at end of file
diff --git a/assets/3.284c81ab.css b/assets/3.284c81ab.css
new file mode 100644
index 000000000..6c4cc804c
--- /dev/null
+++ b/assets/3.284c81ab.css
@@ -0,0 +1 @@
+:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.off-canvas-menu{width:300px;height:100%;z-index:1000;overflow-y:auto;overflow-x:hidden;outline:none}.off-canvas-menu[aria-hidden=false]{pointer-events:auto}.off-canvas-menu__content{position:absolute;right:0;width:285px;height:100%;overflow-y:auto;overflow-x:hidden;background:#f9f9f8;background:var(--color-background-lightest);-webkit-box-shadow:0 0 15px rgba(0,0,0,.33);box-shadow:0 0 15px rgba(0,0,0,.33);-webkit-overflow-scrolling:touch;-webkit-transition:all .35s cubic-bezier(.23,1,.32,1);-o-transition:all .35s cubic-bezier(.23,1,.32,1);transition:all .35s cubic-bezier(.23,1,.32,1)}.off-canvas-menu[aria-hidden=false] .off-canvas-menu__content{-webkit-transform:translateZ(0);transform:translateZ(0)}.off-canvas-menu__close{-webkit-appearance:none;background:none;border:0;margin:0;padding:0;text-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;position:absolute;right:0;top:0;width:48px;height:48px;z-index:1001;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;color:#584b4f;color:var(--color-base);font-size:20px}.off-canvas-menu__close:hover{color:#40a977;color:var(--color-green)}.off-canvas-menu__section{padding:8px 0;border-top:1px solid #eae8e3;border-top:1px solid var(--color-background-light)}.off-canvas-menu__list{margin:0;padding:0;list-style:none}.off-canvas-menu__link{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;text-decoration:none;padding:8px 16px;font-size:.9rem;line-height:1;color:#584b4f;color:var(--color-base)}.off-canvas-menu__link:hover{color:#40a977;color:var(--color-green);text-decoration:none}.off-canvas-menu__version{display:inline-block;line-height:1;padding:.25rem;border-radius:4px;border:1px solid #d6d1c8;border:1px solid var(--color-background);color:#afa1a5;color:var(--color-base-light);font-size:.65rem;text-decoration:none}.off-canvas-menu__link:hover .off-canvas-menu__version{border-color:#40a977;border-color:var(--color-green);color:#40a977;color:var(--color-green)}.off-canvas-menu__section-header,.off-canvas-menu__section-top{text-transform:uppercase;letter-spacing:.1rem;color:#afa1a5;color:var(--color-base-light);padding:8px 16px 16px;margin:0;font-weight:700;font-size:.9rem!important}.off-canvas-menu__section-top{display:block;color:#584b4f;color:var(--color-base);padding:8px 16px;font-size:.9rem;line-height:1rem;text-decoration:none}.off-canvas-menu__section-top:hover{color:#40a977;color:var(--color-green);text-decoration:none}
\ No newline at end of file
diff --git a/assets/3.ca2827c9.js b/assets/3.ca2827c9.js
new file mode 100644
index 000000000..70770b6dc
--- /dev/null
+++ b/assets/3.ca2827c9.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{"8wwn":function(t,e,n){"use strict";n.d(e,"a",(function(){return l}));var r=n("B0X1"),o={selector:"[data-ctrly]",context:null,focusTarget:!0,closeOnBlur:!0,closeOnEsc:!0,closeOnOutsideClick:!0,closeOnScroll:!1,trapFocus:!1,allowMultiple:!1,on:null,autoInit:!0};function i(t){return"which"in t?t.which:t.keyCode}function a(t){return Object(r.e)('[aria-controls="'.concat(t.id,'"]'))}function c(t){return document.getElementById(t.getAttribute("aria-controls")||t.getAttribute("data-ctrly"))}function u(t){t.removeAttribute("aria-pressed"),t.removeAttribute("aria-controls"),t.removeAttribute("aria-expanded")}var s=0;function l(){var t,e,n=function(t){var e={};return[o,t].forEach((function(t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})),e}(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),l=n.selector,f=n.on||{},b={};function d(t,e){return("function"!=typeof f[e]||!1!==f[e](t))&&!1!==Object(r.d)(t,"ctrly:".concat(e),{bubbles:!0,cancelable:!0})}function p(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!t)return!1;if(!t.hasAttribute("data-ctrly-opened"))return!1;if(!d(t,"close"))return!1;var n=Object(r.a)(),o=b[t.id]||{},i=o.lastActiveElement,c=o.destroy;return delete b[t.id],c&&c(),a(t).forEach((function(t){"button"!==t.tagName.toLowerCase()&&t.setAttribute("aria-pressed","false"),t.setAttribute("aria-expanded","false")})),t.removeAttribute("data-ctrly-opened"),t.setAttribute("aria-hidden","true"),t.removeAttribute("tabindex"),t.blur(),e&&i&&t.contains(n)&&Object(r.f)(i,{restoreScrollPosition:!0}),d(t,"closed"),t}function h(t){var e;Object(r.e)(l,(e=t,n.context?Object(r.b)(e,n.context):document)).forEach((function(e){var n=c(e);n&&n.id!==t.id&&p(n,!1)}))}function v(t,e){var o=[];if(n.closeOnBlur&&!n.trapFocus&&o.push(Object(r.h)(document,"focusin",(function(t){e.contains(t.target)||setTimeout((function(){p(e,!1)}),0)}),{capture:!0,passive:!0})),n.closeOnEsc&&o.push(Object(r.h)(document,"keydown",(function(t){27===i(t)&&p(e)&&t.preventDefault()}))),n.closeOnOutsideClick&&o.push(Object(r.h)(document,"click",(function(t){1!==i(t)||e.contains(t.target)||Object(r.b)(t.target,l)||p(e)}),{passive:!0})),n.closeOnScroll){var a=!1,c=function(){a=!0},u=function(){a=!1};o.push(Object(r.h)(e,"mouseenter",c,{passive:!0})),o.push(Object(r.h)(e,"mouseleave",u,{passive:!0})),o.push(Object(r.h)(e,"touchstart",c,{passive:!0})),o.push(Object(r.h)(e,"touchend",u,{passive:!0})),o.push(Object(r.h)(window,"scroll",(function(){a||p(e)}),{passive:!0}))}return n.trapFocus&&o.push(Object(r.h)(document,"keydown",(function(t){if(9===i(t)){var n=Object(r.j)(e);if(!n[0])return t.preventDefault(),void Object(r.f)(e);var o=Object(r.a)(),a=n[0],c=n[n.length-1];if(t.shiftKey&&o===a)return t.preventDefault(),void Object(r.f)(c);t.shiftKey||o!==c||(Object(r.f)(a),t.preventDefault())}}))),function(){for(;o.length;)o.shift().call()}}function O(t){var e=c(t);return e?!e.hasAttribute("data-ctrly-opened")&&(!!d(e,"open")&&(b[e.id]={lastActiveElement:Object(r.a)(),destroy:v(0,e)},a(e).forEach((function(t){"button"!==t.tagName.toLowerCase()&&t.setAttribute("aria-pressed","true"),t.setAttribute("aria-expanded","true")})),e.setAttribute("data-ctrly-opened",""),e.setAttribute("aria-hidden","false"),e.setAttribute("tabindex","-1"),d(e,"opened"),e)):(u(t),!1)}function A(t,e){var o=c(e);o?"true"!==e.getAttribute("aria-expanded")?(n.allowMultiple||h(o),O(e),o&&(t.preventDefault(),n.focusTarget&&Object(r.f)(Object(r.j)(o)[0]||o),o.scrollTop=0,o.scrollLeft=0)):p(o)&&t.preventDefault():p(function(t){for(var e=t;e;){if(e.id&&b[e.id])return e;e=e.parentElement}}(e))&&t.preventDefault()}function j(){t||(t=Object(r.c)(document,"click",l,(function(t,e){1===i(t)&&A(t,e)})),e=Object(r.c)(document,"keypress",l,(function(t,e){13!==i(t)&&32!==i(t)||A(t,e)}))),Object(r.e)(l).forEach((function(t){var e=c(t);if(e){"button"!==t.tagName.toLowerCase()&&(t.hasAttribute("role")||t.setAttribute("role","button"),Object(r.g)(t)||t.setAttribute("tabindex","0")),t.setAttribute("aria-controls",e.id);var n=a(e).map((function(t){return t.id||t.setAttribute("id","ctrly-control-"+ ++s),t.id})),o=(e.getAttribute("aria-labelledby")||"").split(" ").concat(n).filter((function(t,e,n){return""!==t&&n.indexOf(t)===e}));e.setAttribute("aria-labelledby",o.join(" ")),"true"===t.getAttribute("aria-expanded")||t.hasAttribute("data-ctrly-open")?O(t):("button"!==t.tagName.toLowerCase()&&t.setAttribute("aria-pressed","false"),t.setAttribute("aria-expanded","false"),e.setAttribute("aria-hidden","true"),e.removeAttribute("tabindex"))}else u(t)}))}function m(n){for(var o in n&&t&&(t(),t=null,e(),e=null),Object(r.e)(l).forEach((function(t){n&&u(t);var e=c(t);e&&(p(e,!1),n&&e.removeAttribute("aria-hidden"))})),b)Object.prototype.hasOwnProperty.call(b,o)&&(b[o].destroy(),delete b[o])}return n.autoInit&&Object(r.i)(j),{closeAll:function(){m(!1)},destroy:function(){m(!0)},init:j}}},D93H:function(t,e,n){"use strict";n.r(e);var r=n("8wwn");n("UeAh");Object(r.a)({selector:"[data-off-canvas-menu-control]",closeOnScroll:!0})},UeAh:function(t,e,n){}}]);
\ No newline at end of file
diff --git a/assets/4.7d534a7e.js b/assets/4.7d534a7e.js
new file mode 100644
index 000000000..539c7b836
--- /dev/null
+++ b/assets/4.7d534a7e.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{"6dos":function(t,e,n){},"8wwn":function(t,e,n){"use strict";n.d(e,"a",(function(){return l}));var r=n("B0X1"),o={selector:"[data-ctrly]",context:null,focusTarget:!0,closeOnBlur:!0,closeOnEsc:!0,closeOnOutsideClick:!0,closeOnScroll:!1,trapFocus:!1,allowMultiple:!1,on:null,autoInit:!0};function i(t){return"which"in t?t.which:t.keyCode}function a(t){return Object(r.e)('[aria-controls="'.concat(t.id,'"]'))}function c(t){return document.getElementById(t.getAttribute("aria-controls")||t.getAttribute("data-ctrly"))}function u(t){t.removeAttribute("aria-pressed"),t.removeAttribute("aria-controls"),t.removeAttribute("aria-expanded")}var s=0;function l(){var t,e,n=function(t){var e={};return[o,t].forEach((function(t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})),e}(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),l=n.selector,d=n.on||{},f={};function b(t,e){return("function"!=typeof d[e]||!1!==d[e](t))&&!1!==Object(r.d)(t,"ctrly:".concat(e),{bubbles:!0,cancelable:!0})}function p(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!t)return!1;if(!t.hasAttribute("data-ctrly-opened"))return!1;if(!b(t,"close"))return!1;var n=Object(r.a)(),o=f[t.id]||{},i=o.lastActiveElement,c=o.destroy;return delete f[t.id],c&&c(),a(t).forEach((function(t){"button"!==t.tagName.toLowerCase()&&t.setAttribute("aria-pressed","false"),t.setAttribute("aria-expanded","false")})),t.removeAttribute("data-ctrly-opened"),t.setAttribute("aria-hidden","true"),t.removeAttribute("tabindex"),t.blur(),e&&i&&t.contains(n)&&Object(r.f)(i,{restoreScrollPosition:!0}),b(t,"closed"),t}function v(t){var e;Object(r.e)(l,(e=t,n.context?Object(r.b)(e,n.context):document)).forEach((function(e){var n=c(e);n&&n.id!==t.id&&p(n,!1)}))}function h(t,e){var o=[];if(n.closeOnBlur&&!n.trapFocus&&o.push(Object(r.h)(document,"focusin",(function(t){e.contains(t.target)||setTimeout((function(){p(e,!1)}),0)}),{capture:!0,passive:!0})),n.closeOnEsc&&o.push(Object(r.h)(document,"keydown",(function(t){27===i(t)&&p(e)&&t.preventDefault()}))),n.closeOnOutsideClick&&o.push(Object(r.h)(document,"click",(function(t){1!==i(t)||e.contains(t.target)||Object(r.b)(t.target,l)||p(e)}),{passive:!0})),n.closeOnScroll){var a=!1,c=function(){a=!0},u=function(){a=!1};o.push(Object(r.h)(e,"mouseenter",c,{passive:!0})),o.push(Object(r.h)(e,"mouseleave",u,{passive:!0})),o.push(Object(r.h)(e,"touchstart",c,{passive:!0})),o.push(Object(r.h)(e,"touchend",u,{passive:!0})),o.push(Object(r.h)(window,"scroll",(function(){a||p(e)}),{passive:!0}))}return n.trapFocus&&o.push(Object(r.h)(document,"keydown",(function(t){if(9===i(t)){var n=Object(r.j)(e);if(!n[0])return t.preventDefault(),void Object(r.f)(e);var o=Object(r.a)(),a=n[0],c=n[n.length-1];if(t.shiftKey&&o===a)return t.preventDefault(),void Object(r.f)(c);t.shiftKey||o!==c||(Object(r.f)(a),t.preventDefault())}}))),function(){for(;o.length;)o.shift().call()}}function O(t){var e=c(t);return e?!e.hasAttribute("data-ctrly-opened")&&(!!b(e,"open")&&(f[e.id]={lastActiveElement:Object(r.a)(),destroy:h(0,e)},a(e).forEach((function(t){"button"!==t.tagName.toLowerCase()&&t.setAttribute("aria-pressed","true"),t.setAttribute("aria-expanded","true")})),e.setAttribute("data-ctrly-opened",""),e.setAttribute("aria-hidden","false"),e.setAttribute("tabindex","-1"),b(e,"opened"),e)):(u(t),!1)}function j(t,e){var o=c(e);o?"true"!==e.getAttribute("aria-expanded")?(n.allowMultiple||v(o),O(e),o&&(t.preventDefault(),n.focusTarget&&Object(r.f)(Object(r.j)(o)[0]||o),o.scrollTop=0,o.scrollLeft=0)):p(o)&&t.preventDefault():p(function(t){for(var e=t;e;){if(e.id&&f[e.id])return e;e=e.parentElement}}(e))&&t.preventDefault()}function A(){t||(t=Object(r.c)(document,"click",l,(function(t,e){1===i(t)&&j(t,e)})),e=Object(r.c)(document,"keypress",l,(function(t,e){13!==i(t)&&32!==i(t)||j(t,e)}))),Object(r.e)(l).forEach((function(t){var e=c(t);if(e){"button"!==t.tagName.toLowerCase()&&(t.hasAttribute("role")||t.setAttribute("role","button"),Object(r.g)(t)||t.setAttribute("tabindex","0")),t.setAttribute("aria-controls",e.id);var n=a(e).map((function(t){return t.id||t.setAttribute("id","ctrly-control-"+ ++s),t.id})),o=(e.getAttribute("aria-labelledby")||"").split(" ").concat(n).filter((function(t,e,n){return""!==t&&n.indexOf(t)===e}));e.setAttribute("aria-labelledby",o.join(" ")),"true"===t.getAttribute("aria-expanded")||t.hasAttribute("data-ctrly-open")?O(t):("button"!==t.tagName.toLowerCase()&&t.setAttribute("aria-pressed","false"),t.setAttribute("aria-expanded","false"),e.setAttribute("aria-hidden","true"),e.removeAttribute("tabindex"))}else u(t)}))}function m(n){for(var o in n&&t&&(t(),t=null,e(),e=null),Object(r.e)(l).forEach((function(t){n&&u(t);var e=c(t);e&&(p(e,!1),n&&e.removeAttribute("aria-hidden"))})),f)Object.prototype.hasOwnProperty.call(f,o)&&(f[o].destroy(),delete f[o])}return n.autoInit&&Object(r.i)(A),{closeAll:function(){m(!1)},destroy:function(){m(!0)},init:A}}},Bfv6:function(t,e,n){"use strict";n.r(e);var r=n("8wwn");n("6dos");Object(r.a)({selector:"[data-version-selector-control]"})}}]);
\ No newline at end of file
diff --git a/assets/4.87863994.css b/assets/4.87863994.css
new file mode 100644
index 000000000..65aa3b81d
--- /dev/null
+++ b/assets/4.87863994.css
@@ -0,0 +1 @@
+:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector__button[aria-expanded=true]{z-index:999;background:#584b4f!important;background:var(--color-base)!important;border-bottom-left-radius:0;border-bottom-right-radius:0;-webkit-box-shadow:none;box-shadow:none}.version-selector__button[aria-expanded=true] [class=icon-chevron-down]{display:none}.version-selector__button[aria-expanded=true] [class=icon-chevron-up]{display:inline-block}.version-selector__panel{z-index:998;left:-115px;background:#584b4f;background:var(--color-base);padding:1rem;width:300px;border-radius:4px;outline:none;-webkit-box-shadow:0 0 8px rgba(0,0,0,.33);box-shadow:0 0 8px rgba(0,0,0,.33);font-weight:400}.version-selector__panel[aria-hidden=false]{position:absolute;visibility:visible;top:auto}.version-selector__list{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.version-selector__list li{margin:4px;width:calc(25% - 8px)}.version-selector__list a{display:block;text-align:center}
\ No newline at end of file
diff --git a/assets/5.99f8f23a.js b/assets/5.99f8f23a.js
new file mode 100644
index 000000000..161cd371f
--- /dev/null
+++ b/assets/5.99f8f23a.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{"+kLL":function(t,e,i){"use strict";i.r(e),i.d(e,"init",(function(){return d}));var n=i("UjO/"),a=i.n(n),c=(i("0eY7"),0);function d(t){var e=t.getAttribute("id");e||(e="docsearch-"+c++,t.setAttribute("id",e)),a()({apiKey:"4c440463ddff54a35b4d7dc24afb010b",indexName:"reactphp",inputSelector:"#"+e,debug:"true"===t.getAttribute("data-docsearch-debug"),algoliaOptions:{hitsPerPage:5}})}},"0eY7":function(t,e,i){}}]);
\ No newline at end of file
diff --git a/assets/5.ef18ddd4.css b/assets/5.ef18ddd4.css
new file mode 100644
index 000000000..3c478646f
--- /dev/null
+++ b/assets/5.ef18ddd4.css
@@ -0,0 +1 @@
+.algolia-autocomplete{display:block;width:100%;height:100%}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{right:0!important;left:inherit!important}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu:before{right:48px}.algolia-autocomplete.algolia-autocomplete-left .ds-dropdown-menu{left:0!important;right:inherit!important}.algolia-autocomplete.algolia-autocomplete-left .ds-dropdown-menu:before{left:48px}.algolia-autocomplete .ds-dropdown-menu{top:-6px;border-radius:4px;margin:6px 0 0;padding:0;text-align:left;height:auto;position:relative;background:transparent;border:none;z-index:999;max-width:600px;min-width:500px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.2),0 2px 3px 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.2),0 2px 3px 0 rgba(0,0,0,.1)}.algolia-autocomplete .ds-dropdown-menu:before{display:block;position:absolute;content:"";width:14px;height:14px;background:#fff;z-index:1000;top:-7px;border-top:1px solid #d9d9d9;border-right:1px solid #d9d9d9;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);border-radius:2px}.algolia-autocomplete .ds-dropdown-menu .ds-suggestions{position:relative;z-index:1000;margin-top:8px}.algolia-autocomplete .ds-dropdown-menu .ds-suggestion{cursor:pointer}.algolia-autocomplete .ds-dropdown-menu .ds-suggestion.ds-cursor .algolia-docsearch-suggestion.suggestion-layout-simple,.algolia-autocomplete .ds-dropdown-menu .ds-suggestion.ds-cursor .algolia-docsearch-suggestion:not(.suggestion-layout-simple) .algolia-docsearch-suggestion--content{background-color:rgba(69,142,225,.05)}.algolia-autocomplete .ds-dropdown-menu [class^=ds-dataset-]{position:relative;border:1px solid #d9d9d9;background:#fff;border-radius:4px;overflow:auto;padding:0 8px 8px}.algolia-autocomplete .ds-dropdown-menu *{-webkit-box-sizing:border-box;box-sizing:border-box}.algolia-autocomplete .algolia-docsearch-suggestion{position:relative;padding:0 8px;background:#fff;color:#02060c;overflow:hidden}.algolia-autocomplete .algolia-docsearch-suggestion--highlight{color:#174d8c;background:rgba(143,187,237,.1);padding:.1em .05em}.algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl0 .algolia-docsearch-suggestion--highlight,.algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl1 .algolia-docsearch-suggestion--highlight{color:inherit;background:inherit}.algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{padding:0 0 1px;background:inherit;-webkit-box-shadow:inset 0 -2px 0 0 rgba(69,142,225,.8);box-shadow:inset 0 -2px 0 0 rgba(69,142,225,.8);color:inherit}.algolia-autocomplete .algolia-docsearch-suggestion--content{display:block;float:right;width:70%;position:relative;padding:5.33333px 0 5.33333px 10.66667px;cursor:pointer}.algolia-autocomplete .algolia-docsearch-suggestion--content:before{content:"";position:absolute;display:block;top:0;height:100%;width:1px;background:#ddd;left:-1px}.algolia-autocomplete .algolia-docsearch-suggestion--category-header{position:relative;border-bottom:1px solid #ddd;display:none;margin-top:8px;padding:4px 0;font-size:1em;color:#33363d}.algolia-autocomplete .algolia-docsearch-suggestion--wrapper{width:100%;float:left;padding:8px 0 0}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column{float:left;width:30%;display:none;text-align:right;position:relative;padding:5.33333px 10.66667px;color:#a4a7ae;font-size:.9em;word-wrap:break-word}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column:before{content:"";position:absolute;display:block;top:0;height:100%;width:1px;background:#ddd;right:0}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column .algolia-docsearch-suggestion--highlight{background-color:inherit;color:inherit}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-inline{display:none}.algolia-autocomplete .algolia-docsearch-suggestion--title{margin-bottom:4px;color:#02060c;font-size:.9em;font-weight:700}.algolia-autocomplete .algolia-docsearch-suggestion--text{display:block;line-height:1.2em;font-size:.85em;color:#63676d}.algolia-autocomplete .algolia-docsearch-suggestion--no-results{width:100%;padding:8px 0;text-align:center;font-size:1.2em}.algolia-autocomplete .algolia-docsearch-suggestion--no-results:before{display:none}.algolia-autocomplete .algolia-docsearch-suggestion code{padding:1px 5px;font-size:90%;border:none;color:#222;background-color:#ebebeb;border-radius:3px;font-family:Menlo,Monaco,Consolas,Courier New,monospace}.algolia-autocomplete .algolia-docsearch-suggestion code .algolia-docsearch-suggestion--highlight{background:none}.algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__main .algolia-docsearch-suggestion--category-header,.algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__secondary .algolia-docsearch-suggestion--subcategory-column{display:block}.algolia-autocomplete .suggestion-layout-simple.algolia-docsearch-suggestion{border-bottom:1px solid #eee;padding:8px;margin:0}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--content{width:100%;padding:0}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--content:before{display:none}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header{margin:0;padding:0;display:block;width:100%;border:none}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl0,.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl1{opacity:.6;font-size:.85em}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl1:before{background-image:url('data:image/svg+xml;utf8,<svg width="10" height="10" viewBox="0 0 20 38" xmlns="http://www.w3.org/2000/svg"><path d="M1.49 4.31l14 16.126.002-2.624-14 16.074-1.314 1.51 3.017 2.626 1.313-1.508 14-16.075 1.142-1.313-1.14-1.313-14-16.125L3.2.18.18 2.8l1.31 1.51z" fill-rule="evenodd" fill="%231D3657" /></svg>');content:"";width:10px;height:10px;display:inline-block}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--wrapper{width:100%;float:left;margin:0;padding:0}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--duplicate-content,.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--subcategory-column,.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--subcategory-inline{display:none!important}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--title{margin:0;color:#458ee1;font-size:.9em;font-weight:400}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--title:before{content:"#";font-weight:700;color:#458ee1;display:inline-block}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--text{margin:4px 0 0;display:block;line-height:1.4em;padding:5.33333px 8px;background:#f8f8f8;font-size:.85em;opacity:.8}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{color:#3f4145;font-weight:700;-webkit-box-shadow:none;box-shadow:none}.algolia-autocomplete .algolia-docsearch-footer{width:110px;height:20px;z-index:2000;margin-top:10.66667px;float:right;font-size:0;line-height:0}.algolia-autocomplete .algolia-docsearch-footer--logo{background-image:url("data:image/svg+xml;utf8,<svg viewBox='0 0 130 18' xmlns='http://www.w3.org/2000/svg'><defs><linearGradient x1='-36.868%' y1='134.936%' x2='129.432%' y2='-27.7%' id='a'><stop stop-color='%2300AEFF' offset='0%'/><stop stop-color='%233369E7' offset='100%'/></linearGradient></defs><g fill='none' fill-rule='evenodd'><path d='M59.399.022h13.299a2.372 2.372 0 0 1 2.377 2.364V15.62a2.372 2.372 0 0 1-2.377 2.364H59.399a2.372 2.372 0 0 1-2.377-2.364V2.381A2.368 2.368 0 0 1 59.399.022z' fill='url(%23a)'/><path d='M66.257 4.56c-2.815 0-5.1 2.272-5.1 5.078 0 2.806 2.284 5.072 5.1 5.072 2.815 0 5.1-2.272 5.1-5.078 0-2.806-2.279-5.072-5.1-5.072zm0 8.652c-1.983 0-3.593-1.602-3.593-3.574 0-1.972 1.61-3.574 3.593-3.574 1.983 0 3.593 1.602 3.593 3.574a3.582 3.582 0 0 1-3.593 3.574zm0-6.418v2.664c0 .076.082.131.153.093l2.377-1.226c.055-.027.071-.093.044-.147a2.96 2.96 0 0 0-2.465-1.487c-.055 0-.11.044-.11.104l.001-.001zm-3.33-1.956l-.312-.311a.783.783 0 0 0-1.106 0l-.372.37a.773.773 0 0 0 0 1.101l.307.305c.049.049.121.038.164-.011.181-.245.378-.479.597-.697.225-.223.455-.42.707-.599.055-.033.06-.109.016-.158h-.001zm5.001-.806v-.616a.781.781 0 0 0-.783-.779h-1.824a.78.78 0 0 0-.783.779v.632c0 .071.066.12.137.104a5.736 5.736 0 0 1 1.588-.223c.52 0 1.035.071 1.534.207a.106.106 0 0 0 .131-.104z' fill='%23FFF'/><path d='M102.162 13.762c0 1.455-.372 2.517-1.123 3.193-.75.676-1.895 1.013-3.44 1.013-.564 0-1.736-.109-2.673-.316l.345-1.689c.783.163 1.819.207 2.361.207.86 0 1.473-.174 1.84-.523.367-.349.548-.866.548-1.553v-.349a6.374 6.374 0 0 1-.838.316 4.151 4.151 0 0 1-1.194.158 4.515 4.515 0 0 1-1.616-.278 3.385 3.385 0 0 1-1.254-.817 3.744 3.744 0 0 1-.811-1.351c-.192-.539-.29-1.504-.29-2.212 0-.665.104-1.498.307-2.054a3.925 3.925 0 0 1 .904-1.433 4.124 4.124 0 0 1 1.441-.926 5.31 5.31 0 0 1 1.945-.365c.696 0 1.337.087 1.961.191a15.86 15.86 0 0 1 1.588.332v8.456h-.001zm-5.954-4.206c0 .893.197 1.885.592 2.299.394.414.904.621 1.528.621.34 0 .663-.049.964-.142a2.75 2.75 0 0 0 .734-.332v-5.29a8.531 8.531 0 0 0-1.413-.18c-.778-.022-1.369.294-1.786.801-.411.507-.619 1.395-.619 2.223zm16.12 0c0 .719-.104 1.264-.318 1.858a4.389 4.389 0 0 1-.904 1.52c-.389.42-.854.746-1.402.975-.548.229-1.391.36-1.813.36-.422-.005-1.26-.125-1.802-.36a4.088 4.088 0 0 1-1.397-.975 4.486 4.486 0 0 1-.909-1.52 5.037 5.037 0 0 1-.329-1.858c0-.719.099-1.411.318-1.999.219-.588.526-1.09.92-1.509.394-.42.865-.741 1.402-.97a4.547 4.547 0 0 1 1.786-.338 4.69 4.69 0 0 1 1.791.338c.548.229 1.019.55 1.402.97.389.42.69.921.909 1.509.23.588.345 1.28.345 1.999h.001zm-2.191.005c0-.921-.203-1.689-.597-2.223-.394-.539-.948-.806-1.654-.806-.707 0-1.26.267-1.654.806-.394.539-.586 1.302-.586 2.223 0 .932.197 1.558.592 2.098.394.545.948.812 1.654.812.707 0 1.26-.272 1.654-.812.394-.545.592-1.166.592-2.098h-.001zm6.962 4.707c-3.511.016-3.511-2.822-3.511-3.274L113.583.926l2.142-.338v10.003c0 .256 0 1.88 1.375 1.885v1.792h-.001zm3.774 0h-2.153V5.072l2.153-.338v9.534zm-1.079-10.542c.718 0 1.304-.578 1.304-1.291 0-.714-.581-1.291-1.304-1.291-.723 0-1.304.578-1.304 1.291 0 .714.586 1.291 1.304 1.291zm6.431 1.013c.707 0 1.304.087 1.786.262.482.174.871.42 1.156.73.285.311.488.735.608 1.182.126.447.186.937.186 1.476v5.481a25.24 25.24 0 0 1-1.495.251c-.668.098-1.419.147-2.251.147a6.829 6.829 0 0 1-1.517-.158 3.213 3.213 0 0 1-1.178-.507 2.455 2.455 0 0 1-.761-.904c-.181-.37-.274-.893-.274-1.438 0-.523.104-.855.307-1.215.208-.36.487-.654.838-.883a3.609 3.609 0 0 1 1.227-.49 7.073 7.073 0 0 1 2.202-.103c.263.027.537.076.833.147v-.349c0-.245-.027-.479-.088-.697a1.486 1.486 0 0 0-.307-.583c-.148-.169-.34-.3-.581-.392a2.536 2.536 0 0 0-.915-.163c-.493 0-.942.06-1.353.131-.411.071-.75.153-1.008.245l-.257-1.749c.268-.093.668-.185 1.183-.278a9.335 9.335 0 0 1 1.66-.142l-.001-.001zm.181 7.731c.657 0 1.145-.038 1.484-.104v-2.168a5.097 5.097 0 0 0-1.978-.104c-.241.033-.46.098-.652.191a1.167 1.167 0 0 0-.466.392c-.121.169-.175.267-.175.523 0 .501.175.79.493.981.323.196.75.289 1.293.289h.001zM84.109 4.794c.707 0 1.304.087 1.786.262.482.174.871.42 1.156.73.29.316.487.735.608 1.182.126.447.186.937.186 1.476v5.481a25.24 25.24 0 0 1-1.495.251c-.668.098-1.419.147-2.251.147a6.829 6.829 0 0 1-1.517-.158 3.213 3.213 0 0 1-1.178-.507 2.455 2.455 0 0 1-.761-.904c-.181-.37-.274-.893-.274-1.438 0-.523.104-.855.307-1.215.208-.36.487-.654.838-.883a3.609 3.609 0 0 1 1.227-.49 7.073 7.073 0 0 1 2.202-.103c.257.027.537.076.833.147v-.349c0-.245-.027-.479-.088-.697a1.486 1.486 0 0 0-.307-.583c-.148-.169-.34-.3-.581-.392a2.536 2.536 0 0 0-.915-.163c-.493 0-.942.06-1.353.131-.411.071-.75.153-1.008.245l-.257-1.749c.268-.093.668-.185 1.183-.278a8.89 8.89 0 0 1 1.66-.142l-.001-.001zm.186 7.736c.657 0 1.145-.038 1.484-.104v-2.168a5.097 5.097 0 0 0-1.978-.104c-.241.033-.46.098-.652.191a1.167 1.167 0 0 0-.466.392c-.121.169-.175.267-.175.523 0 .501.175.79.493.981.318.191.75.289 1.293.289h.001zm8.682 1.738c-3.511.016-3.511-2.822-3.511-3.274L89.461.926l2.142-.338v10.003c0 .256 0 1.88 1.375 1.885v1.792h-.001z' fill='%23182359'/><path d='M5.027 11.025c0 .698-.252 1.246-.757 1.644-.505.397-1.201.596-2.089.596-.888 0-1.615-.138-2.181-.414v-1.214c.358.168.739.301 1.141.397.403.097.778.145 1.125.145.508 0 .884-.097 1.125-.29a.945.945 0 0 0 .363-.779.978.978 0 0 0-.333-.747c-.222-.204-.68-.446-1.375-.725-.716-.29-1.221-.621-1.515-.994-.294-.372-.44-.82-.44-1.343 0-.655.233-1.171.698-1.547.466-.376 1.09-.564 1.875-.564.752 0 1.5.165 2.245.494l-.408 1.047c-.698-.294-1.321-.44-1.869-.44-.415 0-.73.09-.945.271a.89.89 0 0 0-.322.717c0 .204.043.379.129.524.086.145.227.282.424.411.197.129.551.299 1.063.51.577.24.999.464 1.268.671.269.208.466.442.591.704.125.261.188.569.188.924l-.001.002zm3.98 2.24c-.924 0-1.646-.269-2.167-.808-.521-.539-.782-1.281-.782-2.226 0-.97.242-1.733.725-2.288.483-.555 1.148-.833 1.993-.833.784 0 1.404.238 1.858.714.455.476.682 1.132.682 1.966v.682H7.357c.018.577.174 1.02.467 1.329.294.31.707.465 1.241.465.351 0 .678-.033.98-.099a5.1 5.1 0 0 0 .975-.33v1.026a3.865 3.865 0 0 1-.935.312 5.723 5.723 0 0 1-1.08.091l.002-.001zm-.231-5.199c-.401 0-.722.127-.964.381s-.386.625-.432 1.112h2.696c-.007-.491-.125-.862-.354-1.115-.229-.252-.544-.379-.945-.379l-.001.001zm7.692 5.092l-.252-.827h-.043c-.286.362-.575.608-.865.739-.29.131-.662.196-1.117.196-.584 0-1.039-.158-1.367-.473-.328-.315-.491-.761-.491-1.337 0-.612.227-1.074.682-1.386.455-.312 1.148-.482 2.079-.51l1.026-.032v-.317c0-.38-.089-.663-.266-.851-.177-.188-.452-.282-.824-.282-.304 0-.596.045-.876.134a6.68 6.68 0 0 0-.806.317l-.408-.902a4.414 4.414 0 0 1 1.058-.384 4.856 4.856 0 0 1 1.085-.132c.756 0 1.326.165 1.711.494.385.329.577.847.577 1.552v4.002h-.902l-.001-.001zm-1.88-.859c.458 0 .826-.128 1.104-.384.278-.256.416-.615.416-1.077v-.516l-.763.032c-.594.021-1.027.121-1.297.298s-.406.448-.406.814c0 .265.079.47.236.615.158.145.394.218.709.218h.001zm7.557-5.189c.254 0 .464.018.628.054l-.124 1.176a2.383 2.383 0 0 0-.559-.064c-.505 0-.914.165-1.227.494-.313.329-.47.757-.47 1.284v3.105h-1.262V7.218h.988l.167 1.047h.064c.197-.354.454-.636.771-.843a1.83 1.83 0 0 1 1.023-.312h.001zm4.125 6.155c-.899 0-1.582-.262-2.049-.787-.467-.525-.701-1.277-.701-2.259 0-.999.244-1.767.733-2.304.489-.537 1.195-.806 2.119-.806.627 0 1.191.116 1.692.349l-.381 1.015c-.534-.208-.974-.312-1.321-.312-1.028 0-1.542.682-1.542 2.046 0 .666.128 1.166.384 1.501.256.335.631.502 1.125.502a3.23 3.23 0 0 0 1.595-.419v1.101a2.53 2.53 0 0 1-.722.285 4.356 4.356 0 0 1-.932.086v.002zm8.277-.107h-1.268V9.506c0-.458-.092-.8-.277-1.026-.184-.226-.477-.338-.878-.338-.53 0-.919.158-1.168.475-.249.317-.373.848-.373 1.593v2.949h-1.262V4.801h1.262v2.122c0 .34-.021.704-.064 1.09h.081a1.76 1.76 0 0 1 .717-.666c.306-.158.663-.236 1.072-.236 1.439 0 2.159.725 2.159 2.175v3.873l-.001-.001zm7.649-6.048c.741 0 1.319.269 1.732.806.414.537.62 1.291.62 2.261 0 .974-.209 1.732-.628 2.275-.419.542-1.001.814-1.746.814-.752 0-1.336-.27-1.751-.811h-.086l-.231.704h-.945V4.801h1.262v1.987l-.021.655-.032.553h.054c.401-.591.992-.886 1.772-.886zm-.328 1.031c-.508 0-.875.149-1.098.448-.224.299-.339.799-.346 1.501v.086c0 .723.115 1.247.344 1.571.229.324.603.486 1.123.486.448 0 .787-.177 1.018-.532.231-.354.346-.867.346-1.536 0-1.35-.462-2.025-1.386-2.025l-.001.001zm3.244-.924h1.375l1.209 3.368c.183.48.304.931.365 1.354h.043c.032-.197.091-.436.177-.717.086-.281.541-1.616 1.364-4.004h1.364l-2.541 6.73c-.462 1.235-1.232 1.853-2.31 1.853-.279 0-.551-.03-.816-.091v-.999c.19.043.406.064.65.064.609 0 1.037-.353 1.284-1.058l.22-.559-2.385-5.941h.001z' fill='%231D3657'/></g></svg>");background-repeat:no-repeat;background-position:50%;background-size:100%;overflow:hidden;text-indent:-9000px;padding:0!important;width:100%;height:100%;display:block}
\ No newline at end of file
diff --git a/assets/icons.063d0ba7.ttf b/assets/icons.063d0ba7.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..d4204163286a0a79e2be579d41b755b7c03281d7
GIT binary patch
diff --git a/assets/icons.5ea4cc5c.woff b/assets/icons.5ea4cc5c.woff
new file mode 100644
index 0000000000000000000000000000000000000000..6844243300a444cacfd3763596a3b9e04767be38
GIT binary patch
diff --git a/assets/icons.d59afb7d.svg b/assets/icons.d59afb7d.svg
new file mode 100644
index 000000000..cd29330d7
--- /dev/null
+++ b/assets/icons.d59afb7d.svg
@@ -0,0 +1,25 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>Generated by IcoMoon</metadata>
+<defs>
+<font id="icons" horiz-adv-x="512">
+<font-face units-per-em="512" ascent="480" descent="-32" />
+<missing-glyph horiz-adv-x="512" />
+<glyph unicode="&#x20;" horiz-adv-x="256" d="" />
+<glyph unicode="&#xe900;" glyph-name="hash" horiz-adv-x="448" d="M448 288v64h-80.064l16 128h-64l-16-128h-127.968l16 128h-64l-16-128h-111.968v-64h103.968l-15.968-128h-88v-64h80l-16-128h64l16 128h127.968l-16-128h64.032l16 128h112v64h-104l15.936 128h88.064zM279.968 160h-127.968l15.968 128h127.968l-15.968-128z" />
+<glyph unicode="&#xe901;" glyph-name="twitter" d="M512 382.791c-18.838-8.354-39.082-14.001-60.33-16.54 21.686 13 38.343 33.585 46.186 58.115-20.298-12.039-42.778-20.78-66.705-25.49-19.16 20.415-46.461 33.17-76.673 33.17-58.011 0-105.044-47.029-105.044-105.039 0-8.233 0.929-16.25 2.72-23.939-87.3 4.382-164.701 46.2-216.509 109.753-9.042-15.514-14.223-33.558-14.223-52.809 0-36.444 18.544-68.596 46.73-87.433-17.219 0.546-33.416 5.271-47.577 13.139-0.010-0.438-0.010-0.878-0.010-1.321 0-50.894 36.209-93.348 84.261-103-8.813-2.4-18.094-3.686-27.674-3.686-6.769 0-13.349 0.66-19.764 1.886 13.368-41.73 52.16-72.103 98.126-72.948-35.95-28.175-81.243-44.967-130.458-44.967-8.479 0-16.84 0.497-25.058 1.47 46.486-29.805 101.701-47.197 161.021-47.197 193.211 0 298.868 160.062 298.868 298.872 0 4.554-0.103 9.084-0.305 13.59 20.528 14.81 38.336 33.31 52.418 54.374z" />
+<glyph unicode="&#xe902;" glyph-name="github" d="M256.004 473.679c-141.369 0-256.004-114.609-256.004-255.999 0-113.107 73.352-209.066 175.068-242.918 12.793-2.369 17.496 5.555 17.496 12.316 0 6.102-0.24 26.271-0.348 47.662-71.224-15.488-86.252 30.205-86.252 30.205-11.641 29.588-28.424 37.458-28.424 37.458-23.226 15.889 1.755 15.562 1.755 15.562 25.7-1.805 39.238-26.383 39.238-26.383 22.836-39.135 59.888-27.82 74.502-21.279 2.294 16.543 8.926 27.84 16.253 34.232-56.865 6.471-116.638 28.425-116.638 126.516 0 27.949 10.002 50.787 26.38 68.714-2.658 6.45-11.427 32.486 2.476 67.75 0 0 21.503 6.876 70.42-26.245 20.418 5.674 42.318 8.518 64.077 8.617 21.751-0.099 43.668-2.943 64.128-8.617 48.867 33.122 70.328 26.245 70.328 26.245 13.936-35.264 5.175-61.3 2.518-67.75 16.41-17.928 26.347-40.766 26.347-68.714 0-98.327-59.889-119.975-116.895-126.312 9.182-7.945 17.362-23.523 17.362-47.406 0-34.254-0.298-61.822-0.298-70.254 0-6.814 4.611-14.797 17.586-12.283 101.661 33.888 174.921 129.813 174.921 242.884 0 141.39-114.617 255.999-255.996 255.999z" />
+<glyph unicode="&#xe903;" glyph-name="earth" d="M256 480c-141.385 0-256-114.615-256-256s114.615-256 256-256 256 114.615 256 256-114.615 256-256 256zM256-0.001c-31.479 0-61.436 6.506-88.615 18.226l116.574 131.145c2.603 2.929 4.041 6.711 4.041 10.63v48c0 8.837-7.163 16-16 16-56.495 0-116.102 58.731-116.687 59.313-3 3.001-7.070 4.687-11.313 4.687h-64c-8.836 0-16-7.164-16-16v-96c0-6.061 3.424-11.601 8.845-14.311l55.155-27.578v-93.943c-58.026 40.478-96 107.716-96 183.832 0 34.357 7.745 66.903 21.569 96h58.431c4.244 0 8.313 1.686 11.314 4.686l64 64c3 3.001 4.686 7.070 4.686 11.314v38.706c20.281 6.037 41.759 9.294 64 9.294 35.203 0 68.502-8.13 98.141-22.6-2.072-1.751-4.088-3.582-6.023-5.518-18.133-18.132-28.118-42.239-28.118-67.882s9.985-49.75 28.118-67.882c18.217-18.216 42.609-28.132 67.817-28.13 1.583 0 3.171 0.040 4.759 0.118 6.907-25.901 19.376-93.328-4.202-186.167-0.222-0.872-0.348-1.744-0.421-2.612-40.662-41.54-97.35-67.328-160.071-67.328z" />
+<glyph unicode="&#xe904;" glyph-name="youtube" d="M416 416h-320c-52.8 0-96-43.2-96-96v-192c0-52.8 43.2-96 96-96h320c52.8 0 96 43.2 96 96v192c0 52.8-43.2 96-96 96zM192 96v256l160-128-160-128z" />
+<glyph unicode="&#xe905;" glyph-name="blog" d="M192 480v-48c36.741 0 72.356-7.185 105.858-21.355 32.384-13.697 61.479-33.316 86.474-58.312s44.614-54.090 58.312-86.474c14.171-33.502 21.356-69.119 21.356-105.859h48c0 176.73-143.27 320-320 320zM192 384v-48c47.011 0 91.209-18.307 124.45-51.549 33.243-33.242 51.55-77.439 51.55-124.451h48c0 123.711-100.288 224-224 224zM240 288l-32-32-112-32-96-208 12.687-12.687 116.402 116.402c-0.706 2.643-1.089 5.42-1.089 8.285 0 17.673 14.327 32 32 32s32-14.327 32-32-14.327-32-32-32c-2.866 0-5.641 0.382-8.284 1.089l-116.402-116.402 12.686-12.687 208 96 32 112 32 32-80 80z" />
+<glyph unicode="&#xe906;" glyph-name="link" d="M220.118 162.117c-6.655 0-13.308 2.538-18.385 7.615-47.567 47.568-47.567 124.967 0 172.535l96 96c23.044 23.043 53.68 35.733 86.267 35.733s63.224-12.69 86.268-35.732c47.566-47.568 47.566-124.967 0-172.535l-43.883-43.883c-10.154-10.154-26.615-10.154-36.77 0-10.153 10.153-10.153 26.616 0 36.77l43.883 43.883c27.292 27.293 27.292 71.702 0 98.995-13.221 13.221-30.8 20.502-49.498 20.502s-36.276-7.281-49.498-20.503l-96-95.999c-27.293-27.293-27.293-71.703 0-98.996 10.154-10.153 10.153-26.616 0-36.77-5.075-5.076-11.731-7.615-18.384-7.615zM128-26c-32.588 0-63.225 12.69-86.267 35.732-47.567 47.568-47.567 124.967 0 172.535l43.882 43.882c10.154 10.153 26.617 10.153 36.77 0 10.154-10.153 10.154-26.616 0-36.77l-43.882-43.882c-27.293-27.293-27.293-71.703 0-98.996 13.22-13.22 30.799-20.501 49.497-20.501s36.276 7.281 49.499 20.503l96 95.999c27.292 27.293 27.292 71.703 0 98.996-10.154 10.154-10.153 26.616 0 36.77s26.616 10.153 36.77-0.001c47.566-47.567 47.566-124.966 0.001-172.534l-96.001-96c-23.045-23.044-53.682-35.733-86.269-35.733z" />
+<glyph unicode="&#xea9b;" glyph-name="feed" d="M68.147 104.535c-37.598 0-68.146-30.667-68.146-68.038 0-37.577 30.55-67.901 68.146-67.901 37.733 0 68.247 30.324 68.247 67.901-0.001 37.371-30.512 68.038-68.247 68.038zM0.078 306.035v-98.129c63.892 0 123.979-24.986 169.229-70.256 45.192-45.159 70.141-105.518 70.141-169.65h98.561c-0.001 186.41-151.641 338.035-337.931 338.035zM0.194 480v-98.178c227.891 0 413.378-185.667 413.378-413.822h98.428c0 282.235-229.627 512-511.806 512z" />
+<glyph unicode="&#xf007;" glyph-name="book" d="M384 192h-64c-17 0-32-16-32-32h128c0 17-16 32-32 32zM356.5 400c-83.5 0-104.5-16-116.5-28-12 12-33 28-116.5 28s-123.5-23-123.5-39v-293c14.5 8 59.5 24 107 28 57.5 4.5 117-4.5 117-16 0-8 4-15.5 15.5-16 0 0 0 0 0.5 0 0 0 0 0 0.5 0 11.5 0.5 15.5 8 15.5 16 0 11.5 59.5 20.5 117 16 47-3.5 92.5-20 107-28v293c0 16-40 39-123.5 39zM224 114c-15 8-51.5 14-96 14s-85-6-96-13.5c0 0 0 205.5 0 221.5s32 29.5 96 29.5 96-13.5 96-29.5 0-222 0-222zM448 114.5c-11 7.5-51.5 13.5-96 13.5s-81-6-96-14c0 0 0 206 0 222s32 29.5 96 29.5 96-13.5 96-29.5 0-221.5 0-221.5zM384 256h-64c-17 0-32-16-32-32h128c0 17-16 32-32 32zM384 320h-64c-17 0-32-16-32-32h128c0 17-16 32-32 32zM160 256h-64c-16 0-32-15-32-32h128c0 16-15 32-32 32zM160 192h-64c-16 0-32-15-32-32h128c0 16-15 32-32 32zM160 320h-64c-16 0-32-15-32-32h128c0 16-15 32-32 32z" />
+<glyph unicode="&#xf02e;" glyph-name="search" horiz-adv-x="487" d="M480 64l-124.563 124.563c17.781 29.031 28.563 62.859 28.563 99.438 0 106.015-86 192-192 192-106.016 0-192-85.985-192-192 0-106 85.984-192 192-192 36.578 0 70.406 10.781 99.438 28.5l124.563-124.5c8.75-8.75 23.25-8.688 32 0l32 32c8.75 8.75 8.75 23.25 0 32zM192 160c-70.688 0-128 57.313-128 128s57.313 128 128 128 128-57.313 128-128-57.313-128-128-128z" />
+<glyph unicode="&#xf068;" glyph-name="calendar" d="M352 224h-32v-64h32v64zM288 224h-32v-64h32v64zM352 320h-32v-64h32v64zM416 224h-32v-64h32v64zM288 128h-32v-64h32v64zM384 480h-32v-64h32v64zM128 480h-32v-64h32v64zM416 320h-32v-64h32v64zM288 320h-32v-64h32v64zM160 128h-32v-64h32v64zM96 224h-32v-64h32v64zM160 224h-32v-64h32v64zM416 448v-64h-96v64h-160v-64h-96v64h-64v-448h480v448h-64zM448 32h-416v320h416v-320zM96 128h-32v-64h32v64zM224 320h-32v-64h32v64zM224 128h-32v-64h32v64zM160 320h-32v-64h32v64zM224 224h-32v-64h32v64zM352 128h-32v-64h32v64z" />
+<glyph unicode="&#xf081;" glyph-name="x" horiz-adv-x="320" d="M320 320l-64 64-96-96-96 96-64-64 96-96-96-96 64-64 96 96 96-96 64 64-96 96 96 96z" />
+<glyph unicode="&#xf0a2;" glyph-name="chevron-up" horiz-adv-x="320" d="M160 352l-160-160 64-64 96 96 96-96 64 64-160 160z" />
+<glyph unicode="&#xf0a3;" glyph-name="chevron-down" horiz-adv-x="320" d="M256 320l-96-96-96 96-64-64 160-160 160 160-64 64z" />
+<glyph unicode="&#xf0d8;" glyph-name="law" d="M257 384c17 0.5 30.5 14 31 31 0.5 18.5-14.5 33.5-33 33-17-0.5-30.5-14-31-31-0.5-18.5 14.5-33.5 33-33zM489 192h-9l-63.5 123c9 1 18 4.5 26 8 12 5.5 14.5 21.5 5.5 31l-0.5 0.5c-5.5 5.5-14 7.5-21.5 4-7-3-17-6.5-26.5-6.5-28 0-40.5 32-143.5 32s-115.5-32-143.5-32c-10 0-19.5 3-26.5 6.5-7.5 3-16 1.5-21.5-4l-0.5-0.5c-9-9.5-6.5-25 5.5-31 8-4 17-7 26-8l-63.5-123h-9c-4 0-7-3.5-6.5-7.5 5.5-32 46-56.5 95.5-56.5s90 24.5 95.5 56.5c0.5 4-2.5 7.5-6.5 7.5h-9l-63.5 122.5c41.5 3.5 63.5 24.5 95.5 24.5v-243c-17.5 0-32-14.5-32-32h-35.5c-14 0-28.5-14.5-28.5-32h256c0 17.5-14.5 32-35.5 32h-28.5c0 17.5-14.5 32-32 32v243c32 0 54-21 95.5-24.5l-63.5-122.5h-9c-4 0-7-3.5-6.5-7.5 5.5-32 46-56.5 95.5-56.5s90 24.5 95.5 56.5c0.5 4-2.5 7.5-6.5 7.5zM160 192h-96l48 90 48-90zM352 192l48 90 48-90h-96z" />
+</font></defs></svg>
\ No newline at end of file
diff --git a/assets/main.d691d407.js b/assets/main.d691d407.js
new file mode 100644
index 000000000..13741a7c9
--- /dev/null
+++ b/assets/main.d691d407.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{"+2oP":function(t,n,r){"use strict";var e=r("I+eb"),o=r("hh1v"),i=r("6LWA"),u=r("I8vh"),a=r("UMSQ"),c=r("/GqU"),f=r("hBjN"),s=r("Hd5f"),l=r("tiKp")("species"),h=[].slice,p=Math.max;e({target:"Array",proto:!0,forced:!s("slice")},{slice:function(t,n){var r,e,s,v=c(this),g=a(v.length),d=u(t,g),y=u(void 0===n?g:n,g);if(i(v)&&("function"!=typeof(r=v.constructor)||r!==Array&&!i(r.prototype)?o(r)&&null===(r=r[l])&&(r=void 0):r=void 0,r===Array||void 0===r))return h.call(v,d,y);for(e=new(void 0===r?Array:r)(p(y-d,0)),s=0;d<y;d++,s++)d in v&&f(e,s,v[d]);return e.length=s,e}})},"+M1K":function(t,n,r){var e=r("ppGB");t.exports=function(t){var n=e(t);if(n<0)throw RangeError("The argument can't be less than 0");return n}},"+MLx":function(t,n,r){var e=r("HAuM");t.exports=function(t,n,r){if(e(t),void 0===n)return t;switch(r){case 0:return function(){return t.call(n)};case 1:return function(r){return t.call(n,r)};case 2:return function(r,e){return t.call(n,r,e)};case 3:return function(r,e,o){return t.call(n,r,e,o)}}return function(){return t.apply(n,arguments)}}},"+ywr":function(t,n,r){r("dOgj")("Uint32",4,(function(t){return function(n,r,e){return t(this,n,r,e)}}))},"/5zm":function(t,n,r){var e=r("I+eb"),o=r("jrUv"),i=Math.cosh,u=Math.abs,a=Math.E;e({target:"Math",stat:!0,forced:!i||i(710)===1/0},{cosh:function(t){var n=o(u(t)-1)+1;return(n+1/(n*a*a))*(a/2)}})},"/GqU":function(t,n,r){var e=r("RK3t"),o=r("HYAF");t.exports=function(t){return e(o(t))}},"/Yfv":function(t,n,r){r("dOgj")("Int8",1,(function(t){return function(n,r,e){return t(this,n,r,e)}}))},"/byt":function(t,n){t.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},"/qmn":function(t,n,r){var e=r("2oRo");t.exports=e.Promise},0:function(t,n,r){r("ttgq"),t.exports=r("tFWo")},"07d7":function(t,n,r){var e=r("busE"),o=r("sEFX"),i=Object.prototype;o!==i.toString&&e(i,"toString",o,{unsafe:!0})},"0BK2":function(t,n){t.exports={}},"0Dky":function(t,n){t.exports=function(t){try{return!!t()}catch(t){return!0}}},"0GbY":function(t,n,r){var e=r("Qo9l"),o=r("2oRo"),i=function(t){return"function"==typeof t?t:void 0};t.exports=function(t,n){return arguments.length<2?i(e[t])||i(o[t]):e[t]&&e[t][n]||o[t]&&o[t][n]}},"0TkE":function(t,n,r){"use strict";var e=r("67WC"),o=r("tycR").find,i=e.aTypedArray;e.exportProto("find",(function(t){return o(i(this),t,arguments.length>1?arguments[1]:void 0)}))},"0eef":function(t,n,r){"use strict";var e={}.propertyIsEnumerable,o=Object.getOwnPropertyDescriptor,i=o&&!e.call({1:2},1);n.f=i?function(t){var n=o(this,t);return!!n&&n.enumerable}:e},"0oug":function(t,n,r){r("dG/n")("iterator")},"0rvr":function(t,n,r){var e=r("glrk"),o=r("O741");t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var t,n=!1,r={};try{(t=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(r,[]),n=r instanceof Array}catch(t){}return function(r,i){return e(r),o(i),n?t.call(r,i):r.__proto__=i,r}}():void 0)},"14Sl":function(t,n,r){"use strict";var e=r("kRJp"),o=r("busE"),i=r("0Dky"),u=r("tiKp"),a=r("kmMV"),c=u("species"),f=!i((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$<a>")})),s=!i((function(){var t=/(?:)/,n=t.exec;t.exec=function(){return n.apply(this,arguments)};var r="ab".split(t);return 2!==r.length||"a"!==r[0]||"b"!==r[1]}));t.exports=function(t,n,r,l){var h=u(t),p=!i((function(){var n={};return n[h]=function(){return 7},7!=""[t](n)})),v=p&&!i((function(){var n=!1,r=/a/;return"split"===t&&((r={}).constructor={},r.constructor[c]=function(){return r},r.flags="",r[h]=/./[h]),r.exec=function(){return n=!0,null},r[h](""),!n}));if(!p||!v||"replace"===t&&!f||"split"===t&&!s){var g=/./[h],d=r(h,""[t],(function(t,n,r,e,o){return n.exec===a?p&&!o?{done:!0,value:g.call(n,r,e)}:{done:!0,value:t.call(r,n,e)}:{done:!1}})),y=d[0],b=d[1];o(String.prototype,t,y),o(RegExp.prototype,h,2==n?function(t,n){return b.call(t,this,n)}:function(t){return b.call(t,this)}),l&&e(RegExp.prototype[h],"sham",!0)}}},"1E5z":function(t,n,r){var e=r("m/L8").f,o=r("UTVS"),i=r("tiKp")("toStringTag");t.exports=function(t,n,r){t&&!o(t=r?t:t.prototype,i)&&e(t,i,{configurable:!0,value:n})}},"1Y/n":function(t,n,r){var e=r("HAuM"),o=r("ewvW"),i=r("RK3t"),u=r("UMSQ"),a=function(t){return function(n,r,a,c){e(r);var f=o(n),s=i(f),l=u(f.length),h=t?l-1:0,p=t?-1:1;if(a<2)for(;;){if(h in s){c=s[h],h+=p;break}if(h+=p,t?h<0:l<=h)throw TypeError("Reduce of empty array with no initial value")}for(;t?h>=0:l>h;h+=p)h in s&&(c=r(c,s[h],h,f));return c}};t.exports={left:a(!1),right:a(!0)}},"1dYe":function(t,n,r){"use strict";var e=r("67WC"),o=r("tycR").forEach,i=e.aTypedArray;e.exportProto("forEach",(function(t){o(i(this),t,arguments.length>1?arguments[1]:void 0)}))},"1t3B":function(t,n,r){var e=r("I+eb"),o=r("0GbY"),i=r("glrk");e({target:"Reflect",stat:!0,sham:!r("uy83")},{preventExtensions:function(t){i(t);try{var n=o("Object","preventExtensions");return n&&n(t),!0}catch(t){return!1}}})},"25bX":function(t,n,r){var e=r("I+eb"),o=r("glrk"),i=Object.isExtensible;e({target:"Reflect",stat:!0},{isExtensible:function(t){return o(t),!i||i(t)}})},"27RR":function(t,n,r){var e=r("I+eb"),o=r("g6v/"),i=r("Vu81"),u=r("/GqU"),a=r("Bs8V"),c=r("hBjN");e({target:"Object",stat:!0,sham:!o},{getOwnPropertyDescriptors:function(t){for(var n,r,e=u(t),o=a.f,f=i(e),s={},l=0;f.length>l;)void 0!==(r=o(e,n=f[l++]))&&c(s,n,r);return s}})},"2A+d":function(t,n,r){var e=r("I+eb"),o=r("/GqU"),i=r("UMSQ");e({target:"String",stat:!0},{raw:function(t){for(var n=o(t.raw),r=i(n.length),e=arguments.length,u=[],a=0;r>a;)u.push(String(n[a++])),a<e&&u.push(String(arguments[a]));return u.join("")}})},"2B1R":function(t,n,r){"use strict";var e=r("I+eb"),o=r("tycR").map;e({target:"Array",proto:!0,forced:!r("Hd5f")("map")},{map:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}})},"2oRo":function(t,n,r){(function(n){function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var e=function(t){return t&&t.Math==Math&&t};t.exports=e("object"==("undefined"==typeof globalThis?"undefined":r(globalThis))&&globalThis)||e("object"==("undefined"==typeof window?"undefined":r(window))&&window)||e("object"==("undefined"==typeof self?"undefined":r(self))&&self)||e("object"==(void 0===n?"undefined":r(n))&&n)||Function("return this")()}).call(this,r("yLpj"))},"33Wh":function(t,n,r){var e=r("yoRg"),o=r("eDl+");t.exports=Object.keys||function(t){return e(t,o)}},"3I1R":function(t,n,r){r("dG/n")("hasInstance")},"3KgV":function(t,n,r){var e=r("I+eb"),o=r("uy83"),i=r("0Dky"),u=r("hh1v"),a=r("8YOa").onFreeze,c=Object.freeze;e({target:"Object",stat:!0,forced:i((function(){c(1)})),sham:!o},{freeze:function(t){return c&&u(t)?c(a(t)):t}})},"3bBZ":function(t,n,r){var e=r("2oRo"),o=r("/byt"),i=r("4mDm"),u=r("kRJp"),a=r("tiKp"),c=a("iterator"),f=a("toStringTag"),s=i.values;for(var l in o){var h=e[l],p=h&&h.prototype;if(p){if(p[c]!==s)try{u(p,c,s)}catch(t){p[c]=s}if(p[f]||u(p,f,l),o[l])for(var v in i)if(p[v]!==i[v])try{u(p,v,i[v])}catch(t){p[v]=i[v]}}}},"4Brf":function(t,n,r){"use strict";var e=r("I+eb"),o=r("g6v/"),i=r("2oRo"),u=r("UTVS"),a=r("hh1v"),c=r("m/L8").f,f=r("6JNq"),s=i.Symbol;if(o&&"function"==typeof s&&(!("description"in s.prototype)||void 0!==s().description)){var l={},h=function(){var t=arguments.length<1||void 0===arguments[0]?void 0:String(arguments[0]),n=this instanceof h?new s(t):void 0===t?s():s(t);return""===t&&(l[n]=!0),n};f(h,s);var p=h.prototype=s.prototype;p.constructor=h;var v=p.toString,g="Symbol(test)"==String(s("test")),d=/^Symbol\((.*)\)[^)]+$/;c(p,"description",{configurable:!0,get:function(){var t=a(this)?this.valueOf():this,n=v.call(t);if(u(l,t))return"";var r=g?n.slice(7,-1):n.replace(d,"$1");return""===r?void 0:r}}),e({global:!0,forced:!0},{Symbol:h})}},"4HCi":function(t,n,r){var e=r("0Dky"),o=r("WJkJ");t.exports=function(t){return e((function(){return!!o[t]()||"​᠎"!="​᠎"[t]()||o[t].name!==t}))}},"4WOD":function(t,n,r){var e=r("UTVS"),o=r("ewvW"),i=r("93I0"),u=r("4Xet"),a=i("IE_PROTO"),c=Object.prototype;t.exports=u?Object.getPrototypeOf:function(t){return t=o(t),e(t,a)?t[a]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?c:null}},"4Xet":function(t,n,r){var e=r("0Dky");t.exports=!e((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}))},"4h0Y":function(t,n,r){var e=r("I+eb"),o=r("0Dky"),i=r("hh1v"),u=Object.isFrozen;e({target:"Object",stat:!0,forced:o((function(){u(1)}))},{isFrozen:function(t){return!i(t)||!!u&&u(t)}})},"4l63":function(t,n,r){var e=r("I+eb"),o=r("5YOQ");e({global:!0,forced:parseInt!=o},{parseInt:o})},"4mDm":function(t,n,r){"use strict";var e=r("/GqU"),o=r("RNIs"),i=r("P4y1"),u=r("afO8"),a=r("fdAy"),c=u.set,f=u.getterFor("Array Iterator");t.exports=a(Array,"Array",(function(t,n){c(this,{type:"Array Iterator",target:e(t),index:0,kind:n})}),(function(){var t=f(this),n=t.target,r=t.kind,e=t.index++;return!n||e>=n.length?(t.target=void 0,{value:void 0,done:!0}):"keys"==r?{value:e,done:!1}:"values"==r?{value:n[e],done:!1}:{value:[e,n[e]],done:!1}}),"values"),i.Arguments=i.Array,o("keys"),o("values"),o("entries")},"4oU/":function(t,n,r){var e=r("2oRo").isFinite;t.exports=Number.isFinite||function(t){return"number"==typeof t&&e(t)}},"4syw":function(t,n,r){var e=r("busE");t.exports=function(t,n,r){for(var o in n)e(t,o,n[o],r);return t}},"5D5o":function(t,n,r){var e=r("I+eb"),o=r("0Dky"),i=r("hh1v"),u=Object.isSealed;e({target:"Object",stat:!0,forced:o((function(){u(1)}))},{isSealed:function(t){return!i(t)||!!u&&u(t)}})},"5DmW":function(t,n,r){var e=r("I+eb"),o=r("0Dky"),i=r("/GqU"),u=r("Bs8V").f,a=r("g6v/"),c=o((function(){u(1)}));e({target:"Object",stat:!0,forced:!a||c,sham:!a},{getOwnPropertyDescriptor:function(t,n){return u(i(t),n)}})},"5YOQ":function(t,n,r){var e=r("2oRo"),o=r("WKiH").trim,i=r("WJkJ"),u=e.parseInt,a=/^[+-]?0[Xx]/,c=8!==u(i+"08")||22!==u(i+"0x16");t.exports=c?function(t,n){var r=o(String(t));return u(r,n>>>0||(a.test(r)?16:10))}:u},"5Yz+":function(t,n,r){"use strict";var e=r("/GqU"),o=r("ppGB"),i=r("UMSQ"),u=r("swFL"),a=Math.min,c=[].lastIndexOf,f=!!c&&1/[1].lastIndexOf(1,-0)<0,s=u("lastIndexOf");t.exports=f||s?function(t){if(f)return c.apply(this,arguments)||0;var n=e(this),r=i(n.length),u=r-1;for(arguments.length>1&&(u=a(u,o(arguments[1]))),u<0&&(u=r+u);u>=0;u--)if(u in n&&n[u]===t)return u||0;return-1}:c},"5mdu":function(t,n){t.exports=function(t){try{return{error:!1,value:t()}}catch(t){return{error:!0,value:t}}}},"5s+n":function(t,n,r){"use strict";var e,o,i,u,a=r("I+eb"),c=r("xDBR"),f=r("2oRo"),s=r("0GbY"),l=r("/qmn"),h=r("busE"),p=r("4syw"),v=r("1E5z"),g=r("JiZb"),d=r("hh1v"),y=r("HAuM"),b=r("GarU"),m=r("xrYK"),x=r("ImZN"),S=r("HH4o"),w=r("SEBh"),I=r("LPSS").set,E=r("tXUg"),A=r("zfnd"),R=r("RN6c"),O=r("8GlL"),k=r("5mdu"),M=r("afO8"),T=r("lMq5"),L=r("tiKp"),j=r("YK6W"),U=L("species"),W="Promise",N=M.get,P=M.set,F=M.getterFor(W),D=l,B=f.TypeError,C=f.document,G=f.process,V=s("fetch"),Y=O.f,K=Y,q="process"==m(G),H=!!(C&&C.createEvent&&f.dispatchEvent),z=T(W,(function(){if(66===j)return!0;if(!q&&"function"!=typeof PromiseRejectionEvent)return!0;if(c&&!D.prototype.finally)return!0;if(j>=51&&/native code/.test(D))return!1;var t=D.resolve(1),n=function(t){t((function(){}),(function(){}))};return(t.constructor={})[U]=n,!(t.then((function(){}))instanceof n)})),_=z||!S((function(t){D.all(t).catch((function(){}))})),X=function(t){var n;return!(!d(t)||"function"!=typeof(n=t.then))&&n},J=function(t,n,r){if(!n.notified){n.notified=!0;var e=n.reactions;E((function(){for(var o=n.value,i=1==n.state,u=0;e.length>u;){var a,c,f,s=e[u++],l=i?s.ok:s.fail,h=s.resolve,p=s.reject,v=s.domain;try{l?(i||(2===n.rejection&&tt(t,n),n.rejection=1),!0===l?a=o:(v&&v.enter(),a=l(o),v&&(v.exit(),f=!0)),a===s.promise?p(B("Promise-chain cycle")):(c=X(a))?c.call(a,h,p):h(a)):p(o)}catch(t){v&&!f&&v.exit(),p(t)}}n.reactions=[],n.notified=!1,r&&!n.rejection&&Q(t,n)}))}},Z=function(t,n,r){var e,o;H?((e=C.createEvent("Event")).promise=n,e.reason=r,e.initEvent(t,!1,!0),f.dispatchEvent(e)):e={promise:n,reason:r},(o=f["on"+t])?o(e):"unhandledrejection"===t&&R("Unhandled promise rejection",r)},Q=function(t,n){I.call(f,(function(){var r,e=n.value;if($(n)&&(r=k((function(){q?G.emit("unhandledRejection",e,t):Z("unhandledrejection",t,e)})),n.rejection=q||$(n)?2:1,r.error))throw r.value}))},$=function(t){return 1!==t.rejection&&!t.parent},tt=function(t,n){I.call(f,(function(){q?G.emit("rejectionHandled",t):Z("rejectionhandled",t,n.value)}))},nt=function(t,n,r,e){return function(o){t(n,r,o,e)}},rt=function(t,n,r,e){n.done||(n.done=!0,e&&(n=e),n.value=r,n.state=2,J(t,n,!0))},et=function t(n,r,e,o){if(!r.done){r.done=!0,o&&(r=o);try{if(n===e)throw B("Promise can't be resolved itself");var i=X(e);i?E((function(){var o={done:!1};try{i.call(e,nt(t,n,o,r),nt(rt,n,o,r))}catch(t){rt(n,o,t,r)}})):(r.value=e,r.state=1,J(n,r,!1))}catch(t){rt(n,{done:!1},t,r)}}};z&&(D=function(t){b(this,D,W),y(t),e.call(this);var n=N(this);try{t(nt(et,this,n),nt(rt,this,n))}catch(t){rt(this,n,t)}},(e=function(t){P(this,{type:W,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:void 0})}).prototype=p(D.prototype,{then:function(t,n){var r=F(this),e=Y(w(this,D));return e.ok="function"!=typeof t||t,e.fail="function"==typeof n&&n,e.domain=q?G.domain:void 0,r.parent=!0,r.reactions.push(e),0!=r.state&&J(this,r,!1),e.promise},catch:function(t){return this.then(void 0,t)}}),o=function(){var t=new e,n=N(t);this.promise=t,this.resolve=nt(et,t,n),this.reject=nt(rt,t,n)},O.f=Y=function(t){return t===D||t===i?new o(t):K(t)},c||"function"!=typeof l||(u=l.prototype.then,h(l.prototype,"then",(function(t,n){var r=this;return new D((function(t,n){u.call(r,t,n)})).then(t,n)}),{unsafe:!0}),"function"==typeof V&&a({global:!0,enumerable:!0,forced:!0},{fetch:function(t){return A(D,V.apply(f,arguments))}}))),a({global:!0,wrap:!0,forced:z},{Promise:D}),v(D,W,!1,!0),g(W),i=s(W),a({target:W,stat:!0,forced:z},{reject:function(t){var n=Y(this);return n.reject.call(void 0,t),n.promise}}),a({target:W,stat:!0,forced:c||z},{resolve:function(t){return A(c&&this===i?D:this,t)}}),a({target:W,stat:!0,forced:_},{all:function(t){var n=this,r=Y(n),e=r.resolve,o=r.reject,i=k((function(){var r=y(n.resolve),i=[],u=0,a=1;x(t,(function(t){var c=u++,f=!1;i.push(void 0),a++,r.call(n,t).then((function(t){f||(f=!0,i[c]=t,--a||e(i))}),o)})),--a||e(i)}));return i.error&&o(i.value),r.promise},race:function(t){var n=this,r=Y(n),e=r.reject,o=k((function(){var o=y(n.resolve);x(t,(function(t){o.call(n,t).then(r.resolve,e)}))}));return o.error&&e(o.value),r.promise}})},"5uH8":function(t,n,r){r("I+eb")({target:"Number",stat:!0},{MIN_SAFE_INTEGER:-9007199254740991})},"5xtp":function(t,n,r){"use strict";var e=r("I+eb"),o=r("g6v/"),i=r("MKAM"),u=r("ewvW"),a=r("HAuM"),c=r("m/L8");o&&e({target:"Object",proto:!0,forced:i},{__defineSetter__:function(t,n){c.f(u(this),t,{set:a(n),enumerable:!0,configurable:!0})}})},"67WC":function(t,n,r){"use strict";var e,o=r("g6v/"),i=r("2oRo"),u=r("hh1v"),a=r("UTVS"),c=r("9d/t"),f=r("kRJp"),s=r("busE"),l=r("m/L8").f,h=r("4WOD"),p=r("0rvr"),v=r("tiKp"),g=r("kOOl"),d=i.DataView,y=d&&d.prototype,b=i.Int8Array,m=b&&b.prototype,x=i.Uint8ClampedArray,S=x&&x.prototype,w=b&&h(b),I=m&&h(m),E=Object.prototype,A=E.isPrototypeOf,R=v("toStringTag"),O=g("TYPED_ARRAY_TAG"),k=!(!i.ArrayBuffer||!d),M=k&&!!p&&"Opera"!==c(i.opera),T=!1,L={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},j=function(t){return u(t)&&a(L,c(t))};for(e in L)i[e]||(M=!1);if((!M||"function"!=typeof w||w===Function.prototype)&&(w=function(){throw TypeError("Incorrect invocation")},M))for(e in L)i[e]&&p(i[e],w);if((!M||!I||I===E)&&(I=w.prototype,M))for(e in L)i[e]&&p(i[e].prototype,I);if(M&&h(S)!==I&&p(S,I),o&&!a(I,R))for(e in T=!0,l(I,R,{get:function(){return u(this)?this[O]:void 0}}),L)i[e]&&f(i[e],O,e);k&&p&&h(y)!==E&&p(y,E),t.exports={NATIVE_ARRAY_BUFFER:k,NATIVE_ARRAY_BUFFER_VIEWS:M,TYPED_ARRAY_TAG:T&&O,aTypedArray:function(t){if(j(t))return t;throw TypeError("Target is not a typed array")},aTypedArrayConstructor:function(t){if(p){if(A.call(w,t))return t}else for(var n in L)if(a(L,e)){var r=i[n];if(r&&(t===r||A.call(r,t)))return t}throw TypeError("Target is not a typed array constructor")},exportProto:function(t,n,r){if(o){if(r)for(var e in L){var u=i[e];u&&a(u.prototype,t)&&delete u.prototype[t]}I[t]&&!r||s(I,t,r?n:M&&m[t]||n)}},exportStatic:function(t,n,r){var e,u;if(o){if(p){if(r)for(e in L)(u=i[e])&&a(u,t)&&delete u[t];if(w[t]&&!r)return;try{return s(w,t,r?n:M&&b[t]||n)}catch(t){}}for(e in L)!(u=i[e])||u[t]&&!r||s(u,t,n)}},isView:function(t){var n=c(t);return"DataView"===n||a(L,n)},isTypedArray:j,TypedArray:w,TypedArrayPrototype:I}},"6JNq":function(t,n,r){var e=r("UTVS"),o=r("Vu81"),i=r("Bs8V"),u=r("m/L8");t.exports=function(t,n){for(var r=o(n),a=u.f,c=i.f,f=0;f<r.length;f++){var s=r[f];e(t,s)||a(t,s,c(n,s))}}},"6LWA":function(t,n,r){var e=r("xrYK");t.exports=Array.isArray||function(t){return"Array"==e(t)}},"6R/c":function(t,n,r){"use strict";var e=r("67WC"),o=r("TWQb").indexOf,i=e.aTypedArray;e.exportProto("indexOf",(function(t){return o(i(this),t,arguments.length>1?arguments[1]:void 0)}))},"6VoE":function(t,n,r){var e=r("tiKp"),o=r("P4y1"),i=e("iterator"),u=Array.prototype;t.exports=function(t){return void 0!==t&&(o.Array===t||u[i]===t)}},"6unK":function(t,n,r){var e=r("0Dky");t.exports=function(t){return e((function(){var n=""[t]('"');return n!==n.toLowerCase()||n.split('"').length>3}))}},"7+kd":function(t,n,r){r("dG/n")("isConcatSpreadable")},"7+zs":function(t,n,r){var e=r("kRJp"),o=r("UesL"),i=r("tiKp")("toPrimitive"),u=Date.prototype;i in u||e(u,i,o)},"7JcK":function(t,n,r){"use strict";var e=r("67WC"),o=r("FmqS"),i=e.aTypedArrayConstructor;e.exportStatic("of",(function(){for(var t=0,n=arguments.length,r=new(i(this))(n);n>t;)r[t]=arguments[t++];return r}),o)},"7ueG":function(t,n,r){"use strict";var e=r("I+eb"),o=r("WKiH").start,i=r("4HCi")("trimStart"),u=i?function(){return o(this)}:"".trimStart;e({target:"String",proto:!0,forced:i},{trimStart:u,trimLeft:u})},"8AyJ":function(t,n,r){r("I+eb")({target:"Number",stat:!0},{isFinite:r("4oU/")})},"8GlL":function(t,n,r){"use strict";var e=r("HAuM"),o=function(t){var n,r;this.promise=new t((function(t,e){if(void 0!==n||void 0!==r)throw TypeError("Bad Promise constructor");n=t,r=e})),this.resolve=e(n),this.reject=e(r)};t.exports.f=function(t){return new o(t)}},"8YOa":function(t,n,r){function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var o=r("0BK2"),i=r("hh1v"),u=r("UTVS"),a=r("m/L8").f,c=r("kOOl"),f=r("uy83"),s=c("meta"),l=0,h=Object.isExtensible||function(){return!0},p=function(t){a(t,s,{value:{objectID:"O"+ ++l,weakData:{}}})},v=t.exports={REQUIRED:!1,fastKey:function(t,n){if(!i(t))return"symbol"==e(t)?t:("string"==typeof t?"S":"P")+t;if(!u(t,s)){if(!h(t))return"F";if(!n)return"E";p(t)}return t[s].objectID},getWeakData:function(t,n){if(!u(t,s)){if(!h(t))return!0;if(!n)return!1;p(t)}return t[s].weakData},onFreeze:function(t){return f&&v.REQUIRED&&h(t)&&!u(t,s)&&p(t),t}};o[s]=!0},"90hW":function(t,n){t.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:t<0?-1:1}},"93I0":function(t,n,r){var e=r("VpIT"),o=r("kOOl"),i=e("keys");t.exports=function(t){return i[t]||(i[t]=o(t))}},"94Xl":function(t,n,r){r("JiZb")("Array")},"9LPj":function(t,n,r){"use strict";var e=r("I+eb"),o=r("0Dky"),i=r("ewvW"),u=r("wE6v");e({target:"Date",proto:!0,forced:o((function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}))},{toJSON:function(t){var n=i(this),r=u(n);return"number"!=typeof r||isFinite(r)?n.toISOString():null}})},"9N29":function(t,n,r){"use strict";var e=r("I+eb"),o=r("1Y/n").right;e({target:"Array",proto:!0,forced:r("swFL")("reduceRight")},{reduceRight:function(t){return o(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}})},"9XZ4":function(t,n,r){},"9bJ7":function(t,n,r){"use strict";var e=r("I+eb"),o=r("ZUd8").codeAt;e({target:"String",proto:!0},{codePointAt:function(t){return o(this,t)}})},"9d/t":function(t,n,r){var e=r("xrYK"),o=r("tiKp")("toStringTag"),i="Arguments"==e(function(){return arguments}());t.exports=function(t){var n,r,u;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(r=function(t,n){try{return t[n]}catch(t){}}(n=Object(t),o))?r:i?e(n):"Object"==(u=e(n))&&"function"==typeof n.callee?"Arguments":u}},"9mRW":function(t,n,r){r("I+eb")({target:"Math",stat:!0},{fround:r("vo4V")})},"9tb/":function(t,n,r){var e=r("I+eb"),o=r("I8vh"),i=String.fromCharCode,u=String.fromCodePoint;e({target:"String",stat:!0,forced:!!u&&1!=u.length},{fromCodePoint:function(t){for(var n,r=[],e=arguments.length,u=0;e>u;){if(n=+arguments[u++],o(n,1114111)!==n)throw RangeError(n+" is not a valid code point");r.push(n<65536?i(n):i(55296+((n-=65536)>>10),n%1024+56320))}return r.join("")}})},AmFO:function(t,n,r){var e=r("I+eb"),o=r("0Dky"),i=r("jrUv"),u=Math.abs,a=Math.exp,c=Math.E;e({target:"Math",stat:!0,forced:o((function(){return-2e-17!=Math.sinh(-2e-17)}))},{sinh:function(t){return u(t=+t)<1?(i(t)-i(-t))/2:(a(t-1)-a(-t-1))*(c/2)}})},B0X1:function(t,n,r){"use strict";function e(){try{var t=document.activeElement;return t&&t.nodeName?t:document.body}catch(t){return document.body}}var o={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_:[0,"",""]};o.tbody=o.thead,o.tfoot=o.thead,o.colgroup=o.thead,o.caption=o.thead,o.th=o.td;function i(t){for(var n=[];t&&t.parentNode&&1===t.parentNode.nodeType;)t=t.parentNode,n.push(t);return n}function u(t){var n;(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).restoreScrollPosition&&(n=function(t){var n=i(t).map((function(t){return[t,t.scrollTop,t.scrollLeft]}));return function(){n.forEach((function(t){t[0].scrollTop=t[1],t[0].scrollLeft=t[2]}))}}(t));try{t.focus()}catch(t){}n&&n()}function a(t,n){if(!t)return!1;var r=t.matches||t.webkitMatchesSelector||t.msMatchesSelector;return"function"==typeof r&&r.call(t,n)}function c(t,n){if(!t)return null;if("function"==typeof t.closest)return t.closest(n);do{if(a(t,n))return t;t=t.parentNode}while(t&&1===t.nodeType);return null}function f(t,n){var r=arguments.length>1?n:document;return r&&"function"==typeof r.querySelectorAll?[].slice.call(r.querySelectorAll(t)):[]}var s,l=["a[href]","area[href]","input","select","textarea","button","iframe","object","audio[controls]","video[controls]","[contenteditable]","[tabindex]"].join(","),h=/^(input|select|textarea|button|object)$/;function p(t){var n=t.nodeName.toLowerCase();if("area"===n)return function(t){var n=t.parentNode,r=n.name;if(!t.href||!r||"map"!==n.nodeName.toLowerCase())return!1;var e=f('img[usemap="#'.concat(r,'"]'));return e.length>0&&d(e[0])}(t);if(t.disabled)return!1;if(h.test(n)){var r=c(t,"fieldset");if(r&&r.disabled)return!1}return d(t)}function v(t){var n=y(t);return p(t)&&n>=0}function g(t,n){var r=y(t,!0),e=y(n,!0);return r===e?2&t.compareDocumentPosition(n)?1:-1:r-e}function d(t){var n=getComputedStyle(t);return("hidden"!==n.visibility&&"collapse"!==n.visibility&&"none"!==n.display&&i(t).every((function(t){return"none"!==getComputedStyle(t).display})))}function y(t){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=parseInt(t.getAttribute("tabindex"),10);return isNaN(r)?0:n&&r<0?0:r}function b(t){return a(t,l)&&v(t)}function m(){if(s)return s;s={capture:!1,once:!1,passive:!1};var t={get capture(){return s.capture=!0,!1},get once(){return s.once=!0,!1},get passive(){return s.passive=!0,!1}};return window.addEventListener("test",t,t),window.removeEventListener("test",t,t),s}function x(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=m(),r=n.once,e=n.passive,o=n.capture;return r||e||o?(r||delete t.once,e||delete t.passive,o||delete t.capture,t):Boolean(t.capture)}function S(t,n,r){var e=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{capture:!1};if(!t||"function"!=typeof t.addEventListener)return function(){};var o=r,i=function(){!function(t,n,r){var e=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{capture:!1};t&&"function"==typeof t.removeEventListener&&t.removeEventListener(n,r,x(e))}(t,n,o,e)};return e.once&&!m().once&&(o=function(n){i(),r.call(t,n)}),t.addEventListener(n,o,x(e)),i}function w(t,n,r,e){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{capture:!1},i=!0===o.once;delete o.once;var u=S(t,n,(function(t){var n=c(t.target,r);n&&(i&&u(),e.call(n,t,n))}),o);return u}function I(t,n){var r,e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!t||"function"!=typeof t.dispatchEvent)return!0;e.bubbles=e.bubbles||!1,e.cancelable=e.cancelable||!1,e.composed=e.composed||!1,e.detail=e.detail||null;try{r=new CustomEvent(n,e)}catch(t){(r=document.createEvent("CustomEvent")).initCustomEvent(n,e.bubbles,e.cancelable,e.detail)}return t.dispatchEvent(r)}function E(t){var n=document.readyState;"complete"!==n&&"interactive"!==n?document.addEventListener("DOMContentLoaded",(function(){t()}),x({capture:!0,once:!0,passive:!0})):setTimeout(t,0)}function A(t){return f(l,arguments.length>0?t:document).filter(v).sort(g)}r.d(n,"a",(function(){return e})),r.d(n,"f",(function(){return u})),r.d(n,"g",(function(){return b})),r.d(n,"c",(function(){return w})),r.d(n,"d",(function(){return I})),r.d(n,"h",(function(){return S})),r.d(n,"i",(function(){return E})),r.d(n,"b",(function(){return c})),r.d(n,"e",(function(){return f})),r.d(n,"j",(function(){return A}))},B6y2:function(t,n,r){var e=r("I+eb"),o=r("b1O7").values;e({target:"Object",stat:!0},{values:function(t){return o(t)}})},BIHw:function(t,n,r){"use strict";var e=r("I+eb"),o=r("or9q"),i=r("ewvW"),u=r("UMSQ"),a=r("ppGB"),c=r("ZfDv");e({target:"Array",proto:!0},{flat:function(){var t=arguments.length?arguments[0]:void 0,n=i(this),r=u(n.length),e=c(n,0);return e.length=o(e,n,n,r,0,void 0===t?1:a(t)),e}})},BNMt:function(t,n,r){"use strict";var e=r("I+eb"),o=r("hXpO");e({target:"String",proto:!0,forced:r("6unK")("blink")},{blink:function(){return o(this,"blink","","")}})},BTho:function(t,n,r){"use strict";var e=r("HAuM"),o=r("hh1v"),i=[].slice,u={},a=function(t,n,r){if(!(n in u)){for(var e=[],o=0;o<n;o++)e[o]="a["+o+"]";u[n]=Function("C,a","return new C("+e.join(",")+")")}return u[n](t,r)};t.exports=Function.bind||function(t){var n=e(this),r=i.call(arguments,1),u=function(){var e=r.concat(i.call(arguments));return this instanceof u?a(n,e.length,e):n.apply(t,e)};return o(n.prototype)&&(u.prototype=n.prototype),u}},"BX/b":function(t,n,r){function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var o=r("/GqU"),i=r("JBy8").f,u={}.toString,a="object"==("undefined"==typeof window?"undefined":e(window))&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return a&&"[object Window]"==u.call(t)?function(t){try{return i(t)}catch(t){return a.slice()}}(t):i(o(t))}},Bs8V:function(t,n,r){var e=r("g6v/"),o=r("0eef"),i=r("XGwC"),u=r("/GqU"),a=r("wE6v"),c=r("UTVS"),f=r("DPsx"),s=Object.getOwnPropertyDescriptor;n.f=e?s:function(t,n){if(t=u(t),n=a(n,!0),f)try{return s(t,n)}catch(t){}if(c(t,n))return i(!o.f.call(t,n),t[n])}},CrjE:function(t,n,r){},CsgD:function(t,n,r){var e=r("I+eb"),o=r("jrUv");e({target:"Math",stat:!0,forced:o!=Math.expm1},{expm1:o})},CyXQ:function(t,n,r){var e=r("ppGB"),o=r("UMSQ");t.exports=function(t){if(void 0===t)return 0;var n=e(t),r=o(n);if(n!==r)throw RangeError("Wrong length or index");return r}},DEfu:function(t,n,r){var e=r("2oRo");r("1E5z")(e.JSON,"JSON",!0)},DMt2:function(t,n,r){var e=r("UMSQ"),o=r("EUja"),i=r("HYAF"),u=Math.ceil,a=function(t){return function(n,r,a){var c,f,s=String(i(n)),l=s.length,h=void 0===a?" ":String(a),p=e(r);return p<=l||""==h?s:(c=p-l,(f=o.call(h,u(c/h.length))).length>c&&(f=f.slice(0,c)),t?s+f:f+s)}};t.exports={start:a(!1),end:a(!0)}},DPsx:function(t,n,r){var e=r("g6v/"),o=r("0Dky"),i=r("zBJ4");t.exports=!e&&!o((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},DQNa:function(t,n,r){var e=r("busE"),o=Date.prototype,i=o.toString,u=o.getTime;new Date(NaN)+""!="Invalid Date"&&e(o,"toString",(function(){var t=u.call(this);return t==t?i.call(this):"Invalid Date"}))},DTth:function(t,n,r){var e=r("0Dky"),o=r("tiKp"),i=r("xDBR"),u=o("iterator");t.exports=!e((function(){var t=new URL("b?a=1&b=2&c=3","http://a"),n=t.searchParams,r="";return t.pathname="c%20d",n.forEach((function(t,e){n.delete("b"),r+=e+t})),i&&!t.toJSON||!n.sort||"http://a/c%20d?a=1&c=3"!==t.href||"3"!==n.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!n[u]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://тест").host||"#%D0%B1"!==new URL("http://a#б").hash||"a1c3"!==r||"x"!==new URL("http://x",void 0).host}))},E5NM:function(t,n,r){"use strict";var e=r("I+eb"),o=r("hXpO");e({target:"String",proto:!0,forced:r("6unK")("big")},{big:function(){return o(this,"big","","")}})},E9XD:function(t,n,r){"use strict";var e=r("I+eb"),o=r("1Y/n").left;e({target:"Array",proto:!0,forced:r("swFL")("reduce")},{reduce:function(t){return o(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}})},ENF9:function(t,n,r){"use strict";var e,o=r("2oRo"),i=r("4syw"),u=r("8YOa"),a=r("bWFh"),c=r("rKzb"),f=r("hh1v"),s=r("afO8").enforce,l=r("f5p1"),h=!o.ActiveXObject&&"ActiveXObject"in o,p=Object.isExtensible,v=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},g=t.exports=a("WeakMap",v,c,!0,!0);if(l&&h){e=c.getConstructor(v,"WeakMap",!0),u.REQUIRED=!0;var d=g.prototype,y=d.delete,b=d.has,m=d.get,x=d.set;i(d,{delete:function(t){if(f(t)&&!p(t)){var n=s(this);return n.frozen||(n.frozen=new e),y.call(this,t)||n.frozen.delete(t)}return y.call(this,t)},has:function(t){if(f(t)&&!p(t)){var n=s(this);return n.frozen||(n.frozen=new e),b.call(this,t)||n.frozen.has(t)}return b.call(this,t)},get:function(t){if(f(t)&&!p(t)){var n=s(this);return n.frozen||(n.frozen=new e),b.call(this,t)?m.call(this,t):n.frozen.get(t)}return m.call(this,t)},set:function(t,n){if(f(t)&&!p(t)){var r=s(this);r.frozen||(r.frozen=new e),b.call(this,t)?x.call(this,t,n):r.frozen.set(t,n)}else x.call(this,t,n);return this}})}},EUja:function(t,n,r){"use strict";var e=r("ppGB"),o=r("HYAF");t.exports="".repeat||function(t){var n=String(o(this)),r="",i=e(t);if(i<0||i==1/0)throw RangeError("Wrong number of repetitions");for(;i>0;(i>>>=1)&&(n+=n))1&i&&(r+=n);return r}},EnZy:function(t,n,r){"use strict";var e=r("14Sl"),o=r("ROdP"),i=r("glrk"),u=r("HYAF"),a=r("SEBh"),c=r("iqWW"),f=r("UMSQ"),s=r("FMNM"),l=r("kmMV"),h=r("0Dky"),p=[].push,v=Math.min,g=!h((function(){return!RegExp(4294967295,"y")}));e("split",2,(function(t,n,r){var e;return e="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(t,r){var e=String(u(this)),i=void 0===r?4294967295:r>>>0;if(0===i)return[];if(void 0===t)return[e];if(!o(t))return n.call(e,t,i);for(var a,c,f,s=[],h=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),v=0,g=new RegExp(t.source,h+"g");(a=l.call(g,e))&&!((c=g.lastIndex)>v&&(s.push(e.slice(v,a.index)),a.length>1&&a.index<e.length&&p.apply(s,a.slice(1)),f=a[0].length,v=c,s.length>=i));)g.lastIndex===a.index&&g.lastIndex++;return v===e.length?!f&&g.test("")||s.push(""):s.push(e.slice(v)),s.length>i?s.slice(0,i):s}:"0".split(void 0,0).length?function(t,r){return void 0===t&&0===r?[]:n.call(this,t,r)}:n,[function(n,r){var o=u(this),i=null==n?void 0:n[t];return void 0!==i?i.call(n,o,r):e.call(String(o),n,r)},function(t,o){var u=r(e,t,this,o,e!==n);if(u.done)return u.value;var l=i(t),h=String(this),p=a(l,RegExp),d=l.unicode,y=(l.ignoreCase?"i":"")+(l.multiline?"m":"")+(l.unicode?"u":"")+(g?"y":"g"),b=new p(g?l:"^(?:"+l.source+")",y),m=void 0===o?4294967295:o>>>0;if(0===m)return[];if(0===h.length)return null===s(b,h)?[h]:[];for(var x=0,S=0,w=[];S<h.length;){b.lastIndex=g?S:0;var I,E=s(b,g?h:h.slice(S));if(null===E||(I=v(f(b.lastIndex+(g?0:S)),h.length))===x)S=c(h,S,d);else{if(w.push(h.slice(x,S)),w.length===m)return w;for(var A=1;A<=E.length-1;A++)if(w.push(E[A]),w.length===m)return w;S=x=I}}return w.push(h.slice(x)),w}]}),!g)},Ep9I:function(t,n){t.exports=Object.is||function(t,n){return t===n?0!==t||1/t==1/n:t!=t&&n!=n}},Eqjn:function(t,n,r){"use strict";var e=r("I+eb"),o=r("g6v/"),i=r("MKAM"),u=r("ewvW"),a=r("HAuM"),c=r("m/L8");o&&e({target:"Object",proto:!0,forced:i},{__defineGetter__:function(t,n){c.f(u(this),t,{get:a(n),enumerable:!0,configurable:!0})}})},"Ew+T":function(t,n,r){var e=r("2oRo"),o=r("LPSS"),i=!e.setImmediate||!e.clearImmediate;r("I+eb")({global:!0,bind:!0,enumerable:!0,forced:i},{setImmediate:o.set,clearImmediate:o.clear})},ExoC:function(t,n,r){r("I+eb")({target:"Object",stat:!0},{setPrototypeOf:r("0rvr")})},F8JR:function(t,n,r){"use strict";var e=r("tycR").forEach,o=r("swFL");t.exports=o("forEach")?function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}:[].forEach},FDzp:function(t,n,r){r("dOgj")("Int32",4,(function(t){return function(n,r,e){return t(this,n,r,e)}}))},FF6l:function(t,n,r){"use strict";var e=r("ewvW"),o=r("I8vh"),i=r("UMSQ"),u=Math.min;t.exports=[].copyWithin||function(t,n){var r=e(this),a=i(r.length),c=o(t,a),f=o(n,a),s=arguments.length>2?arguments[2]:void 0,l=u((void 0===s?a:o(s,a))-f,a-c),h=1;for(f<c&&c<f+l&&(h=-1,f+=l-1,c+=l-1);l-- >0;)f in r?r[c]=r[f]:delete r[c],c+=h,f+=h;return r}},FMNM:function(t,n,r){function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var o=r("xrYK"),i=r("kmMV");t.exports=function(t,n){var r=t.exec;if("function"==typeof r){var u=r.call(t,n);if("object"!==e(u))throw TypeError("RegExp exec method returned something other than an Object or null");return u}if("RegExp"!==o(t))throw TypeError("RegExp#exec called on incompatible receiver");return i.call(t,n)}},FZtP:function(t,n,r){var e=r("2oRo"),o=r("/byt"),i=r("F8JR"),u=r("kRJp");for(var a in o){var c=e[a],f=c&&c.prototype;if(f&&f.forEach!==i)try{u(f,"forEach",i)}catch(t){f.forEach=i}}},FmqS:function(t,n,r){var e=r("2oRo"),o=r("0Dky"),i=r("HH4o"),u=r("67WC").NATIVE_ARRAY_BUFFER_VIEWS,a=e.ArrayBuffer,c=e.Int8Array;t.exports=!u||!o((function(){c(1)}))||!o((function(){new c(-1)}))||!i((function(t){new c,new c(null),new c(1.5),new c(t)}),!0)||o((function(){return 1!==new c(new a(2),1,void 0).length}))},"Fwt+":function(t,n,r){"use strict";var e=r("67WC"),o=r("UMSQ"),i=r("I8vh"),u=r("SEBh"),a=e.aTypedArray;e.exportProto("subarray",(function(t,n){var r=a(this),e=r.length,c=i(t,e);return new(u(r,r.constructor))(r.buffer,r.byteOffset+c*r.BYTES_PER_ELEMENT,o((void 0===n?e:i(n,e))-c))}))},"G+Rx":function(t,n,r){var e=r("0GbY");t.exports=e("document","documentElement")},"G/JM":function(t,n,r){r("I+eb")({target:"Reflect",stat:!0},{ownKeys:r("Vu81")})},GC2F:function(t,n,r){var e=r("+M1K");t.exports=function(t,n){var r=e(t);if(r%n)throw RangeError("Wrong offset");return r}},GKVU:function(t,n,r){"use strict";var e=r("I+eb"),o=r("hXpO");e({target:"String",proto:!0,forced:r("6unK")("anchor")},{anchor:function(t){return o(this,"a","name",t)}})},GRPF:function(t,n,r){"use strict";var e=r("I+eb"),o=r("hXpO");e({target:"String",proto:!0,forced:r("6unK")("fontsize")},{fontsize:function(t){return o(this,"font","size",t)}})},GXvd:function(t,n,r){r("dG/n")("species")},GarU:function(t,n){t.exports=function(t,n,r){if(!(t instanceof n))throw TypeError("Incorrect "+(r?r+" ":"")+"invocation");return t}},"H+LF":function(t,n,r){"use strict";r("bWFh")("WeakSet",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),r("rKzb"),!1,!0)},HAuM:function(t,n){t.exports=function(t){if("function"!=typeof t)throw TypeError(String(t)+" is not a function");return t}},HH4o:function(t,n,r){var e=r("tiKp")("iterator"),o=!1;try{var i=0,u={next:function(){return{done:!!i++}},return:function(){o=!0}};u[e]=function(){return this},Array.from(u,(function(){throw 2}))}catch(t){}t.exports=function(t,n){if(!n&&!o)return!1;var r=!1;try{var i={};i[e]=function(){return{next:function(){return{done:r=!0}}}},t(i)}catch(t){}return r}},HRxU:function(t,n,r){var e=r("I+eb"),o=r("g6v/");e({target:"Object",stat:!0,forced:!o,sham:!o},{defineProperties:r("N+g0")})},HYAF:function(t,n){t.exports=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t}},Hd5f:function(t,n,r){var e=r("0Dky"),o=r("tiKp"),i=r("YK6W"),u=o("species");t.exports=function(t){return i>=51||!e((function(){var n=[];return(n.constructor={})[u]=function(){return{foo:1}},1!==n[t](Boolean).foo}))}},HiXI:function(t,n,r){"use strict";var e=r("I+eb"),o=r("WKiH").end,i=r("4HCi")("trimEnd"),u=i?function(){return o(this)}:"".trimEnd;e({target:"String",proto:!0,forced:i},{trimEnd:u,trimRight:u})},HsHA:function(t,n){var r=Math.log;t.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&t<1e-8?t-t*t/2:r(1+t)}},"I+eb":function(t,n,r){function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var o=r("2oRo"),i=r("Bs8V").f,u=r("kRJp"),a=r("busE"),c=r("zk60"),f=r("6JNq"),s=r("lMq5");t.exports=function(t,n){var r,l,h,p,v,g=t.target,d=t.global,y=t.stat;if(r=d?o:y?o[g]||c(g,{}):(o[g]||{}).prototype)for(l in n){if(p=n[l],h=t.noTargetGet?(v=i(r,l))&&v.value:r[l],!s(d?l:g+(y?".":"#")+l,t.forced)&&void 0!==h){if(e(p)===e(h))continue;f(p,h)}(t.sham||h&&h.sham)&&u(p,"sham",!0),a(r,l,p,t)}}},I1Gw:function(t,n,r){r("dG/n")("split")},I8vh:function(t,n,r){var e=r("ppGB"),o=Math.max,i=Math.min;t.exports=function(t,n){var r=e(t);return r<0?o(r+n,0):i(r,n)}},I9xj:function(t,n,r){r("1E5z")(Math,"Math",!0)},"IL/d":function(t,n,r){"use strict";var e=r("FmqS"),o=r("67WC"),i=r("oHi+");o.exportStatic("from",i,e)},IZzc:function(t,n,r){"use strict";var e=r("67WC"),o=e.aTypedArray,i=[].sort;e.exportProto("sort",(function(t){return i.call(o(this),t)}))},ImZN:function(t,n,r){function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var o=r("glrk"),i=r("6VoE"),u=r("UMSQ"),a=r("+MLx"),c=r("NaFW"),f=r("m92n"),s=function(t,n){this.stopped=t,this.result=n};(t.exports=function(t,n,r,l,h){var p,v,g,d,y,b,m,x=a(n,r,l?2:1);if(h)p=t;else{if("function"!=typeof(v=c(t)))throw TypeError("Target is not iterable");if(i(v)){for(g=0,d=u(t.length);d>g;g++)if((y=l?x(o(m=t[g])[0],m[1]):x(t[g]))&&y instanceof s)return y;return new s(!1)}p=v.call(t)}for(b=p.next;!(m=b.call(p)).done;)if("object"==e(y=f(p,x,m.value,l))&&y&&y instanceof s)return y;return new s(!1)}).stop=function(t){return new s(!0,t)}},IxXR:function(t,n,r){"use strict";var e=r("I+eb"),o=r("hXpO");e({target:"String",proto:!0,forced:r("6unK")("strike")},{strike:function(){return o(this,"strike","","")}})},JBy8:function(t,n,r){var e=r("yoRg"),o=r("eDl+").concat("length","prototype");n.f=Object.getOwnPropertyNames||function(t){return e(t,o)}},JTJg:function(t,n,r){"use strict";var e=r("I+eb"),o=r("WjRb"),i=r("HYAF");e({target:"String",proto:!0,forced:!r("qxPZ")("includes")},{includes:function(t){return!!~String(i(this)).indexOf(o(t),arguments.length>1?arguments[1]:void 0)}})},JaFt:function(t,n,r){"use strict";var e=r("67WC"),o=r("1Y/n").right,i=e.aTypedArray;e.exportProto("reduceRight",(function(t){return o(i(this),t,arguments.length,arguments.length>1?arguments[1]:void 0)}))},JevA:function(t,n,r){var e=r("I+eb"),o=r("5YOQ");e({target:"Number",stat:!0,forced:Number.parseInt!=o},{parseInt:o})},JfAA:function(t,n,r){"use strict";var e=r("busE"),o=r("glrk"),i=r("0Dky"),u=r("rW0t"),a=RegExp.prototype,c=a.toString,f=i((function(){return"/a/b"!=c.call({source:"a",flags:"b"})})),s="toString"!=c.name;(f||s)&&e(RegExp.prototype,"toString",(function(){var t=o(this),n=String(t.source),r=t.flags;return"/"+n+"/"+String(void 0===r&&t instanceof RegExp&&!("flags"in a)?u.call(t):r)}),{unsafe:!0})},JiZb:function(t,n,r){"use strict";var e=r("0GbY"),o=r("m/L8"),i=r("tiKp"),u=r("g6v/"),a=i("species");t.exports=function(t){var n=e(t),r=o.f;u&&n&&!n[a]&&r(n,a,{configurable:!0,get:function(){return this}})}},Junv:function(t,n,r){"use strict";var e=r("I+eb"),o=r("6LWA"),i=[].reverse,u=[1,2];e({target:"Array",proto:!0,forced:String(u)===String(u.reverse())},{reverse:function(){return o(this)&&(this.length=this.length),i.call(this)}})},KVSy:function(t,n,r){"use strict";var e=r("67WC"),o=r("SEBh"),i=r("0Dky"),u=e.aTypedArray,a=e.aTypedArrayConstructor,c=[].slice,f=i((function(){new Int8Array(1).slice()}));e.exportProto("slice",(function(t,n){for(var r=c.call(u(this),t,n),e=o(this,this.constructor),i=0,f=r.length,s=new(a(e))(f);f>i;)s[i]=r[i++];return s}),f)},KhsS:function(t,n,r){r("dG/n")("match")},KvGi:function(t,n,r){r("I+eb")({target:"Math",stat:!0},{sign:r("90hW")})},Kxld:function(t,n,r){r("I+eb")({target:"Object",stat:!0},{is:r("Ep9I")})},Kz25:function(t,n,r){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}r("PKPk");var o,i=r("I+eb"),u=r("g6v/"),a=r("DTth"),c=r("2oRo"),f=r("N+g0"),s=r("busE"),l=r("GarU"),h=r("UTVS"),p=r("YNrV"),v=r("TfTi"),g=r("ZUd8").codeAt,d=r("yY7y"),y=r("1E5z"),b=r("mGGf"),m=r("afO8"),x=c.URL,S=b.URLSearchParams,w=b.getState,I=m.set,E=m.getterFor("URL"),A=Math.floor,R=Math.pow,O=/[A-Za-z]/,k=/[\d+\-.A-Za-z]/,M=/\d/,T=/^(0x|0X)/,L=/^[0-7]+$/,j=/^\d+$/,U=/^[\dA-Fa-f]+$/,W=/[\u0000\u0009\u000A\u000D #%/:?@[\\]]/,N=/[\u0000\u0009\u000A\u000D #/:?@[\\]]/,P=/^[\u0000-\u001F ]+|[\u0000-\u001F ]+$/g,F=/[\u0009\u000A\u000D]/g,D=function(t,n){var r,e,o;if("["==n.charAt(0)){if("]"!=n.charAt(n.length-1))return"Invalid host";if(!(r=C(n.slice(1,-1))))return"Invalid host";t.host=r}else if(_(t)){if(n=d(n),W.test(n))return"Invalid host";if(null===(r=B(n)))return"Invalid host";t.host=r}else{if(N.test(n))return"Invalid host";for(r="",e=v(n),o=0;o<e.length;o++)r+=H(e[o],V);t.host=r}},B=function(t){var n,r,e,o,i,u,a,c=t.split(".");if(c.length&&""==c[c.length-1]&&c.pop(),(n=c.length)>4)return t;for(r=[],e=0;e<n;e++){if(""==(o=c[e]))return t;if(i=10,o.length>1&&"0"==o.charAt(0)&&(i=T.test(o)?16:8,o=o.slice(8==i?1:2)),""===o)u=0;else{if(!(10==i?j:8==i?L:U).test(o))return t;u=parseInt(o,i)}r.push(u)}for(e=0;e<n;e++)if(u=r[e],e==n-1){if(u>=R(256,5-n))return null}else if(u>255)return null;for(a=r.pop(),e=0;e<r.length;e++)a+=r[e]*R(256,3-e);return a},C=function(t){var n,r,e,o,i,u,a,c=[0,0,0,0,0,0,0,0],f=0,s=null,l=0,h=function(){return t.charAt(l)};if(":"==h()){if(":"!=t.charAt(1))return;l+=2,s=++f}for(;h();){if(8==f)return;if(":"!=h()){for(n=r=0;r<4&&U.test(h());)n=16*n+parseInt(h(),16),l++,r++;if("."==h()){if(0==r)return;if(l-=r,f>6)return;for(e=0;h();){if(o=null,e>0){if(!("."==h()&&e<4))return;l++}if(!M.test(h()))return;for(;M.test(h());){if(i=parseInt(h(),10),null===o)o=i;else{if(0==o)return;o=10*o+i}if(o>255)return;l++}c[f]=256*c[f]+o,2!=++e&&4!=e||f++}if(4!=e)return;break}if(":"==h()){if(l++,!h())return}else if(h())return;c[f++]=n}else{if(null!==s)return;l++,s=++f}}if(null!==s)for(u=f-s,f=7;0!=f&&u>0;)a=c[f],c[f--]=c[s+u-1],c[s+--u]=a;else if(8!=f)return;return c},G=function(t){var n,r,o,i;if("number"==typeof t){for(n=[],r=0;r<4;r++)n.unshift(t%256),t=A(t/256);return n.join(".")}if("object"==e(t)){for(n="",o=function(t){for(var n=null,r=1,e=null,o=0,i=0;i<8;i++)0!==t[i]?(o>r&&(n=e,r=o),e=null,o=0):(null===e&&(e=i),++o);return o>r&&(n=e,r=o),n}(t),r=0;r<8;r++)i&&0===t[r]||(i&&(i=!1),o===r?(n+=r?":":"::",i=!0):(n+=t[r].toString(16),r<7&&(n+=":")));return"["+n+"]"}return t},V={},Y=p({},V,{" ":1,'"':1,"<":1,">":1,"`":1}),K=p({},Y,{"#":1,"?":1,"{":1,"}":1}),q=p({},K,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),H=function(t,n){var r=g(t,0);return r>32&&r<127&&!h(n,t)?t:encodeURIComponent(t)},z={ftp:21,file:null,http:80,https:443,ws:80,wss:443},_=function(t){return h(z,t.scheme)},X=function(t){return""!=t.username||""!=t.password},J=function(t){return!t.host||t.cannotBeABaseURL||"file"==t.scheme},Z=function(t,n){var r;return 2==t.length&&O.test(t.charAt(0))&&(":"==(r=t.charAt(1))||!n&&"|"==r)},Q=function(t){var n;return t.length>1&&Z(t.slice(0,2))&&(2==t.length||"/"===(n=t.charAt(2))||"\\"===n||"?"===n||"#"===n)},$=function(t){var n=t.path,r=n.length;!r||"file"==t.scheme&&1==r&&Z(n[0],!0)||n.pop()},tt=function(t){return"."===t||"%2e"===t.toLowerCase()},nt={},rt={},et={},ot={},it={},ut={},at={},ct={},ft={},st={},lt={},ht={},pt={},vt={},gt={},dt={},yt={},bt={},mt={},xt={},St={},wt=function(t,n,r,e){var i,u,a,c,f,s=r||nt,l=0,p="",g=!1,d=!1,y=!1;for(r||(t.scheme="",t.username="",t.password="",t.host=null,t.port=null,t.path=[],t.query=null,t.fragment=null,t.cannotBeABaseURL=!1,n=n.replace(P,"")),n=n.replace(F,""),i=v(n);l<=i.length;){switch(u=i[l],s){case nt:if(!u||!O.test(u)){if(r)return"Invalid scheme";s=et;continue}p+=u.toLowerCase(),s=rt;break;case rt:if(u&&(k.test(u)||"+"==u||"-"==u||"."==u))p+=u.toLowerCase();else{if(":"!=u){if(r)return"Invalid scheme";p="",s=et,l=0;continue}if(r&&(_(t)!=h(z,p)||"file"==p&&(X(t)||null!==t.port)||"file"==t.scheme&&!t.host))return;if(t.scheme=p,r)return void(_(t)&&z[t.scheme]==t.port&&(t.port=null));p="","file"==t.scheme?s=vt:_(t)&&e&&e.scheme==t.scheme?s=ot:_(t)?s=ct:"/"==i[l+1]?(s=it,l++):(t.cannotBeABaseURL=!0,t.path.push(""),s=mt)}break;case et:if(!e||e.cannotBeABaseURL&&"#"!=u)return"Invalid scheme";if(e.cannotBeABaseURL&&"#"==u){t.scheme=e.scheme,t.path=e.path.slice(),t.query=e.query,t.fragment="",t.cannotBeABaseURL=!0,s=St;break}s="file"==e.scheme?vt:ut;continue;case ot:if("/"!=u||"/"!=i[l+1]){s=ut;continue}s=ft,l++;break;case it:if("/"==u){s=st;break}s=bt;continue;case ut:if(t.scheme=e.scheme,u==o)t.username=e.username,t.password=e.password,t.host=e.host,t.port=e.port,t.path=e.path.slice(),t.query=e.query;else if("/"==u||"\\"==u&&_(t))s=at;else if("?"==u)t.username=e.username,t.password=e.password,t.host=e.host,t.port=e.port,t.path=e.path.slice(),t.query="",s=xt;else{if("#"!=u){t.username=e.username,t.password=e.password,t.host=e.host,t.port=e.port,t.path=e.path.slice(),t.path.pop(),s=bt;continue}t.username=e.username,t.password=e.password,t.host=e.host,t.port=e.port,t.path=e.path.slice(),t.query=e.query,t.fragment="",s=St}break;case at:if(!_(t)||"/"!=u&&"\\"!=u){if("/"!=u){t.username=e.username,t.password=e.password,t.host=e.host,t.port=e.port,s=bt;continue}s=st}else s=ft;break;case ct:if(s=ft,"/"!=u||"/"!=p.charAt(l+1))continue;l++;break;case ft:if("/"!=u&&"\\"!=u){s=st;continue}break;case st:if("@"==u){g&&(p="%40"+p),g=!0,a=v(p);for(var b=0;b<a.length;b++){var m=a[b];if(":"!=m||y){var x=H(m,q);y?t.password+=x:t.username+=x}else y=!0}p=""}else if(u==o||"/"==u||"?"==u||"#"==u||"\\"==u&&_(t)){if(g&&""==p)return"Invalid authority";l-=v(p).length+1,p="",s=lt}else p+=u;break;case lt:case ht:if(r&&"file"==t.scheme){s=dt;continue}if(":"!=u||d){if(u==o||"/"==u||"?"==u||"#"==u||"\\"==u&&_(t)){if(_(t)&&""==p)return"Invalid host";if(r&&""==p&&(X(t)||null!==t.port))return;if(c=D(t,p))return c;if(p="",s=yt,r)return;continue}"["==u?d=!0:"]"==u&&(d=!1),p+=u}else{if(""==p)return"Invalid host";if(c=D(t,p))return c;if(p="",s=pt,r==ht)return}break;case pt:if(!M.test(u)){if(u==o||"/"==u||"?"==u||"#"==u||"\\"==u&&_(t)||r){if(""!=p){var S=parseInt(p,10);if(S>65535)return"Invalid port";t.port=_(t)&&S===z[t.scheme]?null:S,p=""}if(r)return;s=yt;continue}return"Invalid port"}p+=u;break;case vt:if(t.scheme="file","/"==u||"\\"==u)s=gt;else{if(!e||"file"!=e.scheme){s=bt;continue}if(u==o)t.host=e.host,t.path=e.path.slice(),t.query=e.query;else if("?"==u)t.host=e.host,t.path=e.path.slice(),t.query="",s=xt;else{if("#"!=u){Q(i.slice(l).join(""))||(t.host=e.host,t.path=e.path.slice(),$(t)),s=bt;continue}t.host=e.host,t.path=e.path.slice(),t.query=e.query,t.fragment="",s=St}}break;case gt:if("/"==u||"\\"==u){s=dt;break}e&&"file"==e.scheme&&!Q(i.slice(l).join(""))&&(Z(e.path[0],!0)?t.path.push(e.path[0]):t.host=e.host),s=bt;continue;case dt:if(u==o||"/"==u||"\\"==u||"?"==u||"#"==u){if(!r&&Z(p))s=bt;else if(""==p){if(t.host="",r)return;s=yt}else{if(c=D(t,p))return c;if("localhost"==t.host&&(t.host=""),r)return;p="",s=yt}continue}p+=u;break;case yt:if(_(t)){if(s=bt,"/"!=u&&"\\"!=u)continue}else if(r||"?"!=u)if(r||"#"!=u){if(u!=o&&(s=bt,"/"!=u))continue}else t.fragment="",s=St;else t.query="",s=xt;break;case bt:if(u==o||"/"==u||"\\"==u&&_(t)||!r&&("?"==u||"#"==u)){if(".."===(f=(f=p).toLowerCase())||"%2e."===f||".%2e"===f||"%2e%2e"===f?($(t),"/"==u||"\\"==u&&_(t)||t.path.push("")):tt(p)?"/"==u||"\\"==u&&_(t)||t.path.push(""):("file"==t.scheme&&!t.path.length&&Z(p)&&(t.host&&(t.host=""),p=p.charAt(0)+":"),t.path.push(p)),p="","file"==t.scheme&&(u==o||"?"==u||"#"==u))for(;t.path.length>1&&""===t.path[0];)t.path.shift();"?"==u?(t.query="",s=xt):"#"==u&&(t.fragment="",s=St)}else p+=H(u,K);break;case mt:"?"==u?(t.query="",s=xt):"#"==u?(t.fragment="",s=St):u!=o&&(t.path[0]+=H(u,V));break;case xt:r||"#"!=u?u!=o&&("'"==u&&_(t)?t.query+="%27":t.query+="#"==u?"%23":H(u,V)):(t.fragment="",s=St);break;case St:u!=o&&(t.fragment+=H(u,Y))}l++}},It=function(t){var n,r,e=l(this,It,"URL"),o=arguments.length>1?arguments[1]:void 0,i=String(t),a=I(e,{type:"URL"});if(void 0!==o)if(o instanceof It)n=E(o);else if(r=wt(n={},String(o)))throw TypeError(r);if(r=wt(a,i,null,n))throw TypeError(r);var c=a.searchParams=new S,f=w(c);f.updateSearchParams(a.query),f.updateURL=function(){a.query=String(c)||null},u||(e.href=At.call(e),e.origin=Rt.call(e),e.protocol=Ot.call(e),e.username=kt.call(e),e.password=Mt.call(e),e.host=Tt.call(e),e.hostname=Lt.call(e),e.port=jt.call(e),e.pathname=Ut.call(e),e.search=Wt.call(e),e.searchParams=Nt.call(e),e.hash=Pt.call(e))},Et=It.prototype,At=function(){var t=E(this),n=t.scheme,r=t.username,e=t.password,o=t.host,i=t.port,u=t.path,a=t.query,c=t.fragment,f=n+":";return null!==o?(f+="//",X(t)&&(f+=r+(e?":"+e:"")+"@"),f+=G(o),null!==i&&(f+=":"+i)):"file"==n&&(f+="//"),f+=t.cannotBeABaseURL?u[0]:u.length?"/"+u.join("/"):"",null!==a&&(f+="?"+a),null!==c&&(f+="#"+c),f},Rt=function(){var t=E(this),n=t.scheme,r=t.port;if("blob"==n)try{return new URL(n.path[0]).origin}catch(t){return"null"}return"file"!=n&&_(t)?n+"://"+G(t.host)+(null!==r?":"+r:""):"null"},Ot=function(){return E(this).scheme+":"},kt=function(){return E(this).username},Mt=function(){return E(this).password},Tt=function(){var t=E(this),n=t.host,r=t.port;return null===n?"":null===r?G(n):G(n)+":"+r},Lt=function(){var t=E(this).host;return null===t?"":G(t)},jt=function(){var t=E(this).port;return null===t?"":String(t)},Ut=function(){var t=E(this),n=t.path;return t.cannotBeABaseURL?n[0]:n.length?"/"+n.join("/"):""},Wt=function(){var t=E(this).query;return t?"?"+t:""},Nt=function(){return E(this).searchParams},Pt=function(){var t=E(this).fragment;return t?"#"+t:""},Ft=function(t,n){return{get:t,set:n,configurable:!0,enumerable:!0}};if(u&&f(Et,{href:Ft(At,(function(t){var n=E(this),r=String(t),e=wt(n,r);if(e)throw TypeError(e);w(n.searchParams).updateSearchParams(n.query)})),origin:Ft(Rt),protocol:Ft(Ot,(function(t){var n=E(this);wt(n,String(t)+":",nt)})),username:Ft(kt,(function(t){var n=E(this),r=v(String(t));if(!J(n)){n.username="";for(var e=0;e<r.length;e++)n.username+=H(r[e],q)}})),password:Ft(Mt,(function(t){var n=E(this),r=v(String(t));if(!J(n)){n.password="";for(var e=0;e<r.length;e++)n.password+=H(r[e],q)}})),host:Ft(Tt,(function(t){var n=E(this);n.cannotBeABaseURL||wt(n,String(t),lt)})),hostname:Ft(Lt,(function(t){var n=E(this);n.cannotBeABaseURL||wt(n,String(t),ht)})),port:Ft(jt,(function(t){var n=E(this);J(n)||(""==(t=String(t))?n.port=null:wt(n,t,pt))})),pathname:Ft(Ut,(function(t){var n=E(this);n.cannotBeABaseURL||(n.path=[],wt(n,t+"",yt))})),search:Ft(Wt,(function(t){var n=E(this);""==(t=String(t))?n.query=null:("?"==t.charAt(0)&&(t=t.slice(1)),n.query="",wt(n,t,xt)),w(n.searchParams).updateSearchParams(n.query)})),searchParams:Ft(Nt),hash:Ft(Pt,(function(t){var n=E(this);""!=(t=String(t))?("#"==t.charAt(0)&&(t=t.slice(1)),n.fragment="",wt(n,t,St)):n.fragment=null}))}),s(Et,"toJSON",(function(){return At.call(this)}),{enumerable:!0}),s(Et,"toString",(function(){return At.call(this)}),{enumerable:!0}),x){var Dt=x.createObjectURL,Bt=x.revokeObjectURL;Dt&&s(It,"createObjectURL",(function(t){return Dt.apply(x,arguments)})),Bt&&s(It,"revokeObjectURL",(function(t){return Bt.apply(x,arguments)}))}y(It,"URL"),i({global:!0,forced:!a,sham:!u},{URL:It})},LKBx:function(t,n,r){"use strict";var e=r("I+eb"),o=r("UMSQ"),i=r("WjRb"),u=r("HYAF"),a=r("qxPZ"),c="".startsWith,f=Math.min;e({target:"String",proto:!0,forced:!a("startsWith")},{startsWith:function(t){var n=String(u(this));i(t);var r=o(f(arguments.length>1?arguments[1]:void 0,n.length)),e=String(t);return c?c.call(n,e,r):n.slice(r,r+e.length)===e}})},LPSS:function(t,n,r){var e,o,i,u=r("2oRo"),a=r("0Dky"),c=r("xrYK"),f=r("+MLx"),s=r("G+Rx"),l=r("zBJ4"),h=r("s5pE"),p=u.location,v=u.setImmediate,g=u.clearImmediate,d=u.process,y=u.MessageChannel,b=u.Dispatch,m=0,x={},S=function(t){if(x.hasOwnProperty(t)){var n=x[t];delete x[t],n()}},w=function(t){return function(){S(t)}},I=function(t){S(t.data)},E=function(t){u.postMessage(t+"",p.protocol+"//"+p.host)};v&&g||(v=function(t){for(var n=[],r=1;arguments.length>r;)n.push(arguments[r++]);return x[++m]=function(){("function"==typeof t?t:Function(t)).apply(void 0,n)},e(m),m},g=function(t){delete x[t]},"process"==c(d)?e=function(t){d.nextTick(w(t))}:b&&b.now?e=function(t){b.now(w(t))}:y&&!/(iphone|ipod|ipad).*applewebkit/i.test(h)?(i=(o=new y).port2,o.port1.onmessage=I,e=f(i.postMessage,i,1)):!u.addEventListener||"function"!=typeof postMessage||u.importScripts||a(E)?e="onreadystatechange"in l("script")?function(t){s.appendChild(l("script")).onreadystatechange=function(){s.removeChild(this),S(t)}}:function(t){setTimeout(w(t),0)}:(e=E,u.addEventListener("message",I,!1))),t.exports={set:v,clear:g}},MKAM:function(t,n,r){"use strict";var e=r("xDBR"),o=r("2oRo"),i=r("0Dky");t.exports=e||!i((function(){var t=Math.random();__defineSetter__.call(null,t,(function(){})),delete o[t]}))},MoCz:function(t,n,r){"use strict";var e=r("67WC"),o=r("5Yz+"),i=e.aTypedArray;e.exportProto("lastIndexOf",(function(t){return o.apply(i(this),arguments)}))},"N+g0":function(t,n,r){var e=r("g6v/"),o=r("m/L8"),i=r("glrk"),u=r("33Wh");t.exports=e?Object.defineProperties:function(t,n){i(t);for(var r,e=u(n),a=e.length,c=0;a>c;)o.f(t,r=e[c++],n[r]);return t}},NBAS:function(t,n,r){var e=r("I+eb"),o=r("0Dky"),i=r("ewvW"),u=r("4WOD"),a=r("4Xet");e({target:"Object",stat:!0,forced:o((function(){u(1)})),sham:!a},{getPrototypeOf:function(t){return u(i(t))}})},NaFW:function(t,n,r){var e=r("9d/t"),o=r("P4y1"),i=r("tiKp")("iterator");t.exports=function(t){if(null!=t)return t[i]||t["@@iterator"]||o[e(t)]}},"NbN+":function(t,n,r){r("I+eb")({target:"Number",stat:!0},{EPSILON:Math.pow(2,-52)})},Nqwi:function(t,n,r){},O741:function(t,n,r){var e=r("hh1v");t.exports=function(t){if(!e(t)&&null!==t)throw TypeError("Can't set "+String(t)+" as a prototype");return t}},OM9Z:function(t,n,r){r("I+eb")({target:"String",proto:!0},{repeat:r("EUja")})},Onu3:function(t,n,r){"use strict";var e=r("67WC"),o=r("tycR").findIndex,i=e.aTypedArray;e.exportProto("findIndex",(function(t){return o(i(this),t,arguments.length>1?arguments[1]:void 0)}))},P4y1:function(t,n){t.exports={}},P8wP:function(t,n,r){"use strict";var e=r("67WC"),o=r("tycR").map,i=r("SEBh"),u=e.aTypedArray,a=e.aTypedArrayConstructor;e.exportProto("map",(function(t){return o(u(this),t,arguments.length>1?arguments[1]:void 0,(function(t,n){return new(a(i(t,t.constructor)))(n)}))}))},PCVs:function(t,n,r){},PF2M:function(t,n,r){"use strict";var e=r("67WC"),o=r("UMSQ"),i=r("GC2F"),u=r("ewvW"),a=r("0Dky"),c=e.aTypedArray,f=a((function(){new Int8Array(1).set({})}));e.exportProto("set",(function(t){c(this);var n=i(arguments.length>1?arguments[1]:void 0,1),r=this.length,e=u(t),a=o(e.length),f=0;if(a+n>r)throw RangeError("Wrong length");for(;f<a;)this[n+f]=e[f++]}),f)},PKPk:function(t,n,r){"use strict";var e=r("ZUd8").charAt,o=r("afO8"),i=r("fdAy"),u=o.set,a=o.getterFor("String Iterator");i(String,"String",(function(t){u(this,{type:"String Iterator",string:String(t),index:0})}),(function(){var t,n=a(this),r=n.string,o=n.index;return o>=r.length?{value:void 0,done:!0}:(t=e(r,o),n.index+=t.length,{value:t,done:!1})}))},PqOI:function(t,n,r){var e=r("I+eb"),o=r("90hW"),i=Math.abs,u=Math.pow;e({target:"Math",stat:!0},{cbrt:function(t){return o(t=+t)*u(i(t),1/3)}})},PzqY:function(t,n,r){var e=r("I+eb"),o=r("g6v/"),i=r("glrk"),u=r("wE6v"),a=r("m/L8");e({target:"Reflect",stat:!0,forced:r("0Dky")((function(){Reflect.defineProperty(a.f({},1,{value:1}),1,{value:2})})),sham:!o},{defineProperty:function(t,n,r){i(t);var e=u(n,!0);i(r);try{return a.f(t,e,r),!0}catch(t){return!1}}})},QFcT:function(t,n,r){var e=r("I+eb"),o=Math.hypot,i=Math.abs,u=Math.sqrt;e({target:"Math",stat:!0,forced:!!o&&o(1/0,NaN)!==1/0},{hypot:function(t,n){for(var r,e,o=0,a=0,c=arguments.length,f=0;a<c;)f<(r=i(arguments[a++]))?(o=o*(e=f/r)*e+1,f=r):o+=r>0?(e=r/f)*e:r;return f===1/0?1/0:f*u(o)}})},QGkA:function(t,n,r){r("RNIs")("flat")},QIpd:function(t,n,r){var e=r("xrYK");t.exports=function(t){if("number"!=typeof t&&"Number"!=e(t))throw TypeError("Incorrect invocation");return+t}},QNnp:function(t,n,r){var e=r("I+eb"),o=Math.floor,i=Math.log,u=Math.LOG2E;e({target:"Math",stat:!0},{clz32:function(t){return(t>>>=0)?31-o(i(t+.5)*u):32}})},QWBl:function(t,n,r){"use strict";var e=r("I+eb"),o=r("F8JR");e({target:"Array",proto:!0,forced:[].forEach!=o},{forEach:o})},Qo9l:function(t,n,r){t.exports=r("2oRo")},RK3t:function(t,n,r){var e=r("0Dky"),o=r("xrYK"),i="".split;t.exports=e((function(){return!Object("z").propertyIsEnumerable(0)}))?function(t){return"String"==o(t)?i.call(t,""):Object(t)}:Object},RN6c:function(t,n,r){var e=r("2oRo");t.exports=function(t,n){var r=e.console;r&&r.error&&(1===arguments.length?r.error(t):r.error(t,n))}},RNIs:function(t,n,r){var e=r("tiKp"),o=r("fHMY"),i=r("kRJp"),u=e("unscopables"),a=Array.prototype;null==a[u]&&i(a,u,o(null)),t.exports=function(t){a[u][t]=!0}},ROdP:function(t,n,r){var e=r("hh1v"),o=r("xrYK"),i=r("tiKp")("match");t.exports=function(t){var n;return e(t)&&(void 0!==(n=t[i])?!!n:"RegExp"==o(t))}},Rfxz:function(t,n,r){"use strict";var e=r("I+eb"),o=r("tycR").some;e({target:"Array",proto:!0,forced:r("swFL")("some")},{some:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}})},Rm1S:function(t,n,r){"use strict";var e=r("14Sl"),o=r("glrk"),i=r("UMSQ"),u=r("HYAF"),a=r("iqWW"),c=r("FMNM");e("match",1,(function(t,n,r){return[function(n){var r=u(this),e=null==n?void 0:n[t];return void 0!==e?e.call(n,r):new RegExp(n)[t](String(r))},function(t){var e=r(n,t,this);if(e.done)return e.value;var u=o(t),f=String(this);if(!u.global)return c(u,f);var s=u.unicode;u.lastIndex=0;for(var l,h=[],p=0;null!==(l=c(u,f));){var v=String(l[0]);h[p]=v,""===v&&(u.lastIndex=a(f,i(u.lastIndex),s)),p++}return 0===p?null:h}]}))},SEBh:function(t,n,r){var e=r("glrk"),o=r("HAuM"),i=r("tiKp")("species");t.exports=function(t,n){var r,u=e(t).constructor;return void 0===u||null==(r=e(u)[i])?n:o(r)}},STAE:function(t,n,r){var e=r("0Dky");t.exports=!!Object.getOwnPropertySymbols&&!e((function(){return!String(Symbol())}))},SYor:function(t,n,r){"use strict";var e=r("I+eb"),o=r("WKiH").trim;e({target:"String",proto:!0,forced:r("4HCi")("trim")},{trim:function(){return o(this)}})},SpvK:function(t,n,r){r("dOgj")("Float64",8,(function(t){return function(n,r,e){return t(this,n,r,e)}}))},SuFq:function(t,n,r){var e=r("I+eb"),o=r("0GbY"),i=r("HAuM"),u=r("glrk"),a=r("hh1v"),c=r("fHMY"),f=r("BTho"),s=r("0Dky"),l=o("Reflect","construct"),h=s((function(){function t(){}return!(l((function(){}),[],t)instanceof t)})),p=!s((function(){l((function(){}))})),v=h||p;e({target:"Reflect",stat:!0,forced:v,sham:v},{construct:function(t,n){i(t),u(n);var r=arguments.length<3?t:i(arguments[2]);if(p&&!h)return l(t,n,r);if(t==r){switch(n.length){case 0:return new t;case 1:return new t(n[0]);case 2:return new t(n[0],n[1]);case 3:return new t(n[0],n[1],n[2]);case 4:return new t(n[0],n[1],n[2],n[3])}var e=[null];return e.push.apply(e,n),new(f.apply(t,e))}var o=r.prototype,s=c(a(o)?o:Object.prototype),v=Function.apply.call(t,s,n);return a(v)?v:s}})},T63A:function(t,n,r){var e=r("I+eb"),o=r("b1O7").entries;e({target:"Object",stat:!0},{entries:function(t){return o(t)}})},TFPT:function(t,n,r){"use strict";var e=r("I+eb"),o=r("hXpO");e({target:"String",proto:!0,forced:r("6unK")("sub")},{sub:function(){return o(this,"sub","","")}})},TWNs:function(t,n,r){var e=r("g6v/"),o=r("2oRo"),i=r("lMq5"),u=r("cVYH"),a=r("m/L8").f,c=r("JBy8").f,f=r("ROdP"),s=r("rW0t"),l=r("busE"),h=r("0Dky"),p=r("JiZb"),v=r("tiKp")("match"),g=o.RegExp,d=g.prototype,y=/a/g,b=/a/g,m=new g(y)!==y;if(e&&i("RegExp",!m||h((function(){return b[v]=!1,g(y)!=y||g(b)==b||"/a/i"!=g(y,"i")})))){for(var x=function(t,n){var r=this instanceof x,e=f(t),o=void 0===n;return!r&&e&&t.constructor===x&&o?t:u(m?new g(e&&!o?t.source:t,n):g((e=t instanceof x)?t.source:t,e&&o?s.call(t):n),r?this:d,x)},S=function(t){t in x||a(x,t,{configurable:!0,get:function(){return g[t]},set:function(n){g[t]=n}})},w=c(g),I=0;w.length>I;)S(w[I++]);d.constructor=x,x.prototype=d,l(o,"RegExp",x)}p("RegExp")},TWQb:function(t,n,r){var e=r("/GqU"),o=r("UMSQ"),i=r("I8vh"),u=function(t){return function(n,r,u){var a,c=e(n),f=o(c.length),s=i(u,f);if(t&&r!=r){for(;f>s;)if((a=c[s++])!=a)return!0}else for(;f>s;s++)if((t||s in c)&&c[s]===r)return t||s||0;return!t&&-1}};t.exports={includes:u(!0),indexOf:u(!1)}},TZCg:function(t,n,r){"use strict";var e=r("I+eb"),o=r("DMt2").start;e({target:"String",proto:!0,forced:r("aZxY")},{padStart:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}})},TeQF:function(t,n,r){"use strict";var e=r("I+eb"),o=r("tycR").filter;e({target:"Array",proto:!0,forced:!r("Hd5f")("filter")},{filter:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}})},TfTi:function(t,n,r){"use strict";var e=r("+MLx"),o=r("ewvW"),i=r("m92n"),u=r("6VoE"),a=r("UMSQ"),c=r("hBjN"),f=r("NaFW");t.exports=function(t){var n,r,s,l,h,p=o(t),v="function"==typeof this?this:Array,g=arguments.length,d=g>1?arguments[1]:void 0,y=void 0!==d,b=0,m=f(p);if(y&&(d=e(d,g>2?arguments[2]:void 0,2)),null==m||v==Array&&u(m))for(r=new v(n=a(p.length));n>b;b++)c(r,b,y?d(p[b],b):p[b]);else for(h=(l=m.call(p)).next,r=new v;!(s=h.call(l)).done;b++)c(r,b,y?i(l,d,[s.value,b],!0):s.value);return r.length=b,r}},ToJy:function(t,n,r){"use strict";var e=r("I+eb"),o=r("HAuM"),i=r("ewvW"),u=r("0Dky"),a=r("swFL"),c=[].sort,f=[1,2,3],s=u((function(){f.sort(void 0)})),l=u((function(){f.sort(null)})),h=a("sort");e({target:"Array",proto:!0,forced:s||!l||h},{sort:function(t){return void 0===t?c.call(i(this)):c.call(i(this),o(t))}})},Tskq:function(t,n,r){"use strict";var e=r("bWFh"),o=r("ZWaQ");t.exports=e("Map",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),o,!0)},U3f4:function(t,n,r){var e=r("g6v/"),o=r("m/L8"),i=r("rW0t");e&&"g"!=/./g.flags&&o.f(RegExp.prototype,"flags",{configurable:!0,get:i})},UMSQ:function(t,n,r){var e=r("ppGB"),o=Math.min;t.exports=function(t){return t>0?o(e(t),9007199254740991):0}},UTVS:function(t,n){var r={}.hasOwnProperty;t.exports=function(t,n){return r.call(t,n)}},UesL:function(t,n,r){"use strict";var e=r("glrk"),o=r("wE6v");t.exports=function(t){if("string"!==t&&"number"!==t&&"default"!==t)throw TypeError("Incorrect hint");return o(e(this),"number"!==t)}},UxlC:function(t,n,r){"use strict";var e=r("14Sl"),o=r("glrk"),i=r("ewvW"),u=r("UMSQ"),a=r("ppGB"),c=r("HYAF"),f=r("iqWW"),s=r("FMNM"),l=Math.max,h=Math.min,p=Math.floor,v=/\$([$&'`]|\d\d?|<[^>]*>)/g,g=/\$([$&'`]|\d\d?)/g;e("replace",2,(function(t,n,r){return[function(r,e){var o=c(this),i=null==r?void 0:r[t];return void 0!==i?i.call(r,o,e):n.call(String(o),r,e)},function(t,i){var c=r(n,t,this,i);if(c.done)return c.value;var p=o(t),v=String(this),g="function"==typeof i;g||(i=String(i));var d=p.global;if(d){var y=p.unicode;p.lastIndex=0}for(var b=[];;){var m=s(p,v);if(null===m)break;if(b.push(m),!d)break;""===String(m[0])&&(p.lastIndex=f(v,u(p.lastIndex),y))}for(var x,S="",w=0,I=0;I<b.length;I++){m=b[I];for(var E=String(m[0]),A=l(h(a(m.index),v.length),0),R=[],O=1;O<m.length;O++)R.push(void 0===(x=m[O])?x:String(x));var k=m.groups;if(g){var M=[E].concat(R,A,v);void 0!==k&&M.push(k);var T=String(i.apply(void 0,M))}else T=e(E,v,A,R,k,i);A>=w&&(S+=v.slice(w,A)+T,w=A+E.length)}return S+v.slice(w)}];function e(t,r,e,o,u,a){var c=e+t.length,f=o.length,s=g;return void 0!==u&&(u=i(u),s=v),n.call(a,s,(function(n,i){var a;switch(i.charAt(0)){case"$":return"$";case"&":return t;case"`":return r.slice(0,e);case"'":return r.slice(c);case"<":a=u[i.slice(1,-1)];break;default:var s=+i;if(0===s)return n;if(s>f){var l=p(s/10);return 0===l?n:l<=f?void 0===o[l-1]?i.charAt(1):o[l-1]+i.charAt(1):n}a=o[s-1]}return void 0===a?"":a}))}}))},Uydy:function(t,n,r){var e=r("I+eb"),o=r("HsHA"),i=Math.acosh,u=Math.log,a=Math.sqrt,c=Math.LN2;e({target:"Math",stat:!0,forced:!i||710!=Math.floor(i(Number.MAX_VALUE))||i(1/0)!=1/0},{acosh:function(t){return(t=+t)<1?NaN:t>94906265.62425156?u(t)+c:o(t-1+a(t-1)*a(t+1))}})},VC3L:function(t,n,r){"use strict";var e=r("I+eb"),o=r("0Dky"),i=r("QIpd"),u=1..toPrecision;e({target:"Number",proto:!0,forced:o((function(){return"1"!==u.call(1,void 0)}))||!o((function(){u.call({})}))},{toPrecision:function(t){return void 0===t?u.call(i(this)):u.call(i(this),t)}})},VpIT:function(t,n,r){var e=r("xDBR"),o=r("xs3f");(t.exports=function(t,n){return o[t]||(o[t]=void 0!==n?n:{})})("versions",[]).push({version:"3.3.5",mode:e?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},Vu81:function(t,n,r){var e=r("0GbY"),o=r("JBy8"),i=r("dBg+"),u=r("glrk");t.exports=e("Reflect","ownKeys")||function(t){var n=o.f(u(t)),r=i.f;return r?n.concat(r(t)):n}},"W/eh":function(t,n,r){"use strict";var e=r("I+eb"),o=r("g6v/"),i=r("MKAM"),u=r("ewvW"),a=r("wE6v"),c=r("4WOD"),f=r("Bs8V").f;o&&e({target:"Object",proto:!0,forced:i},{__lookupSetter__:function(t){var n,r=u(this),e=a(t,!0);do{if(n=f(r,e))return n.set}while(r=c(r))}})},WDsR:function(t,n,r){var e=r("I+eb"),o=r("Xol8"),i=Math.abs;e({target:"Number",stat:!0},{isSafeInteger:function(t){return o(t)&&i(t)<=9007199254740991}})},WJkJ:function(t,n){t.exports="\t\n\v\f\r                　\u2028\u2029\ufeff"},WKiH:function(t,n,r){var e=r("HYAF"),o="["+r("WJkJ")+"]",i=RegExp("^"+o+o+"*"),u=RegExp(o+o+"*$"),a=function(t){return function(n){var r=String(e(n));return 1&t&&(r=r.replace(i,"")),2&t&&(r=r.replace(u,"")),r}};t.exports={start:a(1),end:a(2),trim:a(3)}},WjRb:function(t,n,r){var e=r("ROdP");t.exports=function(t){if(e(t))throw TypeError("The method doesn't accept regular expressions");return t}},X5Zq:function(t,n,r){"use strict";var e=r("67WC"),o=e.aTypedArray,i=[].join;e.exportProto("join",(function(t){return i.apply(o(this),arguments)}))},XGwC:function(t,n){t.exports=function(t,n){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:n}}},XMab:function(t,n,r){r("dOgj")("Uint8",1,(function(t){return function(n,r,e){return t(this,n,r,e)}}))},XUE8:function(t,n,r){var e=r("I+eb"),o=r("hh1v"),i=r("glrk"),u=r("UTVS"),a=r("Bs8V"),c=r("4WOD");e({target:"Reflect",stat:!0},{get:function t(n,r){var e,f,s=arguments.length<3?n:arguments[2];return i(n)===s?n[r]:(e=a.f(n,r))?u(e,"value")?e.value:void 0===e.get?void 0:e.get.call(s):o(f=c(n))?t(f,r,s):void 0}})},XbcX:function(t,n,r){"use strict";var e=r("I+eb"),o=r("or9q"),i=r("ewvW"),u=r("UMSQ"),a=r("HAuM"),c=r("ZfDv");e({target:"Array",proto:!0},{flatMap:function(t){var n,r=i(this),e=u(r.length);return a(t),(n=c(r,0)).length=o(n,r,r,e,0,1,t,arguments.length>1?arguments[1]:void 0),n}})},Xe3L:function(t,n,r){"use strict";var e=r("I+eb"),o=r("0Dky"),i=r("hBjN");e({target:"Array",stat:!0,forced:o((function(){function t(){}return!(Array.of.call(t)instanceof t)}))},{of:function(){for(var t=0,n=arguments.length,r=new("function"==typeof this?this:Array)(n);n>t;)i(r,t,arguments[t++]);return r.length=n,r}})},Xol8:function(t,n,r){var e=r("hh1v"),o=Math.floor;t.exports=function(t){return!e(t)&&isFinite(t)&&o(t)===t}},YGK4:function(t,n,r){"use strict";var e=r("bWFh"),o=r("ZWaQ");t.exports=e("Set",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),o)},YK6W:function(t,n,r){var e,o,i=r("2oRo"),u=r("s5pE"),a=i.process,c=a&&a.versions,f=c&&c.v8;f?o=(e=f.split("."))[0]+e[1]:u&&(e=u.match(/Chrome\/(\d+)/))&&(o=e[1]),t.exports=o&&+o},YL0P:function(t,n,r){"use strict";var e=r("2oRo"),o=r("67WC"),i=r("4mDm"),u=r("tiKp")("iterator"),a=e.Uint8Array,c=i.values,f=i.keys,s=i.entries,l=o.aTypedArray,h=o.exportProto,p=a&&a.prototype[u],v=!!p&&("values"==p.name||null==p.name),g=function(){return c.call(l(this))};h("entries",(function(){return s.call(l(this))})),h("keys",(function(){return f.call(l(this))})),h("values",g,!v),h(u,g,!v)},YNrV:function(t,n,r){"use strict";var e=r("g6v/"),o=r("0Dky"),i=r("33Wh"),u=r("dBg+"),a=r("0eef"),c=r("ewvW"),f=r("RK3t"),s=Object.assign;t.exports=!s||o((function(){var t={},n={},r=Symbol();return t[r]=7,"abcdefghijklmnopqrst".split("").forEach((function(t){n[t]=t})),7!=s({},t)[r]||"abcdefghijklmnopqrst"!=i(s({},n)).join("")}))?function(t,n){for(var r=c(t),o=arguments.length,s=1,l=u.f,h=a.f;o>s;)for(var p,v=f(arguments[s++]),g=l?i(v).concat(l(v)):i(v),d=g.length,y=0;d>y;)p=g[y++],e&&!h.call(v,p)||(r[p]=v[p]);return r}:s},Yhre:function(t,n,r){"use strict";var e=r("2oRo"),o=r("g6v/"),i=r("67WC").NATIVE_ARRAY_BUFFER,u=r("kRJp"),a=r("4syw"),c=r("0Dky"),f=r("GarU"),s=r("ppGB"),l=r("UMSQ"),h=r("CyXQ"),p=r("JBy8").f,v=r("m/L8").f,g=r("gdVl"),d=r("1E5z"),y=r("afO8"),b=y.get,m=y.set,x=e.ArrayBuffer,S=x,w=e.DataView,I=e.Math,E=e.RangeError,A=I.abs,R=I.pow,O=I.floor,k=I.log,M=I.LN2,T=function(t,n,r){var e,o,i,u=new Array(r),a=8*r-n-1,c=(1<<a)-1,f=c>>1,s=23===n?R(2,-24)-R(2,-77):0,l=t<0||0===t&&1/t<0?1:0,h=0;for((t=A(t))!=t||t===1/0?(o=t!=t?1:0,e=c):(e=O(k(t)/M),t*(i=R(2,-e))<1&&(e--,i*=2),(t+=e+f>=1?s/i:s*R(2,1-f))*i>=2&&(e++,i/=2),e+f>=c?(o=0,e=c):e+f>=1?(o=(t*i-1)*R(2,n),e+=f):(o=t*R(2,f-1)*R(2,n),e=0));n>=8;u[h++]=255&o,o/=256,n-=8);for(e=e<<n|o,a+=n;a>0;u[h++]=255&e,e/=256,a-=8);return u[--h]|=128*l,u},L=function(t,n){var r,e=t.length,o=8*e-n-1,i=(1<<o)-1,u=i>>1,a=o-7,c=e-1,f=t[c--],s=127&f;for(f>>=7;a>0;s=256*s+t[c],c--,a-=8);for(r=s&(1<<-a)-1,s>>=-a,a+=n;a>0;r=256*r+t[c],c--,a-=8);if(0===s)s=1-u;else{if(s===i)return r?NaN:f?-1/0:1/0;r+=R(2,n),s-=u}return(f?-1:1)*r*R(2,s-n)},j=function(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]},U=function(t){return[255&t]},W=function(t){return[255&t,t>>8&255]},N=function(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]},P=function(t){return T(t,23,4)},F=function(t){return T(t,52,8)},D=function(t,n){v(t.prototype,n,{get:function(){return b(this)[n]}})},B=function(t,n,r,e){var o=h(+r),i=b(t);if(o+n>i.byteLength)throw E("Wrong index");var u=b(i.buffer).bytes,a=o+i.byteOffset,c=u.slice(a,a+n);return e?c:c.reverse()},C=function(t,n,r,e,o,i){var u=h(+r),a=b(t);if(u+n>a.byteLength)throw E("Wrong index");for(var c=b(a.buffer).bytes,f=u+a.byteOffset,s=e(+o),l=0;l<n;l++)c[f+l]=s[i?l:n-l-1]};if(i){if(!c((function(){x(1)}))||!c((function(){new x(-1)}))||c((function(){return new x,new x(1.5),new x(NaN),"ArrayBuffer"!=x.name}))){for(var G,V=(S=function(t){return f(this,S),new x(h(t))}).prototype=x.prototype,Y=p(x),K=0;Y.length>K;)(G=Y[K++])in S||u(S,G,x[G]);V.constructor=S}var q=new w(new S(2)),H=w.prototype.setInt8;q.setInt8(0,2147483648),q.setInt8(1,2147483649),!q.getInt8(0)&&q.getInt8(1)||a(w.prototype,{setInt8:function(t,n){H.call(this,t,n<<24>>24)},setUint8:function(t,n){H.call(this,t,n<<24>>24)}},{unsafe:!0})}else S=function(t){f(this,S,"ArrayBuffer");var n=h(t);m(this,{bytes:g.call(new Array(n),0),byteLength:n}),o||(this.byteLength=n)},w=function(t,n,r){f(this,w,"DataView"),f(t,S,"DataView");var e=b(t).byteLength,i=s(n);if(i<0||i>e)throw E("Wrong offset");if(i+(r=void 0===r?e-i:l(r))>e)throw E("Wrong length");m(this,{buffer:t,byteLength:r,byteOffset:i}),o||(this.buffer=t,this.byteLength=r,this.byteOffset=i)},o&&(D(S,"byteLength"),D(w,"buffer"),D(w,"byteLength"),D(w,"byteOffset")),a(w.prototype,{getInt8:function(t){return B(this,1,t)[0]<<24>>24},getUint8:function(t){return B(this,1,t)[0]},getInt16:function(t){var n=B(this,2,t,arguments.length>1?arguments[1]:void 0);return(n[1]<<8|n[0])<<16>>16},getUint16:function(t){var n=B(this,2,t,arguments.length>1?arguments[1]:void 0);return n[1]<<8|n[0]},getInt32:function(t){return j(B(this,4,t,arguments.length>1?arguments[1]:void 0))},getUint32:function(t){return j(B(this,4,t,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(t){return L(B(this,4,t,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(t){return L(B(this,8,t,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(t,n){C(this,1,t,U,n)},setUint8:function(t,n){C(this,1,t,U,n)},setInt16:function(t,n){C(this,2,t,W,n,arguments.length>2?arguments[2]:void 0)},setUint16:function(t,n){C(this,2,t,W,n,arguments.length>2?arguments[2]:void 0)},setInt32:function(t,n){C(this,4,t,N,n,arguments.length>2?arguments[2]:void 0)},setUint32:function(t,n){C(this,4,t,N,n,arguments.length>2?arguments[2]:void 0)},setFloat32:function(t,n){C(this,4,t,P,n,arguments.length>2?arguments[2]:void 0)},setFloat64:function(t,n){C(this,8,t,F,n,arguments.length>2?arguments[2]:void 0)}});d(S,"ArrayBuffer"),d(w,"DataView"),t.exports={ArrayBuffer:S,DataView:w}},ZJ55:function(t,n,r){"use strict";var e=r("67WC"),o=r("tycR").some,i=e.aTypedArray;e.exportProto("some",(function(t){return o(i(this),t,arguments.length>1?arguments[1]:void 0)}))},ZOXb:function(t,n,r){"use strict";var e=r("0Dky"),o=r("DMt2").start,i=Math.abs,u=Date.prototype,a=u.getTime,c=u.toISOString;t.exports=e((function(){return"0385-07-25T07:06:39.999Z"!=c.call(new Date(-5e13-1))}))||!e((function(){c.call(new Date(NaN))}))?function(){if(!isFinite(a.call(this)))throw RangeError("Invalid time value");var t=this.getUTCFullYear(),n=this.getUTCMilliseconds(),r=t<0?"-":t>9999?"+":"";return r+o(i(t),r?6:4,0)+"-"+o(this.getUTCMonth()+1,2,0)+"-"+o(this.getUTCDate(),2,0)+"T"+o(this.getUTCHours(),2,0)+":"+o(this.getUTCMinutes(),2,0)+":"+o(this.getUTCSeconds(),2,0)+"."+o(n,3,0)+"Z"}:c},ZUd8:function(t,n,r){var e=r("ppGB"),o=r("HYAF"),i=function(t){return function(n,r){var i,u,a=String(o(n)),c=e(r),f=a.length;return c<0||c>=f?t?"":void 0:(i=a.charCodeAt(c))<55296||i>56319||c+1===f||(u=a.charCodeAt(c+1))<56320||u>57343?t?a.charAt(c):i:t?a.slice(c,c+2):u-56320+(i-55296<<10)+65536}};t.exports={codeAt:i(!1),charAt:i(!0)}},ZWaQ:function(t,n,r){"use strict";var e=r("m/L8").f,o=r("fHMY"),i=r("4syw"),u=r("+MLx"),a=r("GarU"),c=r("ImZN"),f=r("fdAy"),s=r("JiZb"),l=r("g6v/"),h=r("8YOa").fastKey,p=r("afO8"),v=p.set,g=p.getterFor;t.exports={getConstructor:function(t,n,r,f){var s=t((function(t,e){a(t,s,n),v(t,{type:n,index:o(null),first:void 0,last:void 0,size:0}),l||(t.size=0),null!=e&&c(e,t[f],t,r)})),p=g(n),d=function(t,n,r){var e,o,i=p(t),u=y(t,n);return u?u.value=r:(i.last=u={index:o=h(n,!0),key:n,value:r,previous:e=i.last,next:void 0,removed:!1},i.first||(i.first=u),e&&(e.next=u),l?i.size++:t.size++,"F"!==o&&(i.index[o]=u)),t},y=function(t,n){var r,e=p(t),o=h(n);if("F"!==o)return e.index[o];for(r=e.first;r;r=r.next)if(r.key==n)return r};return i(s.prototype,{clear:function(){for(var t=p(this),n=t.index,r=t.first;r;)r.removed=!0,r.previous&&(r.previous=r.previous.next=void 0),delete n[r.index],r=r.next;t.first=t.last=void 0,l?t.size=0:this.size=0},delete:function(t){var n=p(this),r=y(this,t);if(r){var e=r.next,o=r.previous;delete n.index[r.index],r.removed=!0,o&&(o.next=e),e&&(e.previous=o),n.first==r&&(n.first=e),n.last==r&&(n.last=o),l?n.size--:this.size--}return!!r},forEach:function(t){for(var n,r=p(this),e=u(t,arguments.length>1?arguments[1]:void 0,3);n=n?n.next:r.first;)for(e(n.value,n.key,this);n&&n.removed;)n=n.previous},has:function(t){return!!y(this,t)}}),i(s.prototype,r?{get:function(t){var n=y(this,t);return n&&n.value},set:function(t,n){return d(this,0===t?0:t,n)}}:{add:function(t){return d(this,t=0===t?0:t,t)}}),l&&e(s.prototype,"size",{get:function(){return p(this).size}}),s},setStrong:function(t,n,r){var e=n+" Iterator",o=g(n),i=g(e);f(t,n,(function(t,n){v(this,{type:e,target:t,state:o(t),kind:n,last:void 0})}),(function(){for(var t=i(this),n=t.kind,r=t.last;r&&r.removed;)r=r.previous;return t.target&&(t.last=r=r?r.next:t.state.first)?"keys"==n?{value:r.key,done:!1}:"values"==n?{value:r.value,done:!1}:{value:[r.key,r.value],done:!1}:(t.target=void 0,{value:void 0,done:!0})}),r?"entries":"values",!r,!0),s(n)}}},ZfDv:function(t,n,r){var e=r("hh1v"),o=r("6LWA"),i=r("tiKp")("species");t.exports=function(t,n){var r;return o(t)&&("function"!=typeof(r=t.constructor)||r!==Array&&!o(r.prototype)?e(r)&&null===(r=r[i])&&(r=void 0):r=void 0),new(void 0===r?Array:r)(0===n?0:n)}},Zk8X:function(t,n,r){"use strict";var e=r("I+eb"),o=r("hXpO");e({target:"String",proto:!0,forced:r("6unK")("sup")},{sup:function(){return o(this,"sup","","")}})},a57n:function(t,n,r){r("dG/n")("search")},a5NK:function(t,n,r){var e=r("I+eb"),o=Math.log,i=Math.LOG10E;e({target:"Math",stat:!0},{log10:function(t){return o(t)*i}})},aZxY:function(t,n,r){var e=r("s5pE");t.exports=/Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(e)},afO8:function(t,n,r){var e,o,i,u=r("f5p1"),a=r("2oRo"),c=r("hh1v"),f=r("kRJp"),s=r("UTVS"),l=r("93I0"),h=r("0BK2"),p=a.WeakMap;if(u){var v=new p,g=v.get,d=v.has,y=v.set;e=function(t,n){return y.call(v,t,n),n},o=function(t){return g.call(v,t)||{}},i=function(t){return d.call(v,t)}}else{var b=l("state");h[b]=!0,e=function(t,n){return f(t,b,n),n},o=function(t){return s(t,b)?t[b]:{}},i=function(t){return s(t,b)}}t.exports={set:e,get:o,has:i,enforce:function(t){return i(t)?o(t):e(t,{})},getterFor:function(t){return function(n){var r;if(!c(n)||(r=o(n)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return r}}}},"b+VT":function(t,n,r){var e=r("2oRo"),o=r("WKiH").trim,i=r("WJkJ"),u=e.parseFloat,a=1/u(i+"-0")!=-1/0;t.exports=a?function(t){var n=o(String(t)),r=u(n);return 0===r&&"-"==n.charAt(0)?-0:r}:u},b1O7:function(t,n,r){var e=r("g6v/"),o=r("33Wh"),i=r("/GqU"),u=r("0eef").f,a=function(t){return function(n){for(var r,a=i(n),c=o(a),f=c.length,s=0,l=[];f>s;)r=c[s++],e&&!u.call(a,r)||l.push(t?[r,a[r]]:a[r]);return l}};t.exports={entries:a(!0),values:a(!1)}},bWFh:function(t,n,r){"use strict";var e=r("I+eb"),o=r("2oRo"),i=r("lMq5"),u=r("busE"),a=r("8YOa"),c=r("ImZN"),f=r("GarU"),s=r("hh1v"),l=r("0Dky"),h=r("HH4o"),p=r("1E5z"),v=r("cVYH");t.exports=function(t,n,r,g,d){var y=o[t],b=y&&y.prototype,m=y,x=g?"set":"add",S={},w=function(t){var n=b[t];u(b,t,"add"==t?function(t){return n.call(this,0===t?0:t),this}:"delete"==t?function(t){return!(d&&!s(t))&&n.call(this,0===t?0:t)}:"get"==t?function(t){return d&&!s(t)?void 0:n.call(this,0===t?0:t)}:"has"==t?function(t){return!(d&&!s(t))&&n.call(this,0===t?0:t)}:function(t,r){return n.call(this,0===t?0:t,r),this})};if(i(t,"function"!=typeof y||!(d||b.forEach&&!l((function(){(new y).entries().next()})))))m=r.getConstructor(n,t,g,x),a.REQUIRED=!0;else if(i(t,!0)){var I=new m,E=I[x](d?{}:-0,1)!=I,A=l((function(){I.has(1)})),R=h((function(t){new y(t)})),O=!d&&l((function(){for(var t=new y,n=5;n--;)t[x](n,n);return!t.has(-0)}));R||((m=n((function(n,r){f(n,m,t);var e=v(new y,n,m);return null!=r&&c(r,e[x],e,g),e}))).prototype=b,b.constructor=m),(A||O)&&(w("delete"),w("has"),g&&w("get")),(O||E)&&w(x),d&&b.clear&&delete b.clear}return S[t]=m,e({global:!0,forced:m!=y},S),p(m,t),d||r.setStrong(m,t,g),m}},busE:function(t,n,r){var e=r("2oRo"),o=r("VpIT"),i=r("kRJp"),u=r("UTVS"),a=r("zk60"),c=r("noGo"),f=r("afO8"),s=f.get,l=f.enforce,h=String(c).split("toString");o("inspectSource",(function(t){return c.call(t)})),(t.exports=function(t,n,r,o){var c=!!o&&!!o.unsafe,f=!!o&&!!o.enumerable,s=!!o&&!!o.noTargetGet;"function"==typeof r&&("string"!=typeof n||u(r,"name")||i(r,"name",n),l(r).source=h.join("string"==typeof n?n:"")),t!==e?(c?!s&&t[n]&&(f=!0):delete t[n],f?t[n]=r:i(t,n,r)):f?t[n]=r:a(n,r)})(Function.prototype,"toString",(function(){return"function"==typeof this&&s(this).source||c.call(this)}))},c162:function(t,n,r){"use strict";var e=r("67WC"),o=r("gdVl"),i=e.aTypedArray;e.exportProto("fill",(function(t){return o.apply(i(this),arguments)}))},c9m3:function(t,n,r){r("RNIs")("flatMap")},cDke:function(t,n,r){var e=r("I+eb"),o=r("0Dky"),i=r("BX/b").f;e({target:"Object",stat:!0,forced:o((function(){return!Object.getOwnPropertyNames(1)}))},{getOwnPropertyNames:i})},cVYH:function(t,n,r){var e=r("hh1v"),o=r("0rvr");t.exports=function(t,n,r){var i,u;return o&&"function"==typeof(i=n.constructor)&&i!==r&&e(u=i.prototype)&&u!==r.prototype&&o(t,u),t}},cvf0:function(t,n,r){"use strict";var e=r("2oRo"),o=r("67WC"),i=r("0Dky"),u=e.Uint8Array,a=u&&u.prototype,c=[].toString,f=[].join;i((function(){c.call({})}))&&(c=function(){return f.call(this)}),o.exportProto("toString",c,(a||{}).toString!=c)},"dBg+":function(t,n){n.f=Object.getOwnPropertySymbols},"dG/n":function(t,n,r){var e=r("Qo9l"),o=r("UTVS"),i=r("wDLo"),u=r("m/L8").f;t.exports=function(t){var n=e.Symbol||(e.Symbol={});o(n,t)||u(n,t,{value:i.f(t)})}},dOgj:function(t,n,r){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var o=r("I+eb"),i=r("2oRo"),u=r("g6v/"),a=r("FmqS"),c=r("67WC"),f=r("Yhre"),s=r("GarU"),l=r("XGwC"),h=r("kRJp"),p=r("UMSQ"),v=r("CyXQ"),g=r("GC2F"),d=r("wE6v"),y=r("UTVS"),b=r("9d/t"),m=r("hh1v"),x=r("fHMY"),S=r("0rvr"),w=r("JBy8").f,I=r("oHi+"),E=r("tycR").forEach,A=r("JiZb"),R=r("m/L8"),O=r("Bs8V"),k=r("afO8"),M=k.get,T=k.set,L=R.f,j=O.f,U=Math.round,W=i.RangeError,N=f.ArrayBuffer,P=f.DataView,F=c.NATIVE_ARRAY_BUFFER_VIEWS,D=c.TYPED_ARRAY_TAG,B=c.TypedArray,C=c.TypedArrayPrototype,G=c.aTypedArrayConstructor,V=c.isTypedArray,Y=function(t,n){for(var r=0,e=n.length,o=new(G(t))(e);e>r;)o[r]=n[r++];return o},K=function(t,n){L(t,n,{get:function(){return M(this)[n]}})},q=function(t){var n;return t instanceof N||"ArrayBuffer"==(n=b(t))||"SharedArrayBuffer"==n},H=function(t,n){return V(t)&&"symbol"!=e(n)&&n in t&&String(+n)==String(n)},z=function(t,n){return H(t,n=d(n,!0))?l(2,t[n]):j(t,n)},_=function(t,n,r){return!(H(t,n=d(n,!0))&&m(r)&&y(r,"value"))||y(r,"get")||y(r,"set")||r.configurable||y(r,"writable")&&!r.writable||y(r,"enumerable")&&!r.enumerable?L(t,n,r):(t[n]=r.value,t)};u?(F||(O.f=z,R.f=_,K(C,"buffer"),K(C,"byteOffset"),K(C,"byteLength"),K(C,"length")),o({target:"Object",stat:!0,forced:!F},{getOwnPropertyDescriptor:z,defineProperty:_}),t.exports=function(t,n,r,e){var u=t+(e?"Clamped":"")+"Array",c="get"+t,f="set"+t,l=i[u],d=l,y=d&&d.prototype,b={},R=function(t,r){L(t,r,{get:function(){return function(t,r){var e=M(t);return e.view[c](r*n+e.byteOffset,!0)}(this,r)},set:function(t){return function(t,r,o){var i=M(t);e&&(o=(o=U(o))<0?0:o>255?255:255&o),i.view[f](r*n+i.byteOffset,o,!0)}(this,r,t)},enumerable:!0})};F?a&&(d=r((function(t,r,e,o){return s(t,d,u),m(r)?q(r)?void 0!==o?new l(r,g(e,n),o):void 0!==e?new l(r,g(e,n)):new l(r):V(r)?Y(d,r):I.call(d,r):new l(v(r))})),S&&S(d,B),E(w(l),(function(t){t in d||h(d,t,l[t])})),d.prototype=y):(d=r((function(t,r,e,o){s(t,d,u);var i,a,c,f=0,l=0;if(m(r)){if(!q(r))return V(r)?Y(d,r):I.call(d,r);i=r,l=g(e,n);var h=r.byteLength;if(void 0===o){if(h%n)throw W("Wrong length");if((a=h-l)<0)throw W("Wrong length")}else if((a=p(o)*n)+l>h)throw W("Wrong length");c=a/n}else c=v(r),i=new N(a=c*n);for(T(t,{buffer:i,byteOffset:l,byteLength:a,length:c,view:new P(i)});f<c;)R(t,f++)})),S&&S(d,B),y=d.prototype=x(C)),y.constructor!==d&&h(y,"constructor",d),D&&h(y,D,u),b[u]=d,o({global:!0,forced:d!=l,sham:!F},b),"BYTES_PER_ELEMENT"in d||h(d,"BYTES_PER_ELEMENT",n),"BYTES_PER_ELEMENT"in y||h(y,"BYTES_PER_ELEMENT",n),A(u)}):t.exports=function(){}},"eDl+":function(t,n){t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},eJiR:function(t,n,r){var e=r("I+eb"),o=r("jrUv"),i=Math.exp;e({target:"Math",stat:!0},{tanh:function(t){var n=o(t=+t),r=o(-t);return n==1/0?1:r==1/0?-1:(n-r)/(i(t)+i(-t))}})},eajv:function(t,n,r){var e=r("I+eb"),o=Math.asinh,i=Math.log,u=Math.sqrt;e({target:"Math",stat:!0,forced:!(o&&1/o(0)>0)},{asinh:function t(n){return isFinite(n=+n)&&0!=n?n<0?-t(-n):i(n+u(n*n+1)):n}})},eoL8:function(t,n,r){var e=r("I+eb"),o=r("g6v/");e({target:"Object",stat:!0,forced:!o,sham:!o},{defineProperty:r("m/L8").f})},ewvW:function(t,n,r){var e=r("HYAF");t.exports=function(t){return Object(e(t))}},f3jH:function(t,n,r){var e=r("I+eb"),o=r("glrk"),i=r("4WOD");e({target:"Reflect",stat:!0,sham:!r("4Xet")},{getPrototypeOf:function(t){return i(o(t))}})},f5p1:function(t,n,r){var e=r("2oRo"),o=r("noGo"),i=e.WeakMap;t.exports="function"==typeof i&&/native code/.test(o.call(i))},fHMY:function(t,n,r){var e=r("glrk"),o=r("N+g0"),i=r("eDl+"),u=r("0BK2"),a=r("G+Rx"),c=r("zBJ4"),f=r("93I0")("IE_PROTO"),s=function(){},l=function(){var t,n=c("iframe"),r=i.length;for(n.style.display="none",a.appendChild(n),n.src=String("javascript:"),(t=n.contentWindow.document).open(),t.write("<script>document.F=Object<\/script>"),t.close(),l=t.F;r--;)delete l.prototype[i[r]];return l()};t.exports=Object.create||function(t,n){var r;return null!==t?(s.prototype=e(t),r=new s,s.prototype=null,r[f]=t):r=l(),void 0===n?r:o(r,n)},u[f]=!0},fbCW:function(t,n,r){"use strict";var e=r("I+eb"),o=r("tycR").find,i=r("RNIs"),u=!0;"find"in[]&&Array(1).find((function(){u=!1})),e({target:"Array",proto:!0,forced:u},{find:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}}),i("find")},fdAy:function(t,n,r){"use strict";var e=r("I+eb"),o=r("ntOU"),i=r("4WOD"),u=r("0rvr"),a=r("1E5z"),c=r("kRJp"),f=r("busE"),s=r("tiKp"),l=r("xDBR"),h=r("P4y1"),p=r("rpNk"),v=p.IteratorPrototype,g=p.BUGGY_SAFARI_ITERATORS,d=s("iterator"),y=function(){return this};t.exports=function(t,n,r,s,p,b,m){o(r,n,s);var x,S,w,I=function(t){if(t===p&&k)return k;if(!g&&t in R)return R[t];switch(t){case"keys":case"values":case"entries":return function(){return new r(this,t)}}return function(){return new r(this)}},E=n+" Iterator",A=!1,R=t.prototype,O=R[d]||R["@@iterator"]||p&&R[p],k=!g&&O||I(p),M="Array"==n&&R.entries||O;if(M&&(x=i(M.call(new t)),v!==Object.prototype&&x.next&&(l||i(x)===v||(u?u(x,v):"function"!=typeof x[d]&&c(x,d,y)),a(x,E,!0,!0),l&&(h[E]=y))),"values"==p&&O&&"values"!==O.name&&(A=!0,k=function(){return O.call(this)}),l&&!m||R[d]===k||c(R,d,k),h[n]=k,p)if(S={values:I("values"),keys:b?k:I("keys"),entries:I("entries")},m)for(w in S)!g&&!A&&w in R||f(R,w,S[w]);else e({target:n,proto:!0,forced:g||A},S);return S}},ftMj:function(t,n,r){var e=r("I+eb"),o=r("glrk"),i=r("hh1v"),u=r("UTVS"),a=r("m/L8"),c=r("Bs8V"),f=r("4WOD"),s=r("XGwC");e({target:"Reflect",stat:!0},{set:function t(n,r,e){var l,h,p=arguments.length<4?n:arguments[3],v=c.f(o(n),r);if(!v){if(i(h=f(n)))return t(h,r,e,p);v=s(0)}if(u(v,"value")){if(!1===v.writable||!i(p))return!1;if(l=c.f(p,r)){if(l.get||l.set||!1===l.writable)return!1;l.value=e,a.f(p,r,l)}else a.f(p,r,s(0,e));return!0}return void 0!==v.set&&(v.set.call(p,e),!0)}})},"g6v/":function(t,n,r){var e=r("0Dky");t.exports=!e((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},gOCb:function(t,n,r){r("dG/n")("replace")},gXIK:function(t,n,r){r("dG/n")("toPrimitive")},gbiT:function(t,n,r){r("dG/n")("unscopables")},gdVl:function(t,n,r){"use strict";var e=r("ewvW"),o=r("I8vh"),i=r("UMSQ");t.exports=function(t){for(var n=e(this),r=i(n.length),u=arguments.length,a=o(u>1?arguments[1]:void 0,r),c=u>2?arguments[2]:void 0,f=void 0===c?r:o(c,r);f>a;)n[a++]=t;return n}},glrk:function(t,n,r){var e=r("hh1v");t.exports=function(t){if(!e(t))throw TypeError(String(t)+" is not an object");return t}},gtqK:function(t,n,r){var e=r("I+eb"),o=r("67WC");e({target:"ArrayBuffer",stat:!0,forced:!o.NATIVE_ARRAY_BUFFER_VIEWS},{isView:o.isView})},gvgV:function(t,n,r){"use strict";var e=r("67WC"),o=r("TWQb").includes,i=e.aTypedArray;e.exportProto("includes",(function(t){return o(i(this),t,arguments.length>1?arguments[1]:void 0)}))},hBjN:function(t,n,r){"use strict";var e=r("wE6v"),o=r("m/L8"),i=r("XGwC");t.exports=function(t,n,r){var u=e(n);u in t?o.f(t,u,i(0,r)):t[u]=r}},hByQ:function(t,n,r){"use strict";var e=r("14Sl"),o=r("glrk"),i=r("HYAF"),u=r("Ep9I"),a=r("FMNM");e("search",1,(function(t,n,r){return[function(n){var r=i(this),e=null==n?void 0:n[t];return void 0!==e?e.call(n,r):new RegExp(n)[t](String(r))},function(t){var e=r(n,t,this);if(e.done)return e.value;var i=o(t),c=String(this),f=i.lastIndex;u(f,0)||(i.lastIndex=0);var s=a(i,c);return u(i.lastIndex,f)||(i.lastIndex=f),null===s?-1:s.index}]}))},hDyC:function(t,n,r){"use strict";var e=r("I+eb"),o=r("DMt2").end;e({target:"String",proto:!0,forced:r("aZxY")},{padEnd:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}})},hMMk:function(t,n,r){r("dOgj")("Uint16",2,(function(t){return function(n,r,e){return t(this,n,r,e)}}))},hXpO:function(t,n,r){var e=r("HYAF"),o=/"/g;t.exports=function(t,n,r,i){var u=String(e(t)),a="<"+n;return""!==r&&(a+=" "+r+'="'+String(i).replace(o,"&quot;")+'"'),a+">"+u+"</"+n+">"}},hh1v:function(t,n){function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}t.exports=function(t){return"object"===r(t)?null!==t:"function"==typeof t}},i5pp:function(t,n,r){var e=r("I+eb"),o=r("glrk"),i=r("O741"),u=r("0rvr");u&&e({target:"Reflect",stat:!0},{setPrototypeOf:function(t,n){o(t),i(n);try{return u(t,n),!0}catch(t){return!1}}})},i6QF:function(t,n,r){r("I+eb")({target:"Number",stat:!0},{isInteger:r("Xol8")})},ilnZ:function(t,n,r){r("dOgj")("Uint8",1,(function(t){return function(n,r,e){return t(this,n,r,e)}}),!0)},inlA:function(t,n,r){"use strict";var e=r("I+eb"),o=r("UMSQ"),i=r("WjRb"),u=r("HYAF"),a=r("qxPZ"),c="".endsWith,f=Math.min;e({target:"String",proto:!0,forced:!a("endsWith")},{endsWith:function(t){var n=String(u(this));i(t);var r=arguments.length>1?arguments[1]:void 0,e=o(n.length),a=void 0===r?e:f(o(r),e),s=String(t);return c?c.call(n,s,a):n.slice(a-s.length,a)===s}})},iqWW:function(t,n,r){"use strict";var e=r("ZUd8").charAt;t.exports=function(t,n,r){return n+(r?e(t,n).length:1)}},iwkZ:function(t,n,r){r("dOgj")("Int16",2,(function(t){return function(n,r,e){return t(this,n,r,e)}}))},jrUv:function(t,n){var r=Math.expm1,e=Math.exp;t.exports=!r||r(10)>22025.465794806718||r(10)<22025.465794806718||-2e-17!=r(-2e-17)?function(t){return 0==(t=+t)?t:t>-1e-6&&t<1e-6?t+t*t/2:e(t)-1}:r},k5h5:function(t,n,r){},kNcU:function(t,n,r){var e=r("I+eb"),o=Math.log,i=Math.LN2;e({target:"Math",stat:!0},{log2:function(t){return o(t)/i}})},kOOl:function(t,n){var r=0,e=Math.random();t.exports=function(t){return"Symbol("+String(void 0===t?"":t)+")_"+(++r+e).toString(36)}},kRJp:function(t,n,r){var e=r("g6v/"),o=r("m/L8"),i=r("XGwC");t.exports=e?function(t,n,r){return o.f(t,n,i(1,r))}:function(t,n,r){return t[n]=r,t}},kSko:function(t,n,r){r("I+eb")({target:"Number",stat:!0},{isNaN:function(t){return t!=t}})},kmMV:function(t,n,r){"use strict";var e,o,i=r("rW0t"),u=RegExp.prototype.exec,a=String.prototype.replace,c=u,f=(e=/a/,o=/b*/g,u.call(e,"a"),u.call(o,"a"),0!==e.lastIndex||0!==o.lastIndex),s=void 0!==/()??/.exec("")[1];(f||s)&&(c=function(t){var n,r,e,o,c=this;return s&&(r=new RegExp("^"+c.source+"$(?!\\s)",i.call(c))),f&&(n=c.lastIndex),e=u.call(c,t),f&&e&&(c.lastIndex=c.global?e.index+e[0].length:n),s&&e&&e.length>1&&a.call(e[0],r,(function(){for(o=1;o<arguments.length-2;o++)void 0===arguments[o]&&(e[o]=void 0)})),e}),t.exports=c},l2dK:function(t,n,r){"use strict";var e=r("I+eb"),o=r("hXpO");e({target:"String",proto:!0,forced:r("6unK")("fontcolor")},{fontcolor:function(t){return o(this,"font","color",t)}})},lEou:function(t,n,r){r("dG/n")("toStringTag")},lMq5:function(t,n,r){var e=r("0Dky"),o=/#|\.prototype\./,i=function(t,n){var r=a[u(t)];return r==f||r!=c&&("function"==typeof n?e(n):!!n)},u=i.normalize=function(t){return String(t).replace(o,".").toLowerCase()},a=i.data={},c=i.NATIVE="N",f=i.POLYFILL="P";t.exports=i},"m/L8":function(t,n,r){var e=r("g6v/"),o=r("DPsx"),i=r("glrk"),u=r("wE6v"),a=Object.defineProperty;n.f=e?a:function(t,n,r){if(i(t),n=u(n,!0),i(r),o)try{return a(t,n,r)}catch(t){}if("get"in r||"set"in r)throw TypeError("Accessors not supported");return"value"in r&&(t[n]=r.value),t}},m92n:function(t,n,r){var e=r("glrk");t.exports=function(t,n,r,o){try{return o?n(e(r)[0],r[1]):n(r)}catch(n){var i=t.return;throw void 0!==i&&e(i.call(t)),n}}},mGGf:function(t,n,r){"use strict";r("4mDm");var e=r("I+eb"),o=r("0GbY"),i=r("DTth"),u=r("busE"),a=r("4syw"),c=r("1E5z"),f=r("ntOU"),s=r("afO8"),l=r("GarU"),h=r("UTVS"),p=r("+MLx"),v=r("9d/t"),g=r("glrk"),d=r("hh1v"),y=r("fHMY"),b=r("XGwC"),m=r("mh/w"),x=r("NaFW"),S=r("tiKp"),w=o("fetch"),I=o("Headers"),E=S("iterator"),A=s.set,R=s.getterFor("URLSearchParams"),O=s.getterFor("URLSearchParamsIterator"),k=/\+/g,M=Array(4),T=function(t){return M[t-1]||(M[t-1]=RegExp("((?:%[\\da-f]{2}){"+t+"})","gi"))},L=function(t){try{return decodeURIComponent(t)}catch(n){return t}},j=function(t){var n=t.replace(k," "),r=4;try{return decodeURIComponent(n)}catch(t){for(;r;)n=n.replace(T(r--),L);return n}},U=/[!'()~]|%20/g,W={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},N=function(t){return W[t]},P=function(t){return encodeURIComponent(t).replace(U,N)},F=function(t,n){if(n)for(var r,e,o=n.split("&"),i=0;i<o.length;)(r=o[i++]).length&&(e=r.split("="),t.push({key:j(e.shift()),value:j(e.join("="))}))},D=function(t){this.entries.length=0,F(this.entries,t)},B=function(t,n){if(t<n)throw TypeError("Not enough arguments")},C=f((function(t,n){A(this,{type:"URLSearchParamsIterator",iterator:m(R(t).entries),kind:n})}),"Iterator",(function(){var t=O(this),n=t.kind,r=t.iterator.next(),e=r.value;return r.done||(r.value="keys"===n?e.key:"values"===n?e.value:[e.key,e.value]),r})),G=function(){l(this,G,"URLSearchParams");var t,n,r,e,o,i,u,a,c,f=arguments.length>0?arguments[0]:void 0,s=this,p=[];if(A(s,{type:"URLSearchParams",entries:p,updateURL:function(){},updateSearchParams:D}),void 0!==f)if(d(f))if("function"==typeof(t=x(f)))for(r=(n=t.call(f)).next;!(e=r.call(n)).done;){if((u=(i=(o=m(g(e.value))).next).call(o)).done||(a=i.call(o)).done||!i.call(o).done)throw TypeError("Expected sequence with length 2");p.push({key:u.value+"",value:a.value+""})}else for(c in f)h(f,c)&&p.push({key:c,value:f[c]+""});else F(p,"string"==typeof f?"?"===f.charAt(0)?f.slice(1):f:f+"")},V=G.prototype;a(V,{append:function(t,n){B(arguments.length,2);var r=R(this);r.entries.push({key:t+"",value:n+""}),r.updateURL()},delete:function(t){B(arguments.length,1);for(var n=R(this),r=n.entries,e=t+"",o=0;o<r.length;)r[o].key===e?r.splice(o,1):o++;n.updateURL()},get:function(t){B(arguments.length,1);for(var n=R(this).entries,r=t+"",e=0;e<n.length;e++)if(n[e].key===r)return n[e].value;return null},getAll:function(t){B(arguments.length,1);for(var n=R(this).entries,r=t+"",e=[],o=0;o<n.length;o++)n[o].key===r&&e.push(n[o].value);return e},has:function(t){B(arguments.length,1);for(var n=R(this).entries,r=t+"",e=0;e<n.length;)if(n[e++].key===r)return!0;return!1},set:function(t,n){B(arguments.length,1);for(var r,e=R(this),o=e.entries,i=!1,u=t+"",a=n+"",c=0;c<o.length;c++)(r=o[c]).key===u&&(i?o.splice(c--,1):(i=!0,r.value=a));i||o.push({key:u,value:a}),e.updateURL()},sort:function(){var t,n,r,e=R(this),o=e.entries,i=o.slice();for(o.length=0,r=0;r<i.length;r++){for(t=i[r],n=0;n<r;n++)if(o[n].key>t.key){o.splice(n,0,t);break}n===r&&o.push(t)}e.updateURL()},forEach:function(t){for(var n,r=R(this).entries,e=p(t,arguments.length>1?arguments[1]:void 0,3),o=0;o<r.length;)e((n=r[o++]).value,n.key,this)},keys:function(){return new C(this,"keys")},values:function(){return new C(this,"values")},entries:function(){return new C(this,"entries")}},{enumerable:!0}),u(V,E,V.entries),u(V,"toString",(function(){for(var t,n=R(this).entries,r=[],e=0;e<n.length;)t=n[e++],r.push(P(t.key)+"="+P(t.value));return r.join("&")}),{enumerable:!0}),c(G,"URLSearchParams"),e({global:!0,forced:!i},{URLSearchParams:G}),i||"function"!=typeof w||"function"!=typeof I||e({global:!0,enumerable:!0,forced:!0},{fetch:function(t){var n,r,e,o=[t];return arguments.length>1&&(n=arguments[1],d(n)&&(r=n.body,"URLSearchParams"===v(r)&&((e=new I(n.headers)).has("content-type")||e.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"),n=y(n,{body:b(0,String(r)),headers:b(0,e)}))),o.push(n)),w.apply(this,o)}}),t.exports={URLSearchParams:G,getState:R}},mRH6:function(t,n,r){"use strict";var e=r("I+eb"),o=r("hXpO");e({target:"String",proto:!0,forced:r("6unK")("link")},{link:function(t){return o(this,"a","href",t)}})},ma9I:function(t,n,r){"use strict";var e=r("I+eb"),o=r("0Dky"),i=r("6LWA"),u=r("hh1v"),a=r("ewvW"),c=r("UMSQ"),f=r("hBjN"),s=r("ZfDv"),l=r("Hd5f"),h=r("tiKp"),p=r("YK6W"),v=h("isConcatSpreadable"),g=p>=51||!o((function(){var t=[];return t[v]=!1,t.concat()[0]!==t})),d=l("concat"),y=function(t){if(!u(t))return!1;var n=t[v];return void 0!==n?!!n:i(t)};e({target:"Array",proto:!0,forced:!g||!d},{concat:function(t){var n,r,e,o,i,u=a(this),l=s(u,0),h=0;for(n=-1,e=arguments.length;n<e;n++)if(i=-1===n?u:arguments[n],y(i)){if(h+(o=c(i.length))>9007199254740991)throw TypeError("Maximum allowed index exceeded");for(r=0;r<o;r++,h++)r in i&&f(l,h,i[r])}else{if(h>=9007199254740991)throw TypeError("Maximum allowed index exceeded");f(l,h++,i)}return l.length=h,l}})},"mh/w":function(t,n,r){var e=r("glrk"),o=r("NaFW");t.exports=function(t){var n=o(t);if("function"!=typeof n)throw TypeError(String(t)+" is not iterable");return e(n.call(t))}},moxL:function(t,n,r){"use strict";var e=r("67WC"),o=r("FF6l"),i=e.aTypedArray;e.exportProto("copyWithin",(function(t,n){return o.call(i(this),t,n,arguments.length>2?arguments[2]:void 0)}))},"n/mU":function(t,n,r){var e=r("I+eb"),o=Math.atanh,i=Math.log;e({target:"Math",stat:!0,forced:!(o&&1/o(-0)<0)},{atanh:function(t){return 0==(t=+t)?t:i((1+t)/(1-t))/2}})},n5b4:function(t,n,r){var e=r("I+eb"),o=r("2oRo"),i=r("tXUg"),u=r("xrYK"),a=o.process,c="process"==u(a);e({global:!0,enumerable:!0,noTargetGet:!0},{queueMicrotask:function(t){var n=c&&a.domain;i(n?n.bind(t):t)}})},nkod:function(t,n,r){var e=r("I+eb"),o=r("g6v/"),i=r("glrk"),u=r("Bs8V");e({target:"Reflect",stat:!0,sham:!o},{getOwnPropertyDescriptor:function(t,n){return u.f(i(t),n)}})},noGo:function(t,n,r){var e=r("VpIT");t.exports=e("native-function-to-string",Function.toString)},ntOU:function(t,n,r){"use strict";var e=r("rpNk").IteratorPrototype,o=r("fHMY"),i=r("XGwC"),u=r("1E5z"),a=r("P4y1"),c=function(){return this};t.exports=function(t,n,r){var f=n+" Iterator";return t.prototype=o(e,{next:i(1,r)}),u(t,f,!1,!0),a[f]=c,t}},"oHi+":function(t,n,r){var e=r("ewvW"),o=r("UMSQ"),i=r("NaFW"),u=r("6VoE"),a=r("+MLx"),c=r("67WC").aTypedArrayConstructor;t.exports=function(t){var n,r,f,s,l,h,p=e(t),v=arguments.length,g=v>1?arguments[1]:void 0,d=void 0!==g,y=i(p);if(null!=y&&!u(y))for(h=(l=y.call(p)).next,p=[];!(s=h.call(l)).done;)p.push(s.value);for(d&&v>2&&(g=a(g,arguments[2],2)),r=o(p.length),f=new(c(this))(r),n=0;r>n;n++)f[n]=d?g(p[n],n):p[n];return f}},oVuX:function(t,n,r){"use strict";var e=r("I+eb"),o=r("RK3t"),i=r("/GqU"),u=r("swFL"),a=[].join,c=o!=Object,f=u("join",",");e({target:"Array",proto:!0,forced:c||f},{join:function(t){return a.call(i(this),void 0===t?",":t)}})},or9q:function(t,n,r){"use strict";var e=r("6LWA"),o=r("UMSQ"),i=r("+MLx");t.exports=function t(n,r,u,a,c,f,s,l){for(var h,p=c,v=0,g=!!s&&i(s,l,3);v<a;){if(v in u){if(h=g?g(u[v],v,r):u[v],f>0&&e(h))p=t(n,r,h,o(h.length),p,f-1)-1;else{if(p>=9007199254740991)throw TypeError("Exceed the acceptable array length");n[p]=h}p++}v++}return p}},p532:function(t,n,r){"use strict";var e=r("I+eb"),o=r("xDBR"),i=r("/qmn"),u=r("0GbY"),a=r("SEBh"),c=r("zfnd"),f=r("busE");e({target:"Promise",proto:!0,real:!0},{finally:function(t){var n=a(this,u("Promise")),r="function"==typeof t;return this.then(r?function(r){return c(n,t()).then((function(){return r}))}:t,r?function(r){return c(n,t()).then((function(){throw r}))}:t)}}),o||"function"!=typeof i||i.prototype.finally||f(i.prototype,"finally",u("Promise").prototype.finally)},pDQq:function(t,n,r){"use strict";var e=r("I+eb"),o=r("I8vh"),i=r("ppGB"),u=r("UMSQ"),a=r("ewvW"),c=r("ZfDv"),f=r("hBjN"),s=r("Hd5f"),l=Math.max,h=Math.min;e({target:"Array",proto:!0,forced:!s("splice")},{splice:function(t,n){var r,e,s,p,v,g,d=a(this),y=u(d.length),b=o(t,y),m=arguments.length;if(0===m?r=e=0:1===m?(r=0,e=y-b):(r=m-2,e=h(l(i(n),0),y-b)),y+r-e>9007199254740991)throw TypeError("Maximum allowed length exceeded");for(s=c(d,e),p=0;p<e;p++)(v=b+p)in d&&f(s,p,d[v]);if(s.length=e,r<e){for(p=b;p<y-e;p++)g=p+r,(v=p+e)in d?d[g]=d[v]:delete d[g];for(p=y;p>y-e+r;p--)delete d[p-1]}else if(r>e)for(p=y-e;p>b;p--)g=p+r-1,(v=p+e-1)in d?d[g]=d[v]:delete d[g];for(p=0;p<r;p++)d[p+b]=arguments[p+2];return d.length=y-e+r,s}})},pNMO:function(t,n,r){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var o=r("I+eb"),i=r("2oRo"),u=r("xDBR"),a=r("g6v/"),c=r("STAE"),f=r("0Dky"),s=r("UTVS"),l=r("6LWA"),h=r("hh1v"),p=r("glrk"),v=r("ewvW"),g=r("/GqU"),d=r("wE6v"),y=r("XGwC"),b=r("fHMY"),m=r("33Wh"),x=r("JBy8"),S=r("BX/b"),w=r("dBg+"),I=r("Bs8V"),E=r("m/L8"),A=r("0eef"),R=r("kRJp"),O=r("busE"),k=r("VpIT"),M=r("93I0"),T=r("0BK2"),L=r("kOOl"),j=r("tiKp"),U=r("wDLo"),W=r("dG/n"),N=r("1E5z"),P=r("afO8"),F=r("tycR").forEach,D=M("hidden"),B=j("toPrimitive"),C=P.set,G=P.getterFor("Symbol"),V=Object.prototype,Y=i.Symbol,K=i.JSON,q=K&&K.stringify,H=I.f,z=E.f,_=S.f,X=A.f,J=k("symbols"),Z=k("op-symbols"),Q=k("string-to-symbol-registry"),$=k("symbol-to-string-registry"),tt=k("wks"),nt=i.QObject,rt=!nt||!nt.prototype||!nt.prototype.findChild,et=a&&f((function(){return 7!=b(z({},"a",{get:function(){return z(this,"a",{value:7}).a}})).a}))?function(t,n,r){var e=H(V,n);e&&delete V[n],z(t,n,r),e&&t!==V&&z(V,n,e)}:z,ot=function(t,n){var r=J[t]=b(Y.prototype);return C(r,{type:"Symbol",tag:t,description:n}),a||(r.description=n),r},it=c&&"symbol"==e(Y.iterator)?function(t){return"symbol"==e(t)}:function(t){return Object(t)instanceof Y},ut=function(t,n,r){t===V&&ut(Z,n,r),p(t);var e=d(n,!0);return p(r),s(J,e)?(r.enumerable?(s(t,D)&&t[D][e]&&(t[D][e]=!1),r=b(r,{enumerable:y(0,!1)})):(s(t,D)||z(t,D,y(1,{})),t[D][e]=!0),et(t,e,r)):z(t,e,r)},at=function(t,n){p(t);var r=g(n),e=m(r).concat(lt(r));return F(e,(function(n){a&&!ct.call(r,n)||ut(t,n,r[n])})),t},ct=function(t){var n=d(t,!0),r=X.call(this,n);return!(this===V&&s(J,n)&&!s(Z,n))&&(!(r||!s(this,n)||!s(J,n)||s(this,D)&&this[D][n])||r)},ft=function(t,n){var r=g(t),e=d(n,!0);if(r!==V||!s(J,e)||s(Z,e)){var o=H(r,e);return!o||!s(J,e)||s(r,D)&&r[D][e]||(o.enumerable=!0),o}},st=function(t){var n=_(g(t)),r=[];return F(n,(function(t){s(J,t)||s(T,t)||r.push(t)})),r},lt=function(t){var n=t===V,r=_(n?Z:g(t)),e=[];return F(r,(function(t){!s(J,t)||n&&!s(V,t)||e.push(J[t])})),e};c||(O((Y=function(){if(this instanceof Y)throw TypeError("Symbol is not a constructor");var t=arguments.length&&void 0!==arguments[0]?String(arguments[0]):void 0,n=L(t),r=function t(r){this===V&&t.call(Z,r),s(this,D)&&s(this[D],n)&&(this[D][n]=!1),et(this,n,y(1,r))};return a&&rt&&et(V,n,{configurable:!0,set:r}),ot(n,t)}).prototype,"toString",(function(){return G(this).tag})),A.f=ct,E.f=ut,I.f=ft,x.f=S.f=st,w.f=lt,a&&(z(Y.prototype,"description",{configurable:!0,get:function(){return G(this).description}}),u||O(V,"propertyIsEnumerable",ct,{unsafe:!0})),U.f=function(t){return ot(j(t),t)}),o({global:!0,wrap:!0,forced:!c,sham:!c},{Symbol:Y}),F(m(tt),(function(t){W(t)})),o({target:"Symbol",stat:!0,forced:!c},{for:function(t){var n=String(t);if(s(Q,n))return Q[n];var r=Y(n);return Q[n]=r,$[r]=n,r},keyFor:function(t){if(!it(t))throw TypeError(t+" is not a symbol");if(s($,t))return $[t]},useSetter:function(){rt=!0},useSimple:function(){rt=!1}}),o({target:"Object",stat:!0,forced:!c,sham:!a},{create:function(t,n){return void 0===n?b(t):at(b(t),n)},defineProperty:ut,defineProperties:at,getOwnPropertyDescriptor:ft}),o({target:"Object",stat:!0,forced:!c},{getOwnPropertyNames:st,getOwnPropertySymbols:lt}),o({target:"Object",stat:!0,forced:f((function(){w.f(1)}))},{getOwnPropertySymbols:function(t){return w.f(v(t))}}),K&&o({target:"JSON",stat:!0,forced:!c||f((function(){var t=Y();return"[null]"!=q([t])||"{}"!=q({a:t})||"{}"!=q(Object(t))}))},{stringify:function(t){for(var n,r,e=[t],o=1;arguments.length>o;)e.push(arguments[o++]);if(r=n=e[1],(h(n)||void 0!==t)&&!it(t))return l(n)||(n=function(t,n){if("function"==typeof r&&(n=r.call(this,t,n)),!it(n))return n}),e[1]=n,q.apply(K,e)}}),Y.prototype[B]||R(Y.prototype,B,Y.prototype.valueOf),N(Y,"Symbol"),T[D]=!0},piMb:function(t,n,r){"use strict";var e=r("I+eb"),o=r("tycR").every;e({target:"Array",proto:!0,forced:r("swFL")("every")},{every:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}})},pjDv:function(t,n,r){var e=r("I+eb"),o=r("TfTi");e({target:"Array",stat:!0,forced:!r("HH4o")((function(t){Array.from(t)}))},{from:o})},ppGB:function(t,n){var r=Math.ceil,e=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?e:r)(t)}},pv2x:function(t,n,r){var e=r("I+eb"),o=r("0GbY"),i=r("HAuM"),u=r("glrk"),a=r("0Dky"),c=o("Reflect","apply"),f=Function.apply;e({target:"Reflect",stat:!0,forced:!a((function(){c((function(){}))}))},{apply:function(t,n,r){return i(t),u(r),c?c(t,n,r):f.call(t,n,r)}})},"qHT+":function(t,n,r){var e=r("I+eb"),o=r("FF6l"),i=r("RNIs");e({target:"Array",proto:!0},{copyWithin:o}),i("copyWithin")},qXVe:function(t,n,r){"use strict";var e=r("67WC"),o=r("tycR").every,i=e.aTypedArray;e.exportProto("every",(function(t){return o(i(this),t,arguments.length>1?arguments[1]:void 0)}))},qePV:function(t,n,r){"use strict";var e=r("g6v/"),o=r("2oRo"),i=r("lMq5"),u=r("busE"),a=r("UTVS"),c=r("xrYK"),f=r("cVYH"),s=r("wE6v"),l=r("0Dky"),h=r("fHMY"),p=r("JBy8").f,v=r("Bs8V").f,g=r("m/L8").f,d=r("WKiH").trim,y=o.Number,b=y.prototype,m="Number"==c(h(b)),x=function(t){var n,r,e,o,i,u,a,c,f=s(t,!1);if("string"==typeof f&&f.length>2)if(43===(n=(f=d(f)).charCodeAt(0))||45===n){if(88===(r=f.charCodeAt(2))||120===r)return NaN}else if(48===n){switch(f.charCodeAt(1)){case 66:case 98:e=2,o=49;break;case 79:case 111:e=8,o=55;break;default:return+f}for(u=(i=f.slice(2)).length,a=0;a<u;a++)if((c=i.charCodeAt(a))<48||c>o)return NaN;return parseInt(i,e)}return+f};if(i("Number",!y(" 0o1")||!y("0b1")||y("+0x1"))){for(var S,w=function(t){var n=arguments.length<1?0:t,r=this;return r instanceof w&&(m?l((function(){b.valueOf.call(r)})):"Number"!=c(r))?f(new y(x(n)),r,w):x(n)},I=e?p(y):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),E=0;I.length>E;E++)a(y,S=I[E])&&!a(w,S)&&g(w,S,v(y,S));w.prototype=b,b.constructor=w,u(o,"Number",w)}},qxPZ:function(t,n,r){var e=r("tiKp")("match");t.exports=function(t){var n=/./;try{"/./"[t](n)}catch(r){try{return n[e]=!1,"/./"[t](n)}catch(t){}}return!1}},qyvy:function(t,n,r){},"r/Vq":function(t,n,r){r("I+eb")({target:"Number",stat:!0},{MAX_SAFE_INTEGER:9007199254740991})},r5Og:function(t,n,r){var e=r("I+eb"),o=r("hh1v"),i=r("8YOa").onFreeze,u=r("uy83"),a=r("0Dky"),c=Object.seal;e({target:"Object",stat:!0,forced:a((function(){c(1)})),sham:!u},{seal:function(t){return c&&o(t)?c(i(t)):t}})},rB9j:function(t,n,r){"use strict";var e=r("I+eb"),o=r("kmMV");e({target:"RegExp",proto:!0,forced:/./.exec!==o},{exec:o})},rBZX:function(t,n,r){var e=r("I+eb"),o=r("glrk"),i=r("Bs8V").f;e({target:"Reflect",stat:!0},{deleteProperty:function(t,n){var r=i(o(t),n);return!(r&&!r.configurable)&&delete t[n]}})},rKzb:function(t,n,r){"use strict";var e=r("4syw"),o=r("8YOa").getWeakData,i=r("glrk"),u=r("hh1v"),a=r("GarU"),c=r("ImZN"),f=r("tycR"),s=r("UTVS"),l=r("afO8"),h=l.set,p=l.getterFor,v=f.find,g=f.findIndex,d=0,y=function(t){return t.frozen||(t.frozen=new b)},b=function(){this.entries=[]},m=function(t,n){return v(t.entries,(function(t){return t[0]===n}))};b.prototype={get:function(t){var n=m(this,t);if(n)return n[1]},has:function(t){return!!m(this,t)},set:function(t,n){var r=m(this,t);r?r[1]=n:this.entries.push([t,n])},delete:function(t){var n=g(this.entries,(function(n){return n[0]===t}));return~n&&this.entries.splice(n,1),!!~n}},t.exports={getConstructor:function(t,n,r,f){var l=t((function(t,e){a(t,l,n),h(t,{type:n,id:d++,frozen:void 0}),null!=e&&c(e,t[f],t,r)})),v=p(n),g=function(t,n,r){var e=v(t),u=o(i(n),!0);return!0===u?y(e).set(n,r):u[e.id]=r,t};return e(l.prototype,{delete:function(t){var n=v(this);if(!u(t))return!1;var r=o(t);return!0===r?y(n).delete(t):r&&s(r,n.id)&&delete r[n.id]},has:function(t){var n=v(this);if(!u(t))return!1;var r=o(t);return!0===r?y(n).has(t):r&&s(r,n.id)}}),e(l.prototype,r?{get:function(t){var n=v(this);if(u(t)){var r=o(t);return!0===r?y(n).get(t):r?r[n.id]:void 0}},set:function(t,n){return g(this,t,n)}}:{add:function(t){return g(this,t,!0)}}),l}}},rMz7:function(t,n,r){var e=r("I+eb"),o=r("ZOXb");e({target:"Date",proto:!0,forced:Date.prototype.toISOString!==o},{toISOString:o})},rNhl:function(t,n,r){var e=r("I+eb"),o=r("b+VT");e({global:!0,forced:parseFloat!=o},{parseFloat:o})},rOQg:function(t,n,r){"use strict";var e=r("I+eb"),o=r("0Dky"),i=r("Yhre"),u=r("glrk"),a=r("I8vh"),c=r("UMSQ"),f=r("SEBh"),s=i.ArrayBuffer,l=i.DataView,h=s.prototype.slice;e({target:"ArrayBuffer",proto:!0,unsafe:!0,forced:o((function(){return!new s(2).slice(1,void 0).byteLength}))},{slice:function(t,n){if(void 0!==h&&void 0===n)return h.call(u(this),t);for(var r=u(this).byteLength,e=a(t,r),o=a(void 0===n?r:n,r),i=new(f(this,s))(c(o-e)),p=new l(this),v=new l(i),g=0;e<o;)v.setUint8(g++,p.getUint8(e++));return i}})},rW0t:function(t,n,r){"use strict";var e=r("glrk");t.exports=function(){var t=e(this),n="";return t.global&&(n+="g"),t.ignoreCase&&(n+="i"),t.multiline&&(n+="m"),t.dotAll&&(n+="s"),t.unicode&&(n+="u"),t.sticky&&(n+="y"),n}},rpNk:function(t,n,r){"use strict";var e,o,i,u=r("4WOD"),a=r("kRJp"),c=r("UTVS"),f=r("tiKp"),s=r("xDBR"),l=f("iterator"),h=!1;[].keys&&("next"in(i=[].keys())?(o=u(u(i)))!==Object.prototype&&(e=o):h=!0),null==e&&(e={}),s||c(e,l)||a(e,l,(function(){return this})),t.exports={IteratorPrototype:e,BUGGY_SAFARI_ITERATORS:h}},s5pE:function(t,n,r){var e=r("0GbY");t.exports=e("navigator","userAgent")||""},s5qe:function(t,n,r){"use strict";var e=r("2oRo"),o=r("67WC"),i=r("0Dky"),u=e.Int8Array,a=o.aTypedArray,c=[].toLocaleString,f=[].slice,s=!!u&&i((function(){c.call(new u(1))})),l=i((function(){return[1,2].toLocaleString()!=new u([1,2]).toLocaleString()}))||!i((function(){u.prototype.toLocaleString.call([1,2])}));o.exportProto("toLocaleString",(function(){return c.apply(s?f.call(a(this)):a(this),arguments)}),l)},sEFX:function(t,n,r){"use strict";var e=r("9d/t"),o={};o[r("tiKp")("toStringTag")]="z",t.exports="[object z]"!==String(o)?function(){return"[object "+e(this)+"]"}:o.toString},sMBO:function(t,n,r){var e=r("g6v/"),o=r("m/L8").f,i=Function.prototype,u=i.toString,a=/^\s*function ([^ (]*)/;!e||"name"in i||o(i,"name",{configurable:!0,get:function(){try{return u.call(this).match(a)[1]}catch(t){return""}}})},swFL:function(t,n,r){"use strict";var e=r("0Dky");t.exports=function(t,n){var r=[][t];return!r||!e((function(){r.call(null,n||function(){throw 1},1)}))}},tCCV:function(t,n,r){var e=r("I+eb"),o=r("Yhre");e({global:!0,forced:!r("67WC").NATIVE_ARRAY_BUFFER},{DataView:o.DataView})},tFWo:function(t,n,r){"use strict";r.r(n);r("pNMO"),r("4Brf"),r("tjZM"),r("3I1R"),r("7+kd"),r("0oug"),r("KhsS"),r("gOCb"),r("a57n"),r("GXvd"),r("I1Gw"),r("gXIK"),r("lEou"),r("gbiT"),r("ma9I"),r("qHT+"),r("piMb"),r("yyme"),r("TeQF"),r("fbCW"),r("x0AG"),r("BIHw"),r("XbcX"),r("QWBl"),r("pjDv"),r("yq1k"),r("yXV3"),r("4mDm"),r("oVuX"),r("uqXc"),r("2B1R"),r("Xe3L"),r("E9XD"),r("9N29"),r("Junv"),r("+2oP"),r("Rfxz"),r("ToJy"),r("94Xl"),r("pDQq"),r("QGkA"),r("c9m3"),r("wZ/5"),r("gtqK"),r("rOQg"),r("tCCV"),r("rMz7"),r("9LPj"),r("7+zs"),r("DQNa"),r("wLYn"),r("tW5y"),r("sMBO"),r("DEfu"),r("Tskq"),r("Uydy"),r("eajv"),r("n/mU"),r("PqOI"),r("QNnp"),r("/5zm"),r("CsgD"),r("9mRW"),r("QFcT"),r("vAFs"),r("a5NK"),r("yiG3"),r("kNcU"),r("KvGi"),r("AmFO"),r("eJiR"),r("I9xj"),r("tl/u"),r("qePV"),r("NbN+"),r("8AyJ"),r("i6QF"),r("kSko"),r("WDsR"),r("r/Vq"),r("5uH8"),r("w1rZ"),r("JevA"),r("toAj"),r("VC3L"),r("zKZe"),r("uL8W"),r("Eqjn"),r("HRxU"),r("eoL8"),r("5xtp"),r("T63A"),r("3KgV"),r("wfmh"),r("5DmW"),r("27RR"),r("cDke"),r("NBAS"),r("Kxld"),r("yQYn"),r("4h0Y"),r("5D5o"),r("tkto"),r("v5b1"),r("W/eh"),r("zuhW"),r("r5Og"),r("ExoC"),r("07d7"),r("B6y2"),r("rNhl"),r("4l63"),r("5s+n"),r("p532"),r("pv2x"),r("SuFq"),r("PzqY"),r("rBZX"),r("XUE8"),r("nkod"),r("f3jH"),r("x2An"),r("25bX"),r("G/JM"),r("1t3B"),r("ftMj"),r("i5pp"),r("TWNs"),r("rB9j"),r("U3f4"),r("JfAA"),r("YGK4"),r("9bJ7"),r("inlA"),r("9tb/"),r("JTJg"),r("PKPk"),r("Rm1S"),r("hDyC"),r("TZCg"),r("2A+d"),r("OM9Z"),r("UxlC"),r("hByQ"),r("EnZy"),r("LKBx"),r("SYor"),r("HiXI"),r("7ueG"),r("GKVU"),r("E5NM"),r("BNMt"),r("zHFu"),r("x83w"),r("l2dK"),r("GRPF"),r("xdBZ"),r("mRH6"),r("yWo2"),r("IxXR"),r("TFPT"),r("Zk8X"),r("z8NH"),r("SpvK"),r("/Yfv"),r("iwkZ"),r("FDzp"),r("XMab"),r("ilnZ"),r("hMMk"),r("+ywr"),r("moxL"),r("qXVe"),r("c162"),r("waxf"),r("0TkE"),r("Onu3"),r("1dYe"),r("IL/d"),r("gvgV"),r("6R/c"),r("YL0P"),r("X5Zq"),r("MoCz"),r("P8wP"),r("7JcK"),r("ypFw"),r("JaFt"),r("zSZm"),r("PF2M"),r("KVSy"),r("ZJ55"),r("IZzc"),r("Fwt+"),r("s5qe"),r("cvf0"),r("ENF9"),r("H+LF"),r("FZtP"),r("3bBZ"),r("Ew+T"),r("n5b4"),r("Kz25"),r("vxnP"),r("mGGf"),r("qyvy"),r("k5h5"),r("PCVs"),r("CrjE");r.e(3).then(r.bind(null,"D93H"));var e=r("B0X1");Object(e.i)((function(){Object(e.e)("[data-docsearch]:not([data-docsearch-initialized])").forEach((function(t){t.setAttribute("data-docsearch-initialized",!0),Promise.all([r.e(2),r.e(5)]).then(r.bind(null,"+kLL")).then((function(n){n.init(t)}))}))}));r("9XZ4"),r("Nqwi");r.e(4).then(r.bind(null,"Bfv6"))},tW5y:function(t,n,r){"use strict";var e=r("hh1v"),o=r("m/L8"),i=r("4WOD"),u=r("tiKp")("hasInstance"),a=Function.prototype;u in a||o.f(a,u,{value:function(t){if("function"!=typeof this||!e(t))return!1;if(!e(this.prototype))return t instanceof this;for(;t=i(t);)if(this.prototype===t)return!0;return!1}})},tXUg:function(t,n,r){var e,o,i,u,a,c,f,s,l=r("2oRo"),h=r("Bs8V").f,p=r("xrYK"),v=r("LPSS").set,g=r("s5pE"),d=l.MutationObserver||l.WebKitMutationObserver,y=l.process,b=l.Promise,m="process"==p(y),x=h(l,"queueMicrotask"),S=x&&x.value;S||(e=function(){var t,n;for(m&&(t=y.domain)&&t.exit();o;){n=o.fn,o=o.next;try{n()}catch(t){throw o?u():i=void 0,t}}i=void 0,t&&t.enter()},m?u=function(){y.nextTick(e)}:d&&!/(iphone|ipod|ipad).*applewebkit/i.test(g)?(a=!0,c=document.createTextNode(""),new d(e).observe(c,{characterData:!0}),u=function(){c.data=a=!a}):b&&b.resolve?(f=b.resolve(void 0),s=f.then,u=function(){s.call(f,e)}):u=function(){v.call(l,e)}),t.exports=S||function(t){var n={fn:t,next:void 0};i&&(i.next=n),o||(o=n,u()),i=n}},tiKp:function(t,n,r){var e=r("2oRo"),o=r("VpIT"),i=r("kOOl"),u=r("STAE"),a=e.Symbol,c=o("wks");t.exports=function(t){return c[t]||(c[t]=u&&a[t]||(u?a:i)("Symbol."+t))}},tjZM:function(t,n,r){r("dG/n")("asyncIterator")},tkto:function(t,n,r){var e=r("I+eb"),o=r("ewvW"),i=r("33Wh");e({target:"Object",stat:!0,forced:r("0Dky")((function(){i(1)}))},{keys:function(t){return i(o(t))}})},"tl/u":function(t,n,r){var e=r("I+eb"),o=Math.ceil,i=Math.floor;e({target:"Math",stat:!0},{trunc:function(t){return(t>0?i:o)(t)}})},toAj:function(t,n,r){"use strict";var e=r("I+eb"),o=r("ppGB"),i=r("QIpd"),u=r("EUja"),a=r("0Dky"),c=1..toFixed,f=Math.floor,s=function t(n,r,e){return 0===r?e:r%2==1?t(n,r-1,e*n):t(n*n,r/2,e)};e({target:"Number",proto:!0,forced:c&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!a((function(){c.call({})}))},{toFixed:function(t){var n,r,e,a,c=i(this),l=o(t),h=[0,0,0,0,0,0],p="",v="0",g=function(t,n){for(var r=-1,e=n;++r<6;)e+=t*h[r],h[r]=e%1e7,e=f(e/1e7)},d=function(t){for(var n=6,r=0;--n>=0;)r+=h[n],h[n]=f(r/t),r=r%t*1e7},y=function(){for(var t=6,n="";--t>=0;)if(""!==n||0===t||0!==h[t]){var r=String(h[t]);n=""===n?r:n+u.call("0",7-r.length)+r}return n};if(l<0||l>20)throw RangeError("Incorrect fraction digits");if(c!=c)return"NaN";if(c<=-1e21||c>=1e21)return String(c);if(c<0&&(p="-",c=-c),c>1e-21)if(r=(n=function(t){for(var n=0,r=t;r>=4096;)n+=12,r/=4096;for(;r>=2;)n+=1,r/=2;return n}(c*s(2,69,1))-69)<0?c*s(2,-n,1):c/s(2,n,1),r*=4503599627370496,(n=52-n)>0){for(g(0,r),e=l;e>=7;)g(1e7,0),e-=7;for(g(s(10,e,1),0),e=n-1;e>=23;)d(1<<23),e-=23;d(1<<e),g(1,1),d(2),v=y()}else g(0,r),g(1<<-n,0),v=y()+u.call("0",l);return v=l>0?p+((a=v.length)<=l?"0."+u.call("0",l-a)+v:v.slice(0,a-l)+"."+v.slice(a-l)):p+v}})},ttgq:function(t,n,r){r.p=window.__assets},tycR:function(t,n,r){var e=r("+MLx"),o=r("RK3t"),i=r("ewvW"),u=r("UMSQ"),a=r("ZfDv"),c=[].push,f=function(t){var n=1==t,r=2==t,f=3==t,s=4==t,l=6==t,h=5==t||l;return function(p,v,g,d){for(var y,b,m=i(p),x=o(m),S=e(v,g,3),w=u(x.length),I=0,E=d||a,A=n?E(p,w):r?E(p,0):void 0;w>I;I++)if((h||I in x)&&(b=S(y=x[I],I,m),t))if(n)A[I]=b;else if(b)switch(t){case 3:return!0;case 5:return y;case 6:return I;case 2:c.call(A,y)}else if(s)return!1;return l?-1:f||s?s:A}};t.exports={forEach:f(0),map:f(1),filter:f(2),some:f(3),every:f(4),find:f(5),findIndex:f(6)}},uL8W:function(t,n,r){r("I+eb")({target:"Object",stat:!0,sham:!r("g6v/")},{create:r("fHMY")})},uqXc:function(t,n,r){var e=r("I+eb"),o=r("5Yz+");e({target:"Array",proto:!0,forced:o!==[].lastIndexOf},{lastIndexOf:o})},uy83:function(t,n,r){var e=r("0Dky");t.exports=!e((function(){return Object.isExtensible(Object.preventExtensions({}))}))},v5b1:function(t,n,r){"use strict";var e=r("I+eb"),o=r("g6v/"),i=r("MKAM"),u=r("ewvW"),a=r("wE6v"),c=r("4WOD"),f=r("Bs8V").f;o&&e({target:"Object",proto:!0,forced:i},{__lookupGetter__:function(t){var n,r=u(this),e=a(t,!0);do{if(n=f(r,e))return n.get}while(r=c(r))}})},vAFs:function(t,n,r){var e=r("I+eb"),o=r("0Dky"),i=Math.imul;e({target:"Math",stat:!0,forced:o((function(){return-5!=i(4294967295,5)||2!=i.length}))},{imul:function(t,n){var r=+t,e=+n,o=65535&r,i=65535&e;return 0|o*i+((65535&r>>>16)*i+o*(65535&e>>>16)<<16>>>0)}})},vo4V:function(t,n,r){var e=r("90hW"),o=Math.abs,i=Math.pow,u=i(2,-52),a=i(2,-23),c=i(2,127)*(2-a),f=i(2,-126);t.exports=Math.fround||function(t){var n,r,i=o(t),s=e(t);return i<f?s*(i/f/a+1/u-1/u)*f*a:(r=(n=(1+a/u)*i)-(n-i))>c||r!=r?s*(1/0):s*r}},vxnP:function(t,n,r){"use strict";r("I+eb")({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return URL.prototype.toString.call(this)}})},w1rZ:function(t,n,r){var e=r("I+eb"),o=r("b+VT");e({target:"Number",stat:!0,forced:Number.parseFloat!=o},{parseFloat:o})},wDLo:function(t,n,r){n.f=r("tiKp")},wE6v:function(t,n,r){var e=r("hh1v");t.exports=function(t,n){if(!e(t))return t;var r,o;if(n&&"function"==typeof(r=t.toString)&&!e(o=r.call(t)))return o;if("function"==typeof(r=t.valueOf)&&!e(o=r.call(t)))return o;if(!n&&"function"==typeof(r=t.toString)&&!e(o=r.call(t)))return o;throw TypeError("Can't convert object to primitive value")}},wLYn:function(t,n,r){r("I+eb")({target:"Function",proto:!0},{bind:r("BTho")})},"wZ/5":function(t,n,r){"use strict";var e=r("I+eb"),o=r("2oRo"),i=r("Yhre"),u=r("JiZb"),a=i.ArrayBuffer;e({global:!0,forced:o.ArrayBuffer!==a},{ArrayBuffer:a}),u("ArrayBuffer")},waxf:function(t,n,r){"use strict";var e=r("67WC"),o=r("tycR").filter,i=r("SEBh"),u=e.aTypedArray,a=e.aTypedArrayConstructor;e.exportProto("filter",(function(t){for(var n=o(u(this),t,arguments.length>1?arguments[1]:void 0),r=i(this,this.constructor),e=0,c=n.length,f=new(a(r))(c);c>e;)f[e]=n[e++];return f}))},wfmh:function(t,n,r){var e=r("I+eb"),o=r("ImZN"),i=r("hBjN");e({target:"Object",stat:!0},{fromEntries:function(t){var n={};return o(t,(function(t,r){i(n,t,r)}),void 0,!0),n}})},x0AG:function(t,n,r){"use strict";var e=r("I+eb"),o=r("tycR").findIndex,i=r("RNIs"),u=!0;"findIndex"in[]&&Array(1).findIndex((function(){u=!1})),e({target:"Array",proto:!0,forced:u},{findIndex:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}}),i("findIndex")},x2An:function(t,n,r){r("I+eb")({target:"Reflect",stat:!0},{has:function(t,n){return n in t}})},x83w:function(t,n,r){"use strict";var e=r("I+eb"),o=r("hXpO");e({target:"String",proto:!0,forced:r("6unK")("fixed")},{fixed:function(){return o(this,"tt","","")}})},xDBR:function(t,n){t.exports=!1},xdBZ:function(t,n,r){"use strict";var e=r("I+eb"),o=r("hXpO");e({target:"String",proto:!0,forced:r("6unK")("italics")},{italics:function(){return o(this,"i","","")}})},xrYK:function(t,n){var r={}.toString;t.exports=function(t){return r.call(t).slice(8,-1)}},xs3f:function(t,n,r){var e=r("2oRo"),o=r("zk60"),i=e["__core-js_shared__"]||o("__core-js_shared__",{});t.exports=i},yLpj:function(t,n){function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var e;e=function(){return this}();try{e=e||new Function("return this")()}catch(t){"object"===("undefined"==typeof window?"undefined":r(window))&&(e=window)}t.exports=e},yQYn:function(t,n,r){var e=r("I+eb"),o=r("0Dky"),i=r("hh1v"),u=Object.isExtensible;e({target:"Object",stat:!0,forced:o((function(){u(1)}))},{isExtensible:function(t){return!!i(t)&&(!u||u(t))}})},yWo2:function(t,n,r){"use strict";var e=r("I+eb"),o=r("hXpO");e({target:"String",proto:!0,forced:r("6unK")("small")},{small:function(){return o(this,"small","","")}})},yXV3:function(t,n,r){"use strict";var e=r("I+eb"),o=r("TWQb").indexOf,i=r("swFL"),u=[].indexOf,a=!!u&&1/[1].indexOf(1,-0)<0,c=i("indexOf");e({target:"Array",proto:!0,forced:a||c},{indexOf:function(t){return a?u.apply(this,arguments)||0:o(this,t,arguments.length>1?arguments[1]:void 0)}})},yY7y:function(t,n,r){"use strict";var e=/[^\0-\u007E]/,o=/[.\u3002\uFF0E\uFF61]/g,i="Overflow: input needs wider integers to process",u=Math.floor,a=String.fromCharCode,c=function(t){return t+22+75*(t<26)},f=function(t,n,r){var e=0;for(t=r?u(t/700):t>>1,t+=u(t/n);t>455;e+=36)t=u(t/35);return u(e+36*t/(t+38))},s=function(t){var n,r,e=[],o=(t=function(t){for(var n=[],r=0,e=t.length;r<e;){var o=t.charCodeAt(r++);if(o>=55296&&o<=56319&&r<e){var i=t.charCodeAt(r++);56320==(64512&i)?n.push(((1023&o)<<10)+(1023&i)+65536):(n.push(o),r--)}else n.push(o)}return n}(t)).length,s=128,l=0,h=72;for(n=0;n<t.length;n++)(r=t[n])<128&&e.push(a(r));var p=e.length,v=p;for(p&&e.push("-");v<o;){var g=2147483647;for(n=0;n<t.length;n++)(r=t[n])>=s&&r<g&&(g=r);var d=v+1;if(g-s>u((2147483647-l)/d))throw RangeError(i);for(l+=(g-s)*d,s=g,n=0;n<t.length;n++){if((r=t[n])<s&&++l>2147483647)throw RangeError(i);if(r==s){for(var y=l,b=36;;b+=36){var m=b<=h?1:b>=h+26?26:b-h;if(y<m)break;var x=y-m,S=36-m;e.push(a(c(m+x%S))),y=u(x/S)}e.push(a(c(y))),h=f(l,d,v==p),l=0,++v}}++l,++s}return e.join("")};t.exports=function(t){var n,r,i=[],u=t.toLowerCase().replace(o,".").split(".");for(n=0;n<u.length;n++)r=u[n],i.push(e.test(r)?"xn--"+s(r):r);return i.join(".")}},yiG3:function(t,n,r){r("I+eb")({target:"Math",stat:!0},{log1p:r("HsHA")})},yoRg:function(t,n,r){var e=r("UTVS"),o=r("/GqU"),i=r("TWQb").indexOf,u=r("0BK2");t.exports=function(t,n){var r,a=o(t),c=0,f=[];for(r in a)!e(u,r)&&e(a,r)&&f.push(r);for(;n.length>c;)e(a,r=n[c++])&&(~i(f,r)||f.push(r));return f}},ypFw:function(t,n,r){"use strict";var e=r("67WC"),o=r("1Y/n").left,i=e.aTypedArray;e.exportProto("reduce",(function(t){return o(i(this),t,arguments.length,arguments.length>1?arguments[1]:void 0)}))},yq1k:function(t,n,r){"use strict";var e=r("I+eb"),o=r("TWQb").includes,i=r("RNIs");e({target:"Array",proto:!0},{includes:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}}),i("includes")},yyme:function(t,n,r){var e=r("I+eb"),o=r("gdVl"),i=r("RNIs");e({target:"Array",proto:!0},{fill:o}),i("fill")},z8NH:function(t,n,r){r("dOgj")("Float32",4,(function(t){return function(n,r,e){return t(this,n,r,e)}}))},zBJ4:function(t,n,r){var e=r("2oRo"),o=r("hh1v"),i=e.document,u=o(i)&&o(i.createElement);t.exports=function(t){return u?i.createElement(t):{}}},zHFu:function(t,n,r){"use strict";var e=r("I+eb"),o=r("hXpO");e({target:"String",proto:!0,forced:r("6unK")("bold")},{bold:function(){return o(this,"b","","")}})},zKZe:function(t,n,r){var e=r("I+eb"),o=r("YNrV");e({target:"Object",stat:!0,forced:Object.assign!==o},{assign:o})},zSZm:function(t,n,r){"use strict";var e=r("67WC"),o=e.aTypedArray,i=Math.floor;e.exportProto("reverse",(function(){for(var t,n=o(this).length,r=i(n/2),e=0;e<r;)t=this[e],this[e++]=this[--n],this[n]=t;return this}))},zfnd:function(t,n,r){var e=r("glrk"),o=r("hh1v"),i=r("8GlL");t.exports=function(t,n){if(e(t),o(n)&&n.constructor===t)return n;var r=i.f(t);return(0,r.resolve)(n),r.promise}},zk60:function(t,n,r){var e=r("2oRo"),o=r("kRJp");t.exports=function(t,n){try{o(e,t,n)}catch(r){e[t]=n}return n}},zuhW:function(t,n,r){var e=r("I+eb"),o=r("hh1v"),i=r("8YOa").onFreeze,u=r("uy83"),a=r("0Dky"),c=Object.preventExtensions;e({target:"Object",stat:!0,forced:a((function(){c(1)})),sham:!u},{preventExtensions:function(t){return c&&o(t)?c(i(t)):t}})}},[[0,1]]]);
\ No newline at end of file
diff --git a/assets/main.e474d84e.css b/assets/main.e474d84e.css
new file mode 100644
index 000000000..48de4dbd4
--- /dev/null
+++ b/assets/main.e474d84e.css
@@ -0,0 +1 @@
+@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(icons.063d0ba7.ttf) format("truetype"),url(icons.5ea4cc5c.woff) format("woff"),url(icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}
\ No newline at end of file
diff --git a/assets/manifest.json b/assets/manifest.json
new file mode 100644
index 000000000..ff16fef63
--- /dev/null
+++ b/assets/manifest.json
@@ -0,0 +1,18 @@
+{
+  "main.css": "main.e474d84e.css",
+  "main.js": "main.d691d407.js",
+  "runtime.js": "runtime.c39e0f59.js",
+  "2.0f8f4948.js": "2.0f8f4948.js",
+  "3.284c81ab.css": "3.284c81ab.css",
+  "3.ca2827c9.js": "3.ca2827c9.js",
+  "4.87863994.css": "4.87863994.css",
+  "4.7d534a7e.js": "4.7d534a7e.js",
+  "5.ef18ddd4.css": "5.ef18ddd4.css",
+  "5.99f8f23a.js": "5.99f8f23a.js",
+  "icons.ttf?ae19fi": "icons.063d0ba7.ttf",
+  "icons.woff?ae19fi": "icons.5ea4cc5c.woff",
+  "icons.svg?ae19fi": "icons.d59afb7d.svg",
+  "search.svg": "search.72dc4739.svg",
+  "sourcesanspro-bold.woff": "sourcesanspro-bold.be4ba3dd.woff",
+  "sourcesanspro-regular.woff": "sourcesanspro-regular.19ca4d35.woff"
+}
\ No newline at end of file
diff --git a/assets/runtime.c39e0f59.js b/assets/runtime.c39e0f59.js
new file mode 100644
index 000000000..41608aad7
--- /dev/null
+++ b/assets/runtime.c39e0f59.js
@@ -0,0 +1 @@
+!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);
\ No newline at end of file
diff --git a/assets/search.72dc4739.svg b/assets/search.72dc4739.svg
new file mode 100644
index 000000000..b3b83a3c9
--- /dev/null
+++ b/assets/search.72dc4739.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="30" height="32" viewBox="0 0 30 32"><title>search</title><path fill="#584b4f" d="M30 26l-7.785-7.785C23.325 16.4 24 14.285 24 12c0-6.626-5.375-12-12-12S0 5.374 0 12c0 6.625 5.374 12 12 12 2.286 0 4.4-.674 6.215-1.78L26 30c.547.547 1.453.543 2 0l2-2c.547-.547.547-1.453 0-2zm-18-6c-4.418 0-8-3.582-8-8s3.582-8 8-8 8 3.582 8 8-3.582 8-8 8z"/></svg>
diff --git a/assets/sourcesanspro-bold.be4ba3dd.woff b/assets/sourcesanspro-bold.be4ba3dd.woff
new file mode 100644
index 0000000000000000000000000000000000000000..832c960d6985ffedbb9938ac02f298e6a5d67f13
GIT binary patch
diff --git a/assets/sourcesanspro-regular.19ca4d35.woff b/assets/sourcesanspro-regular.19ca4d35.woff
new file mode 100644
index 0000000000000000000000000000000000000000..600602a44b6d23510885e372a77b59de4ad47781
GIT binary patch
diff --git a/browserconfig.xml b/browserconfig.xml
new file mode 100644
index 000000000..0cac452d0
--- /dev/null
+++ b/browserconfig.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<browserconfig>
+    <msapplication>
+        <tile>
+            <square150x150logo src="mstile-150x150.png"/>
+            <TileColor>#f4f3f1</TileColor>
+        </tile>
+    </msapplication>
+</browserconfig>
diff --git a/cache/changelog.html b/cache/changelog.html
new file mode 100644
index 000000000..dbe4b81ad
--- /dev/null
+++ b/cache/changelog.html
@@ -0,0 +1,668 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>Cache: Changelog - ReactPHP</title>
+
+        <meta name="description" content="Async, Promise-based cache interface for ReactPHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+        <link href="https://github.com/reactphp/cache/releases.atom" type="application/atom+xml" rel="alternate" title="Cache Changelog">
+    </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                    <h1>Cache Changelog</h1>
+
+    <ul class="toc">
+            <li><a href="#2019" title="Jump to year 2019 (2 releases)">2019</a></li>
+            <li><a href="#2018" title="Jump to year 2018 (1 release)">2018</a></li>
+            <li><a href="#2017" title="Jump to year 2017 (1 release)">2017</a></li>
+            <li><a href="#2016" title="Jump to year 2016 (1 release)">2016</a></li>
+            <li><a href="#2014" title="Jump to year 2014 (1 release)">2014</a></li>
+            <li><a href="#2013" title="Jump to year 2013 (2 releases)">2013</a></li>
+            <li><a href="#2012" title="Jump to year 2012 (1 release)">2012</a></li>
+        </ul>
+
+    <h2>
+        <a id="2019" class="anchor" href="#2019" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2019
+    </h2>
+
+    
+            <h3>
+        <a id="100-2019-07-11" class="anchor" href="#100-2019-07-11" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.0.0
+
+        <small>
+            (2019-07-11)
+            <a href="https://github.com/reactphp/cache/releases/tag/v1.0.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>First stable LTS release, now following <a href="https://semver.org/" rel="nofollow">SemVer</a>.<br>
+We'd like to emphasize that this component is production ready and battle-tested.<br>
+We plan to support all long-term support (LTS) releases for at least 24 months,<br>
+so you have a rock-solid foundation to build on top of.</li>
+</ul>
+<blockquote>
+<p>Contains no other changes, so it's actually fully compatible with the v0.6.0 release.</p>
+</blockquote>
+
+    <hr>
+    
+            <h3>
+        <a id="060-2019-07-04" class="anchor" href="#060-2019-07-04" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.6.0
+
+        <small>
+            (2019-07-04)
+            <a href="https://github.com/reactphp/cache/releases/tag/v0.6.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature / BC break: Add support for <code>getMultiple()</code>, <code>setMultiple()</code>, <code>deleteMultiple()</code>, <code>clear()</code> and <code>has()</code><br>
+supporting multiple cache items (inspired by PSR-16).<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="374219300" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/32" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/32/hovercard" href="https://github.com/reactphp/cache/pull/32">#32</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/krlv/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/krlv">@krlv</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="463813955" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/37" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/37/hovercard" href="https://github.com/reactphp/cache/pull/37">#37</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Documentation for TTL precision with millisecond accuracy or below and<br>
+use high-resolution timer for cache TTL on PHP 7.3+.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="437931289" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/35" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/35/hovercard" href="https://github.com/reactphp/cache/pull/35">#35</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="463897470" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/38" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/38/hovercard" href="https://github.com/reactphp/cache/pull/38">#38</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve API documentation and allow legacy HHVM to fail in Travis CI config.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="398559997" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/34" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/34/hovercard" href="https://github.com/reactphp/cache/pull/34">#34</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="437932059" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/36" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/36/hovercard" href="https://github.com/reactphp/cache/pull/36">#36</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Prefix all global functions calls with \ to skip the look up and resolve process and go straight to the global function.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="366461579" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/31" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/31/hovercard" href="https://github.com/reactphp/cache/pull/31">#31</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2018" class="anchor" href="#2018" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2018
+    </h2>
+
+    
+            <h3>
+        <a id="050-2018-06-25" class="anchor" href="#050-2018-06-25" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.5.0
+
+        <small>
+            (2018-06-25)
+            <a href="https://github.com/reactphp/cache/releases/tag/v0.5.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Improve documentation by describing what is expected of a class implementing <code>CacheInterface</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="294126811" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/21" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/21/hovercard" href="https://github.com/reactphp/cache/pull/21">#21</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="294557985" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/22" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/22/hovercard" href="https://github.com/reactphp/cache/pull/22">#22</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="298120483" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/23" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/23/hovercard" href="https://github.com/reactphp/cache/pull/23">#23</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="310016131" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/27" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/27/hovercard" href="https://github.com/reactphp/cache/pull/27">#27</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+<li>
+<p>Implemented (optional) Least Recently Used (LRU) cache algorithm for <code>ArrayCache</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="308650927" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/26" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/26/hovercard" href="https://github.com/reactphp/cache/pull/26">#26</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Added support for cache expiration (TTL).<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="330626351" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/29" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/29/hovercard" href="https://github.com/reactphp/cache/pull/29">#29</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a> and <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+<li>
+<p>Renamed <code>remove</code> to <code>delete</code> making it more in line with <code>PSR-16</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="330633468" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/30" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/30/hovercard" href="https://github.com/reactphp/cache/pull/30">#30</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2017" class="anchor" href="#2017" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2017
+    </h2>
+
+    
+            <h3>
+        <a id="042-2017-12-20" class="anchor" href="#042-2017-12-20" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.2
+
+        <small>
+            (2017-12-20)
+            <a href="https://github.com/reactphp/cache/releases/tag/v0.4.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Improve documentation with usage and installation instructions<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="136478714" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/10" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/10/hovercard" href="https://github.com/reactphp/cache/pull/10">#10</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by adding PHPUnit to <code>require-dev</code> and<br>
+add forward compatibility with PHPUnit 5 and PHPUnit 6 and<br>
+sanitize Composer autoload paths<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="200833342" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/14" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/14/hovercard" href="https://github.com/reactphp/cache/pull/14">#14</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/shaunbramley/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/shaunbramley">@shaunbramley</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="197624721" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/12" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/12/hovercard" href="https://github.com/reactphp/cache/pull/12">#12</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="283579686" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/18" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/18/hovercard" href="https://github.com/reactphp/cache/pull/18">#18</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2016" class="anchor" href="#2016" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2016
+    </h2>
+
+    
+            <h3>
+        <a id="041-2016-02-25" class="anchor" href="#041-2016-02-25" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.1
+
+        <small>
+            (2016-02-25)
+            <a href="https://github.com/reactphp/cache/releases/tag/v0.4.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Repository maintenance, split off from main repo, improve test suite and documentation</li>
+<li>First class support for PHP7 and HHVM (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="114936228" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/9" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/9/hovercard" href="https://github.com/reactphp/cache/pull/9">#9</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Adjust compatibility to 5.3 (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="114708360" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/7" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/7/hovercard" href="https://github.com/reactphp/cache/pull/7">#7</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2014" class="anchor" href="#2014" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2014
+    </h2>
+
+    
+            <h3>
+        <a id="040-2014-02-02" class="anchor" href="#040-2014-02-02" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.0
+
+        <small>
+            (2014-02-02)
+            <a href="https://github.com/reactphp/cache/releases/tag/v0.4.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>BC break: Bump minimum PHP version to PHP 5.4, remove 5.3 specific hacks</li>
+<li>BC break: Update to React/Promise 2.0</li>
+<li>Dependency: Autoloading and filesystem structure now PSR-4 instead of PSR-0</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2013" class="anchor" href="#2013" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2013
+    </h2>
+
+    
+            <h3>
+        <a id="032-2013-04-24" class="anchor" href="#032-2013-04-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.3.2
+
+        <small>
+            (2013-04-24)
+            <a href="https://github.com/reactphp/cache/releases/tag/v0.3.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="030-2013-01-20" class="anchor" href="#030-2013-01-20" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.3.0
+
+        <small>
+            (2013-01-20)
+            <a href="https://github.com/reactphp/cache/releases/tag/v0.3.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2012" class="anchor" href="#2012" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2012
+    </h2>
+
+    
+            <h3>
+        <a id="026-2012-12-24" class="anchor" href="#026-2012-12-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.2.6
+
+        <small>
+            (2012-12-24)
+            <a href="https://github.com/reactphp/cache/releases/tag/v0.2.6" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: New cache component, used by DNS</li>
+</ul>
+
+    <hr>
+    
+    <ul class="links">
+        <li>
+            <a href="https://github.com/reactphp/cache/releases.atom">
+                <i class="icon-feed" aria-hidden="true"></i>
+                Subscribe to the Changelog feed
+            </a>
+        </li>
+    </ul>
+                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../cache/">Cache</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v1.0.0
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/cache#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/cache/tree/v0.6.0#readme" class="version-selector__version">
+                                                    v0.6.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/cache/tree/v0.5.0#readme" class="version-selector__version">
+                                                    v0.5.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/cache/tree/v0.4.2#readme" class="version-selector__version">
+                                                    v0.4.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/cache/tree/v0.4.1#readme" class="version-selector__version">
+                                                    v0.4.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/cache/tree/v0.4.0#readme" class="version-selector__version">
+                                                    v0.4.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/cache/tree/v0.3.2#readme" class="version-selector__version">
+                                                    v0.3.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/cache/tree/v0.3.0#readme" class="version-selector__version">
+                                                    v0.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/cache/tree/v0.2.6#readme" class="version-selector__version">
+                                                    v0.2.6
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/cache">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../cache/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../cache/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/cache:^1.0.0</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (34 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (21 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cboden">
+                                    <img src="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=80 2x" alt="cboden" title="cboden (13 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/igorw">
+                                    <img src="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=80 2x" alt="igorw" title="igorw (6 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (4 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/krlv">
+                                    <img src="https://avatars3.githubusercontent.com/u/3404064?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/3404064?v=4&amp;s=80 2x" alt="krlv" title="krlv (3 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/whatthejeff">
+                                    <img src="https://avatars3.githubusercontent.com/u/306525?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/306525?v=4&amp;s=80 2x" alt="whatthejeff" title="whatthejeff (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/e3betht">
+                                    <img src="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=80 2x" alt="e3betht" title="e3betht (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-cache-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-cache-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,1 6,1 12,1 18,2 24,1 30,4 36,2 42,1 48,1 54,1 60,1 66,1 72,1 78,1 84,1 90,1 96,1 102,1 108,2 114,1 120,1 126,1 132,1 138,1 144,1 150,1 156,2 162,2 168,1 174,1 180,1 186,1 192,1 198,1 204,1 210,1 216,1 222,1 228,1 234,1 240,1 246,1 252,1 258,1 264,1 270,1 276,1 282,2 288,1 294,1 300,1 306,1" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-cache-participation-gradient);mask:url(#reactphp-cache-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/cache/index.html b/cache/index.html
new file mode 100644
index 000000000..addeb6333
--- /dev/null
+++ b/cache/index.html
@@ -0,0 +1,676 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>Cache: 
+Cache - ReactPHP</title>
+
+        <meta name="description" content="Async, Promise-based cache interface for ReactPHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+            </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                                    <h1>Cache</h1>
+
+                    
+<p><a href="https://travis-ci.org/reactphp/cache" rel="nofollow"><img src="https://camo.githubusercontent.com/aec039cd5e7814f89fb131ffd20f7a141b52ffbc/68747470733a2f2f7472617669732d63692e6f72672f72656163747068702f63616368652e7376673f6272616e63683d6d6173746572" alt="Build Status" data-canonical-src="https://travis-ci.org/reactphp/cache.svg?branch=master" style="max-width:100%;"></a></p>
+<p>Async, <a href="../promise/">Promise</a>-based cache interface
+for <a href="https://reactphp.org/" rel="nofollow">ReactPHP</a>.</p>
+<p>The cache component provides a
+<a href="../promise/">Promise</a>-based
+<a href="#cacheinterface"><code>CacheInterface</code></a> and an in-memory <a href="#arraycache"><code>ArrayCache</code></a>
+implementation of that.
+This allows consumers to type hint against the interface and third parties to
+provide alternate implementations.
+This project is heavily inspired by
+<a href="https://www.php-fig.org/psr/psr-16/" rel="nofollow">PSR-16: Common Interface for Caching Libraries</a>,
+but uses an interface more suited for async, non-blocking applications.</p>
+<p><strong>Table of Contents</strong></p>
+<ul>
+<li>
+<a href="#usage">Usage</a>
+<ul>
+<li>
+<a href="#cacheinterface">CacheInterface</a>
+<ul>
+<li><a href="#get">get()</a></li>
+<li><a href="#set">set()</a></li>
+<li><a href="#delete">delete()</a></li>
+<li><a href="#getmultiple">getMultiple()</a></li>
+<li><a href="#setmultiple">setMultiple()</a></li>
+<li><a href="#deletemultiple">deleteMultiple()</a></li>
+<li><a href="#clear">clear()</a></li>
+<li><a href="#has">has()</a></li>
+</ul>
+</li>
+<li><a href="#arraycache">ArrayCache</a></li>
+</ul>
+</li>
+<li>
+<a href="#common-usage">Common usage</a>
+<ul>
+<li><a href="#fallback-get">Fallback get</a></li>
+<li><a href="#fallback-get-and-set">Fallback-get-and-set</a></li>
+</ul>
+</li>
+<li><a href="#install">Install</a></li>
+<li><a href="#tests">Tests</a></li>
+<li><a href="#license">License</a></li>
+</ul>
+<h2>
+<a id="usage" class="anchor" href="#usage" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Usage</h2>
+<h3>
+<a id="cacheinterface" class="anchor" href="#cacheinterface" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>CacheInterface</h3>
+<p>The <code>CacheInterface</code> describes the main interface of this component.
+This allows consumers to type hint against the interface and third parties to
+provide alternate implementations.</p>
+<h4>
+<a id="get" class="anchor" href="#get" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>get()</h4>
+<p>The <code>get(string $key, mixed $default = null): PromiseInterface&lt;mixed&gt;</code> method can be used to
+retrieve an item from the cache.</p>
+<p>This method will resolve with the cached value on success or with the
+given <code>$default</code> value when no item can be found or when an error occurs.
+Similarly, an expired cache item (once the time-to-live is expired) is
+considered a cache miss.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$cache</span></span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>get(<span class="pl-s"><span class="pl-pds">'</span>foo<span class="pl-pds">'</span></span>)</span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>then(<span class="pl-s"><span class="pl-pds">'</span>var_dump<span class="pl-pds">'</span></span>);</span></pre></div>
+<p>This example fetches the value of the key <code>foo</code> and passes it to the
+<code>var_dump</code> function. You can use any of the composition provided by
+<a href="../promise/">promises</a>.</p>
+<h4>
+<a id="set" class="anchor" href="#set" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>set()</h4>
+<p>The <code>set(string $key, mixed $value, ?float $ttl = null): PromiseInterface&lt;bool&gt;</code> method can be used to
+store an item in the cache.</p>
+<p>This method will resolve with <code>true</code> on success or <code>false</code> when an error
+occurs. If the cache implementation has to go over the network to store
+it, it may take a while.</p>
+<p>The optional <code>$ttl</code> parameter sets the maximum time-to-live in seconds
+for this cache item. If this parameter is omitted (or <code>null</code>), the item
+will stay in the cache for as long as the underlying implementation
+supports. Trying to access an expired cache item results in a cache miss,
+see also <a href="#get"><code>get()</code></a>.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$cache</span><span class="pl-k">-&gt;</span>set(<span class="pl-s"><span class="pl-pds">'</span>foo<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>bar<span class="pl-pds">'</span></span>, <span class="pl-c1">60</span>);</span></pre></div>
+<p>This example eventually sets the value of the key <code>foo</code> to <code>bar</code>. If it
+already exists, it is overridden.</p>
+<p>This interface does not enforce any particular TTL resolution, so special
+care may have to be taken if you rely on very high precision with
+millisecond accuracy or below. Cache implementations SHOULD work on a
+best effort basis and SHOULD provide at least second accuracy unless
+otherwise noted. Many existing cache implementations are known to provide
+microsecond or millisecond accuracy, but it's generally not recommended
+to rely on this high precision.</p>
+<p>This interface suggests that cache implementations SHOULD use a monotonic
+time source if available. Given that a monotonic time source is only
+available as of PHP 7.3 by default, cache implementations MAY fall back
+to using wall-clock time.
+While this does not affect many common use cases, this is an important
+distinction for programs that rely on a high time precision or on systems
+that are subject to discontinuous time adjustments (time jumps).
+This means that if you store a cache item with a TTL of 30s and then
+adjust your system time forward by 20s, the cache item SHOULD still
+expire in 30s.</p>
+<h4>
+<a id="delete" class="anchor" href="#delete" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>delete()</h4>
+<p>The <code>delete(string $key): PromiseInterface&lt;bool&gt;</code> method can be used to
+delete an item from the cache.</p>
+<p>This method will resolve with <code>true</code> on success or <code>false</code> when an error
+occurs. When no item for <code>$key</code> is found in the cache, it also resolves
+to <code>true</code>. If the cache implementation has to go over the network to
+delete it, it may take a while.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$cache</span><span class="pl-k">-&gt;</span>delete(<span class="pl-s"><span class="pl-pds">'</span>foo<span class="pl-pds">'</span></span>);</span></pre></div>
+<p>This example eventually deletes the key <code>foo</code> from the cache. As with
+<code>set()</code>, this may not happen instantly and a promise is returned to
+provide guarantees whether or not the item has been removed from cache.</p>
+<h4>
+<a id="getmultiple" class="anchor" href="#getmultiple" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>getMultiple()</h4>
+<p>The <code>getMultiple(string[] $keys, mixed $default = null): PromiseInterface&lt;array&gt;</code> method can be used to
+retrieve multiple cache items by their unique keys.</p>
+<p>This method will resolve with an array of cached values on success or with the
+given <code>$default</code> value when an item can not be found or when an error occurs.
+Similarly, an expired cache item (once the time-to-live is expired) is
+considered a cache miss.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$cache</span><span class="pl-k">-&gt;</span>getMultiple(<span class="pl-c1">array</span>(<span class="pl-s"><span class="pl-pds">'</span>name<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>age<span class="pl-pds">'</span></span>))<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-k">array</span> <span class="pl-smi">$values</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$name</span> <span class="pl-k">=</span> <span class="pl-smi">$values</span>[<span class="pl-s"><span class="pl-pds">'</span>name<span class="pl-pds">'</span></span>] ?? <span class="pl-s"><span class="pl-pds">'</span>User<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1">    <span class="pl-smi">$age</span> <span class="pl-k">=</span> <span class="pl-smi">$values</span>[<span class="pl-s"><span class="pl-pds">'</span>age<span class="pl-pds">'</span></span>] ?? <span class="pl-s"><span class="pl-pds">'</span>n/a<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-smi">$name</span> <span class="pl-k">.</span> <span class="pl-s"><span class="pl-pds">'</span> is <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$age</span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">});</span></pre></div>
+<p>This example fetches the cache items for the <code>name</code> and <code>age</code> keys and
+prints some example output. You can use any of the composition provided
+by <a href="../promise/">promises</a>.</p>
+<h4>
+<a id="setmultiple" class="anchor" href="#setmultiple" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>setMultiple()</h4>
+<p>The <code>setMultiple(array $values, ?float $ttl = null): PromiseInterface&lt;bool&gt;</code> method can be used to
+persist a set of key =&gt; value pairs in the cache, with an optional TTL.</p>
+<p>This method will resolve with <code>true</code> on success or <code>false</code> when an error
+occurs. If the cache implementation has to go over the network to store
+it, it may take a while.</p>
+<p>The optional <code>$ttl</code> parameter sets the maximum time-to-live in seconds
+for these cache items. If this parameter is omitted (or <code>null</code>), these items
+will stay in the cache for as long as the underlying implementation
+supports. Trying to access an expired cache items results in a cache miss,
+see also <a href="#getmultiple"><code>getMultiple()</code></a>.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$cache</span><span class="pl-k">-&gt;</span>setMultiple(<span class="pl-c1">array</span>(<span class="pl-s"><span class="pl-pds">'</span>foo<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">1</span>, <span class="pl-s"><span class="pl-pds">'</span>bar<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">2</span>), <span class="pl-c1">60</span>);</span></pre></div>
+<p>This example eventually sets the list of values - the key <code>foo</code> to <code>1</code> value
+and the key <code>bar</code> to <code>2</code>. If some of the keys already exist, they are overridden.</p>
+<h4>
+<a id="deletemultiple" class="anchor" href="#deletemultiple" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>deleteMultiple()</h4>
+<p>The <code>setMultiple(string[] $keys): PromiseInterface&lt;bool&gt;</code> method can be used to
+delete multiple cache items in a single operation.</p>
+<p>This method will resolve with <code>true</code> on success or <code>false</code> when an error
+occurs. When no items for <code>$keys</code> are found in the cache, it also resolves
+to <code>true</code>. If the cache implementation has to go over the network to
+delete it, it may take a while.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$cache</span><span class="pl-k">-&gt;</span>deleteMultiple(<span class="pl-c1">array</span>(<span class="pl-s"><span class="pl-pds">'</span>foo<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>bar, <span class="pl-pds">'</span></span><span class="pl-c1">baz</span><span class="pl-s"><span class="pl-pds">'</span>));</span></span></pre></div>
+<p>This example eventually deletes keys <code>foo</code>, <code>bar</code> and <code>baz</code> from the cache.
+As with <code>setMultiple()</code>, this may not happen instantly and a promise is returned to
+provide guarantees whether or not the item has been removed from cache.</p>
+<h4>
+<a id="clear" class="anchor" href="#clear" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>clear()</h4>
+<p>The <code>clear(): PromiseInterface&lt;bool&gt;</code> method can be used to
+wipe clean the entire cache.</p>
+<p>This method will resolve with <code>true</code> on success or <code>false</code> when an error
+occurs. If the cache implementation has to go over the network to
+delete it, it may take a while.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$cache</span><span class="pl-k">-&gt;</span>clear();</span></pre></div>
+<p>This example eventually deletes all keys from the cache. As with <code>deleteMultiple()</code>,
+this may not happen instantly and a promise is returned to provide guarantees
+whether or not all the items have been removed from cache.</p>
+<h4>
+<a id="has" class="anchor" href="#has" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>has()</h4>
+<p>The <code>has(string $key): PromiseInterface&lt;bool&gt;</code> method can be used to
+determine whether an item is present in the cache.</p>
+<p>This method will resolve with <code>true</code> on success or <code>false</code> when no item can be found
+or when an error occurs. Similarly, an expired cache item (once the time-to-live
+is expired) is considered a cache miss.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$cache</span></span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>has(<span class="pl-s"><span class="pl-pds">'</span>foo<span class="pl-pds">'</span></span>)</span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>then(<span class="pl-s"><span class="pl-pds">'</span>var_dump<span class="pl-pds">'</span></span>);</span></pre></div>
+<p>This example checks if the value of the key <code>foo</code> is set in the cache and passes
+the result to the <code>var_dump</code> function. You can use any of the composition provided by
+<a href="../promise/">promises</a>.</p>
+<p>NOTE: It is recommended that has() is only to be used for cache warming type purposes
+and not to be used within your live applications operations for get/set, as this method
+is subject to a race condition where your has() will return true and immediately after,
+another script can remove it making the state of your app out of date.</p>
+<h3>
+<a id="arraycache" class="anchor" href="#arraycache" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>ArrayCache</h3>
+<p>The <code>ArrayCache</code> provides an in-memory implementation of the <a href="#cacheinterface"><code>CacheInterface</code></a>.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$cache</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">ArrayCache</span>();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$cache</span><span class="pl-k">-&gt;</span>set(<span class="pl-s"><span class="pl-pds">'</span>foo<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>bar<span class="pl-pds">'</span></span>);</span></pre></div>
+<p>Its constructor accepts an optional <code>?int $limit</code> parameter to limit the
+maximum number of entries to store in the LRU cache. If you add more
+entries to this instance, it will automatically take care of removing
+the one that was least recently used (LRU).</p>
+<p>For example, this snippet will overwrite the first value and only store
+the last two entries:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$cache</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">ArrayCache</span>(<span class="pl-c1">2</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$cache</span><span class="pl-k">-&gt;</span>set(<span class="pl-s"><span class="pl-pds">'</span>foo<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>1<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"><span class="pl-smi">$cache</span><span class="pl-k">-&gt;</span>set(<span class="pl-s"><span class="pl-pds">'</span>bar<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>2<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"><span class="pl-smi">$cache</span><span class="pl-k">-&gt;</span>set(<span class="pl-s"><span class="pl-pds">'</span>baz<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>3<span class="pl-pds">'</span></span>);</span></pre></div>
+<p>This cache implementation is known to rely on wall-clock time to schedule
+future cache expiration times when using any version before PHP 7.3,
+because a monotonic time source is only available as of PHP 7.3 (<code>hrtime()</code>).
+While this does not affect many common use cases, this is an important
+distinction for programs that rely on a high time precision or on systems
+that are subject to discontinuous time adjustments (time jumps).
+This means that if you store a cache item with a TTL of 30s on PHP &lt; 7.3
+and then adjust your system time forward by 20s, the cache item may
+expire in 10s. See also <a href="#set"><code>set()</code></a> for more details.</p>
+<h2>
+<a id="common-usage" class="anchor" href="#common-usage" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Common usage</h2>
+<h3>
+<a id="fallback-get" class="anchor" href="#fallback-get" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Fallback get</h3>
+<p>A common use case of caches is to attempt fetching a cached value and as a
+fallback retrieve it from the original data source if not found. Here is an
+example of that:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$cache</span></span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>get(<span class="pl-s"><span class="pl-pds">'</span>foo<span class="pl-pds">'</span></span>)</span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$result</span>) {</span>
+<span class="pl-s1">        <span class="pl-k">if</span> (<span class="pl-smi">$result</span> <span class="pl-k">===</span> <span class="pl-c1">null</span>) {</span>
+<span class="pl-s1">            <span class="pl-k">return</span> getFooFromDb();</span>
+<span class="pl-s1">        }</span>
+<span class="pl-s1">        </span>
+<span class="pl-s1">        <span class="pl-k">return</span> <span class="pl-smi">$result</span>;</span>
+<span class="pl-s1">    })</span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>then(<span class="pl-s"><span class="pl-pds">'</span>var_dump<span class="pl-pds">'</span></span>);</span></pre></div>
+<p>First an attempt is made to retrieve the value of <code>foo</code>. A callback function is
+registered that will call <code>getFooFromDb</code> when the resulting value is null.
+<code>getFooFromDb</code> is a function (can be any PHP callable) that will be called if the
+key does not exist in the cache.</p>
+<p><code>getFooFromDb</code> can handle the missing key by returning a promise for the
+actual value from the database (or any other data source). As a result, this
+chain will correctly fall back, and provide the value in both cases.</p>
+<h3>
+<a id="fallback-get-and-set" class="anchor" href="#fallback-get-and-set" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Fallback get and set</h3>
+<p>To expand on the fallback get example, often you want to set the value on the
+cache after fetching it from the data source.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$cache</span></span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>get(<span class="pl-s"><span class="pl-pds">'</span>foo<span class="pl-pds">'</span></span>)</span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$result</span>) {</span>
+<span class="pl-s1">        <span class="pl-k">if</span> (<span class="pl-smi">$result</span> <span class="pl-k">===</span> <span class="pl-c1">null</span>) {</span>
+<span class="pl-s1">            <span class="pl-k">return</span> <span class="pl-smi">$this</span><span class="pl-k">-&gt;</span>getAndCacheFooFromDb();</span>
+<span class="pl-s1">        }</span>
+<span class="pl-s1">        </span>
+<span class="pl-s1">        <span class="pl-k">return</span> <span class="pl-smi">$result</span>;</span>
+<span class="pl-s1">    })</span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>then(<span class="pl-s"><span class="pl-pds">'</span>var_dump<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-k">public</span> <span class="pl-k">function</span> <span class="pl-en">getAndCacheFooFromDb</span>()</span>
+<span class="pl-s1">{</span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-smi">$this</span><span class="pl-k">-&gt;</span><span class="pl-smi">db</span></span>
+<span class="pl-s1">        <span class="pl-k">-&gt;</span>get(<span class="pl-s"><span class="pl-pds">'</span>foo<span class="pl-pds">'</span></span>)</span>
+<span class="pl-s1">        <span class="pl-k">-&gt;</span>then(<span class="pl-c1">array</span>(<span class="pl-smi">$this</span>, <span class="pl-s"><span class="pl-pds">'</span>cacheFooFromDb<span class="pl-pds">'</span></span>));</span>
+<span class="pl-s1">}</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-k">public</span> <span class="pl-k">function</span> <span class="pl-en">cacheFooFromDb</span>(<span class="pl-smi">$foo</span>)</span>
+<span class="pl-s1">{</span>
+<span class="pl-s1">    <span class="pl-smi">$this</span><span class="pl-k">-&gt;</span><span class="pl-smi">cache</span><span class="pl-k">-&gt;</span>set(<span class="pl-s"><span class="pl-pds">'</span>foo<span class="pl-pds">'</span></span>, <span class="pl-smi">$foo</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-smi">$foo</span>;</span>
+<span class="pl-s1">}</span></pre></div>
+<p>By using chaining you can easily conditionally cache the value if it is
+fetched from the database.</p>
+<h2>
+<a id="install" class="anchor" href="#install" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Install</h2>
+<p>The recommended way to install this library is <a href="https://getcomposer.org" rel="nofollow">through Composer</a>.
+<a href="https://getcomposer.org/doc/00-intro.md" rel="nofollow">New to Composer?</a></p>
+<p>This project follows <a href="https://semver.org/" rel="nofollow">SemVer</a>.
+This will install the latest supported version:</p>
+<div class="highlight highlight-source-shell"><pre>$ composer require react/cache:^1.0</pre></div>
+<p>See also the <a href="changelog.html">CHANGELOG</a> for details about version upgrades.</p>
+<p>This project aims to run on any platform and thus does not require any PHP
+extensions and supports running on legacy PHP 5.3 through current PHP 7+ and
+HHVM.
+It's <em>highly recommended to use PHP 7+</em> for this project.</p>
+<h2>
+<a id="tests" class="anchor" href="#tests" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Tests</h2>
+<p>To run the test suite, you first need to clone this repo and then install all
+dependencies <a href="https://getcomposer.org" rel="nofollow">through Composer</a>:</p>
+<div class="highlight highlight-source-shell"><pre>$ composer install</pre></div>
+<p>To run the test suite, go to the project root and run:</p>
+<div class="highlight highlight-source-shell"><pre>$ php vendor/bin/phpunit</pre></div>
+<h2>
+<a id="license" class="anchor" href="#license" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>License</h2>
+<p>MIT, see <a href="license.html">LICENSE file</a>.</p>
+                                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../cache/">Cache</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v1.0.0
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/cache#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/cache/tree/v0.6.0#readme" class="version-selector__version">
+                                                    v0.6.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/cache/tree/v0.5.0#readme" class="version-selector__version">
+                                                    v0.5.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/cache/tree/v0.4.2#readme" class="version-selector__version">
+                                                    v0.4.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/cache/tree/v0.4.1#readme" class="version-selector__version">
+                                                    v0.4.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/cache/tree/v0.4.0#readme" class="version-selector__version">
+                                                    v0.4.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/cache/tree/v0.3.2#readme" class="version-selector__version">
+                                                    v0.3.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/cache/tree/v0.3.0#readme" class="version-selector__version">
+                                                    v0.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/cache/tree/v0.2.6#readme" class="version-selector__version">
+                                                    v0.2.6
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/cache">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../cache/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../cache/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/cache:^1.0.0</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (34 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (21 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cboden">
+                                    <img src="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=80 2x" alt="cboden" title="cboden (13 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/igorw">
+                                    <img src="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=80 2x" alt="igorw" title="igorw (6 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (4 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/krlv">
+                                    <img src="https://avatars3.githubusercontent.com/u/3404064?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/3404064?v=4&amp;s=80 2x" alt="krlv" title="krlv (3 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/whatthejeff">
+                                    <img src="https://avatars3.githubusercontent.com/u/306525?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/306525?v=4&amp;s=80 2x" alt="whatthejeff" title="whatthejeff (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/e3betht">
+                                    <img src="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=80 2x" alt="e3betht" title="e3betht (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-cache-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-cache-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,1 6,1 12,1 18,2 24,1 30,4 36,2 42,1 48,1 54,1 60,1 66,1 72,1 78,1 84,1 90,1 96,1 102,1 108,2 114,1 120,1 126,1 132,1 138,1 144,1 150,1 156,2 162,2 168,1 174,1 180,1 186,1 192,1 198,1 204,1 210,1 216,1 222,1 228,1 234,1 240,1 246,1 252,1 258,1 264,1 270,1 276,1 282,2 288,1 294,1 300,1 306,1" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-cache-participation-gradient);mask:url(#reactphp-cache-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/cache/license.html b/cache/license.html
new file mode 100644
index 000000000..e6ba8914a
--- /dev/null
+++ b/cache/license.html
@@ -0,0 +1,407 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>Cache: License - ReactPHP</title>
+
+        <meta name="description" content="Async, Promise-based cache interface for ReactPHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+            </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                    <h1>Cache License</h1>
+
+    <p>Copyright (c) 2012 Igor Wiedler, Chris Boden</p>
+<p>Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:</p>
+<p>The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.</p>
+<p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.</p>
+                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../cache/">Cache</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v1.0.0
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/cache#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/cache/tree/v0.6.0#readme" class="version-selector__version">
+                                                    v0.6.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/cache/tree/v0.5.0#readme" class="version-selector__version">
+                                                    v0.5.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/cache/tree/v0.4.2#readme" class="version-selector__version">
+                                                    v0.4.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/cache/tree/v0.4.1#readme" class="version-selector__version">
+                                                    v0.4.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/cache/tree/v0.4.0#readme" class="version-selector__version">
+                                                    v0.4.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/cache/tree/v0.3.2#readme" class="version-selector__version">
+                                                    v0.3.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/cache/tree/v0.3.0#readme" class="version-selector__version">
+                                                    v0.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/cache/tree/v0.2.6#readme" class="version-selector__version">
+                                                    v0.2.6
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/cache">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../cache/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../cache/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/cache:^1.0.0</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (34 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (21 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cboden">
+                                    <img src="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=80 2x" alt="cboden" title="cboden (13 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/igorw">
+                                    <img src="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=80 2x" alt="igorw" title="igorw (6 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (4 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/krlv">
+                                    <img src="https://avatars3.githubusercontent.com/u/3404064?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/3404064?v=4&amp;s=80 2x" alt="krlv" title="krlv (3 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/whatthejeff">
+                                    <img src="https://avatars3.githubusercontent.com/u/306525?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/306525?v=4&amp;s=80 2x" alt="whatthejeff" title="whatthejeff (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/e3betht">
+                                    <img src="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=80 2x" alt="e3betht" title="e3betht (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-cache-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-cache-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,1 6,1 12,1 18,2 24,1 30,4 36,2 42,1 48,1 54,1 60,1 66,1 72,1 78,1 84,1 90,1 96,1 102,1 108,2 114,1 120,1 126,1 132,1 138,1 144,1 150,1 156,2 162,2 168,1 174,1 180,1 186,1 192,1 198,1 204,1 210,1 216,1 222,1 228,1 234,1 240,1 246,1 252,1 258,1 264,1 270,1 276,1 282,2 288,1 294,1 300,1 306,1" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-cache-participation-gradient);mask:url(#reactphp-cache-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/changelog.atom b/changelog.atom
new file mode 100644
index 000000000..98166f689
--- /dev/null
+++ b/changelog.atom
@@ -0,0 +1,303 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
+  <title type="text">The combined changelog for all ReactPHP components.</title>
+  <updated>2020-05-12T15:17:09+00:00</updated>
+  <generator uri="http://framework.zend.com" version="2">Zend_Feed_Writer</generator>
+  <link rel="alternate" type="text/html" href="https://reactphp.org/changelog.html"/>
+  <link rel="self" type="application/atom+xml" href="https://reactphp.org/changelog.atom"/>
+  <id>https://reactphp.org/changelog.html</id>
+  <entry>
+    <title type="html"><![CDATA[Promise 2.8.0]]></title>
+    <summary type="html"><![CDATA[<ul>
+<li>
+<p>Mark <code>FulfilledPromise</code>, <code>RejectedPromise</code> and <code>LazyPromise</code> as deprecated for Promise v2 (and remove for Promise v3).<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="459181492" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/143" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/143/hovercard" href="https://github.com/reactphp/promise/pull/143">#143</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="577487588" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/165" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/165/hovercard" href="https://github.com/reactphp/promise/pull/165">#165</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre>// deprecated
+$fulfilled = new React\Promise\FulfilledPromise($value);
+$rejected = new React\Promise\RejectedPromise($reason);
+
+// recommended alternatives
+$fulfilled = React\Promise\resolve($value);
+$rejected = React\Promise\reject($reason);</pre></div>
+</li>
+<li>
+<p>Fix: Fix checking whether cancellable promise is an object and avoid possible warning.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="615161685" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/168" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/168/hovercard" href="https://github.com/reactphp/promise/pull/168">#168</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/smscr/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/smscr">@smscr</a> and <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</p>
+</li>
+<li>
+<p>Improve documentation and add docblocks to functions and interfaces.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="396878297" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/135" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/135/hovercard" href="https://github.com/reactphp/promise/pull/135">#135</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/CharlotteDunois/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/CharlotteDunois">@CharlotteDunois</a>)</p>
+</li>
+<li>
+<p>Add <code>.gitattributes</code> to exclude dev files from exports.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="530762040" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/154" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/154/hovercard" href="https://github.com/reactphp/promise/pull/154">#154</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/reedy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/reedy">@reedy</a>)</p>
+</li>
+<li>
+<p>Improve test suite, run tests on PHP 7.4 and update PHPUnit test setup.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="575313779" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/163" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/163/hovercard" href="https://github.com/reactphp/promise/pull/163">#163</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>]]></summary>
+    <updated>2020-05-12T15:17:09+00:00</updated>
+    <link rel="alternate" type="text/html" href="https://github.com/reactphp/promise/releases/tag/v2.8.0"/>
+    <id>https://github.com/reactphp/promise/releases/tag/v2.8.0</id>
+    <author>
+      <name>clue</name>
+      <uri>https://github.com/clue</uri>
+    </author>
+  </entry>
+  <entry>
+    <title type="html"><![CDATA[Stream 1.1.1]]></title>
+    <summary type="html"><![CDATA[<ul>
+<li>
+<p>Fix: Fix faulty write buffer behavior when sending large data chunks over TLS (Mac OS X only).<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="609798969" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/150" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/150/hovercard" href="https://github.com/reactphp/stream/pull/150">#150</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Minor code style improvements to fix phpstan analysis warnings and<br>
+add <code>.gitattributes</code> to exclude dev files from exports.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="443419394" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/140" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/140/hovercard" href="https://github.com/reactphp/stream/pull/140">#140</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/flow-control/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/flow-control">@flow-control</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="530765542" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/144" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/144/hovercard" href="https://github.com/reactphp/stream/pull/144">#144</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/reedy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/reedy">@reedy</a>)</p>
+</li>
+<li>
+<p>Improve test suite to run tests on PHP 7.4 and simplify test matrix.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="547450197" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/147" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/147/hovercard" href="https://github.com/reactphp/stream/pull/147">#147</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>]]></summary>
+    <updated>2020-05-04T10:18:04+00:00</updated>
+    <link rel="alternate" type="text/html" href="https://github.com/reactphp/stream/releases/tag/v1.1.1"/>
+    <id>https://github.com/reactphp/stream/releases/tag/v1.1.1</id>
+    <author>
+      <name>clue</name>
+      <uri>https://github.com/clue</uri>
+    </author>
+  </entry>
+  <entry>
+    <title type="html"><![CDATA[Socket 1.4.0]]></title>
+    <summary type="html"><![CDATA[<p>A major new feature release, see <a href="https://clue.engineering/2020/introducing-ipv6-for-reactphp" rel="nofollow"><strong>release announcement</strong></a>.</p>
+<ul>
+<li>
+<p>Feature: Add IPv6 support to <code>Connector</code> (implement "Happy Eyeballs" algorithm to support IPv6 probing).<br>
+IPv6 support is turned on by default, use new <code>happy_eyeballs</code> option in <code>Connector</code> to toggle behavior.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="415336445" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/196" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/196/hovercard" href="https://github.com/reactphp/socket/pull/196">#196</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="577351300" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/224" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/224/hovercard" href="https://github.com/reactphp/socket/pull/224">#224</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="579243592" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/225" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/225/hovercard" href="https://github.com/reactphp/socket/pull/225">#225</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a> and <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Default to using DNS cache (with max 256 entries) for <code>Connector</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="579375999" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/226" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/226/hovercard" href="https://github.com/reactphp/socket/pull/226">#226</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Add <code>.gitattributes</code> to exclude dev files from exports and some minor code style fixes.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="530763455" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/219" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/219/hovercard" href="https://github.com/reactphp/socket/pull/219">#219</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/reedy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/reedy">@reedy</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="525991391" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/218" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/218/hovercard" href="https://github.com/reactphp/socket/pull/218">#218</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/mmoreram/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mmoreram">@mmoreram</a>)</p>
+</li>
+<li>
+<p>Improve test suite to fix failing test cases when using new DNS component,<br>
+significantly improve test performance by awaiting events instead of sleeping,<br>
+exclude TLS 1.3 test on PHP 7.3, run tests on PHP 7.4 and simplify test matrix.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="469718878" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/208" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/208/hovercard" href="https://github.com/reactphp/socket/pull/208">#208</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="481098218" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/209" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/209/hovercard" href="https://github.com/reactphp/socket/pull/209">#209</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="481102160" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/210" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/210/hovercard" href="https://github.com/reactphp/socket/pull/210">#210</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="524032637" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/217" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/217/hovercard" href="https://github.com/reactphp/socket/pull/217">#217</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="575460798" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/223" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/223/hovercard" href="https://github.com/reactphp/socket/pull/223">#223</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>]]></summary>
+    <updated>2020-03-12T12:15:21+00:00</updated>
+    <link rel="alternate" type="text/html" href="https://github.com/reactphp/socket/releases/tag/v1.4.0"/>
+    <id>https://github.com/reactphp/socket/releases/tag/v1.4.0</id>
+    <author>
+      <name>clue</name>
+      <uri>https://github.com/clue</uri>
+    </author>
+  </entry>
+  <entry>
+    <title type="html"><![CDATA[HTTPClient 0.5.10]]></title>
+    <summary type="html"><![CDATA[<ul>
+<li>
+<p>Fix: Avoid unneeded warning when decoding invalid data on PHP 7.4.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="548458501" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/150" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/150/hovercard" href="https://github.com/reactphp/http-client/pull/150">#150</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Add <code>.gitattributes</code> to exclude dev files from exports.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="530764048" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/149" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/149/hovercard" href="https://github.com/reactphp/http-client/pull/149">#149</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/reedy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/reedy">@reedy</a>)</p>
+</li>
+<li>
+<p>Link to clue/reactphp-buzz for higher-level HTTP client.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="403569861" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/139" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/139/hovercard" href="https://github.com/reactphp/http-client/pull/139">#139</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by simplifying test matrix and test setup.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="549149444" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/151" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/151/hovercard" href="https://github.com/reactphp/http-client/pull/151">#151</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>]]></summary>
+    <updated>2020-01-14T08:36:32+00:00</updated>
+    <link rel="alternate" type="text/html" href="https://github.com/reactphp/http-client/releases/tag/v0.5.10"/>
+    <id>https://github.com/reactphp/http-client/releases/tag/v0.5.10</id>
+    <author>
+      <name>clue</name>
+      <uri>https://github.com/clue</uri>
+    </author>
+  </entry>
+  <entry>
+    <title type="html"><![CDATA[HTTP 0.8.6]]></title>
+    <summary type="html"><![CDATA[<ul>
+<li>Fix parsing Cookie request header with comma in its values (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="530559091" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/352" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/352/hovercard" href="https://github.com/reactphp/http/pull/352">#352</a> by @fiskie)</li>
+<li>Add .gitattributes to exclude dev files from exports (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="530763163" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/353" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/353/hovercard" href="https://github.com/reactphp/http/pull/353">#353</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/reedy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/reedy">@reedy</a>)</li>
+<li>Avoid unneeded warning when decoding invalid data on PHP 7.4 (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="548477670" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/357" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/357/hovercard" href="https://github.com/reactphp/http/pull/357">#357</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</li>
+</ul>]]></summary>
+    <updated>2020-01-12T16:50:25+00:00</updated>
+    <link rel="alternate" type="text/html" href="https://github.com/reactphp/http/releases/tag/v0.8.6"/>
+    <id>https://github.com/reactphp/http/releases/tag/v0.8.6</id>
+    <author>
+      <name>WyriHaximus</name>
+      <uri>https://github.com/WyriHaximus</uri>
+    </author>
+  </entry>
+  <entry>
+    <title type="html"><![CDATA[EventLoop 1.1.1]]></title>
+    <summary type="html"><![CDATA[<ul>
+<li>
+<p>Fix: Fix reporting connection refused errors with <code>ExtUvLoop</code> on Linux and <code>StreamSelectLoop</code> on Windows.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="543263503" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/207" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/207/hovercard" href="https://github.com/reactphp/event-loop/pull/207">#207</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="544149993" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/208" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/208/hovercard" href="https://github.com/reactphp/event-loop/pull/208">#208</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Fix unsupported EventConfig and <code>SEGFAULT</code> on shutdown with <code>ExtEventLoop</code> on Windows.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="542964895" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/205" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/205/hovercard" href="https://github.com/reactphp/event-loop/pull/205">#205</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Prevent interval overflow for timers very far in the future with <code>ExtUvLoop</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="445966113" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/196" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/196/hovercard" href="https://github.com/reactphp/event-loop/pull/196">#196</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/PabloKowalczyk/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/PabloKowalczyk">@PabloKowalczyk</a>)</p>
+</li>
+<li>
+<p>Fix: Check PCNTL functions for signal support instead of PCNTL extension with <code>StreamSelectLoop</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="441409833" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/195" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/195/hovercard" href="https://github.com/reactphp/event-loop/pull/195">#195</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Add <code>.gitattributes</code> to exclude dev files from exports.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="530765087" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/201" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/201/hovercard" href="https://github.com/reactphp/event-loop/pull/201">#201</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/reedy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/reedy">@reedy</a>)</p>
+</li>
+<li>
+<p>Improve test suite to fix testing <code>ExtUvLoop</code> on Travis,<br>
+fix Travis CI builds, do not install <code>libuv</code> on legacy PHP setups,<br>
+fix failing test cases due to inaccurate timers,<br>
+run tests on Windows via Travis CI and<br>
+run tests on PHP 7.4 and simplify test matrix and test setup.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="447465228" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/197" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/197/hovercard" href="https://github.com/reactphp/event-loop/pull/197">#197</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="531456371" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/202" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/202/hovercard" href="https://github.com/reactphp/event-loop/pull/202">#202</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="541787408" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/203" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/203/hovercard" href="https://github.com/reactphp/event-loop/pull/203">#203</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="541905883" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/204" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/204/hovercard" href="https://github.com/reactphp/event-loop/pull/204">#204</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="544160472" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/209" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/209/hovercard" href="https://github.com/reactphp/event-loop/pull/209">#209</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>]]></summary>
+    <updated>2020-01-01T18:44:23+00:00</updated>
+    <link rel="alternate" type="text/html" href="https://github.com/reactphp/event-loop/releases/tag/v1.1.1"/>
+    <id>https://github.com/reactphp/event-loop/releases/tag/v1.1.1</id>
+    <author>
+      <name>clue</name>
+      <uri>https://github.com/clue</uri>
+    </author>
+  </entry>
+  <entry>
+    <title type="html"><![CDATA[HTTP 0.8.5]]></title>
+    <summary type="html"><![CDATA[<ul>
+<li>
+<p>Internal refactorings and optimizations to improve request parsing performance.<br>
+Benchmarks suggest number of requests/s improved by ~30% for common <code>GET</code> requests.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="456296934" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/345" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/345/hovercard" href="https://github.com/reactphp/http/pull/345">#345</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="456649853" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/346" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/346/hovercard" href="https://github.com/reactphp/http/pull/346">#346</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="498214944" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/349" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/349/hovercard" href="https://github.com/reactphp/http/pull/349">#349</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="499118258" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/350" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/350/hovercard" href="https://github.com/reactphp/http/pull/350">#350</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Add documentation and example for JSON/XML request body and<br>
+improve documentation for concurrency and streaming requests and for error handling.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="432871220" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/341" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/341/hovercard" href="https://github.com/reactphp/http/pull/341">#341</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="434218553" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/342" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/342/hovercard" href="https://github.com/reactphp/http/pull/342">#342</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>]]></summary>
+    <updated>2019-10-29T14:17:29+00:00</updated>
+    <link rel="alternate" type="text/html" href="https://github.com/reactphp/http/releases/tag/v0.8.5"/>
+    <id>https://github.com/reactphp/http/releases/tag/v0.8.5</id>
+    <author>
+      <name>clue</name>
+      <uri>https://github.com/clue</uri>
+    </author>
+  </entry>
+  <entry>
+    <title type="html"><![CDATA[DNS 1.2.0]]></title>
+    <summary type="html"><![CDATA[<ul>
+<li>
+<p>Feature: Add <code>TcpTransportExecutor</code> to send DNS queries over TCP/IP connection,<br>
+add <code>SelectiveTransportExecutor</code> to retry with TCP if UDP is truncated and<br>
+automatically select transport protocol when no explicit <code>udp://</code> or <code>tcp://</code> scheme is given in <code>Factory</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="476278188" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/145" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/145/hovercard" href="https://github.com/reactphp/dns/pull/145">#145</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="478672660" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/146" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/146/hovercard" href="https://github.com/reactphp/dns/pull/146">#146</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="479002973" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/147" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/147/hovercard" href="https://github.com/reactphp/dns/pull/147">#147</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="480052064" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/148" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/148/hovercard" href="https://github.com/reactphp/dns/pull/148">#148</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Support escaping literal dots and special characters in domain names.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="475625705" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/144" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/144/hovercard" href="https://github.com/reactphp/dns/pull/144">#144</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>]]></summary>
+    <updated>2019-08-15T09:06:41+00:00</updated>
+    <link rel="alternate" type="text/html" href="https://github.com/reactphp/dns/releases/tag/v1.2.0"/>
+    <id>https://github.com/reactphp/dns/releases/tag/v1.2.0</id>
+    <author>
+      <name>clue</name>
+      <uri>https://github.com/clue</uri>
+    </author>
+  </entry>
+  <entry>
+    <title type="html"><![CDATA[DNS 1.1.0]]></title>
+    <summary type="html"><![CDATA[<ul>
+<li>
+<p>Feature: Support parsing <code>CAA</code> and <code>SSHFP</code> records.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="468573632" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/141" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/141/hovercard" href="https://github.com/reactphp/dns/pull/141">#141</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="468845581" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/142" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/142/hovercard" href="https://github.com/reactphp/dns/pull/142">#142</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Add <code>ResolverInterface</code> as common interface for <code>Resolver</code> class.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="468244418" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/139" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/139/hovercard" href="https://github.com/reactphp/dns/pull/139">#139</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Add missing private property definitions and<br>
+remove unneeded dependency on <code>react/stream</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="468250332" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/140" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/140/hovercard" href="https://github.com/reactphp/dns/pull/140">#140</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="469402412" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/143" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/143/hovercard" href="https://github.com/reactphp/dns/pull/143">#143</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>]]></summary>
+    <updated>2019-07-18T09:47:54+00:00</updated>
+    <link rel="alternate" type="text/html" href="https://github.com/reactphp/dns/releases/tag/v1.1.0"/>
+    <id>https://github.com/reactphp/dns/releases/tag/v1.1.0</id>
+    <author>
+      <name>clue</name>
+      <uri>https://github.com/clue</uri>
+    </author>
+  </entry>
+  <entry>
+    <title type="html"><![CDATA[DNS 1.0.0]]></title>
+    <summary type="html"><![CDATA[<ul>
+<li>First stable LTS release, now following <a href="https://semver.org/" rel="nofollow">SemVer</a>.<br>
+We'd like to emphasize that this component is production ready and battle-tested.<br>
+We plan to support all long-term support (LTS) releases for at least 24 months,<br>
+so you have a rock-solid foundation to build on top of.</li>
+</ul>
+<p>This update involves a number of BC breaks due to dropped support for<br>
+deprecated functionality and some internal API cleanup. We've tried hard to<br>
+avoid BC breaks where possible and minimize impact otherwise. We expect that<br>
+most consumers of this package will actually not be affected by any BC<br>
+breaks, see below for more details:</p>
+<ul>
+<li>
+<p>BC break: Delete all deprecated APIs, use <code>Query</code> objects for <code>Message</code> questions<br>
+instead of nested arrays and increase code coverage to 100%.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="465771042" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/130" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/130/hovercard" href="https://github.com/reactphp/dns/pull/130">#130</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>BC break: Move <code>$nameserver</code> from <code>ExecutorInterface</code> to <code>UdpTransportExecutor</code>,<br>
+remove advanced/internal <code>UdpTransportExecutor</code> args for <code>Parser</code>/<code>BinaryDumper</code> and<br>
+add API documentation for <code>ExecutorInterface</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="466759823" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/135" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/135/hovercard" href="https://github.com/reactphp/dns/pull/135">#135</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="466797146" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/137" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/137/hovercard" href="https://github.com/reactphp/dns/pull/137">#137</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="466886290" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/138" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/138/hovercard" href="https://github.com/reactphp/dns/pull/138">#138</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>BC break: Replace <code>HeaderBag</code> attributes with simple <code>Message</code> properties.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="465915799" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/132" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/132/hovercard" href="https://github.com/reactphp/dns/pull/132">#132</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>BC break: Mark all <code>Record</code> attributes as required, add documentation vs <code>Query</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="466784724" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/136" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/136/hovercard" href="https://github.com/reactphp/dns/pull/136">#136</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>BC break: Mark all classes as final to discourage inheritance<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="466693315" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/134" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/134/hovercard" href="https://github.com/reactphp/dns/pull/134">#134</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+</ul>]]></summary>
+    <updated>2019-07-11T14:58:45+00:00</updated>
+    <link rel="alternate" type="text/html" href="https://github.com/reactphp/dns/releases/tag/v1.0.0"/>
+    <id>https://github.com/reactphp/dns/releases/tag/v1.0.0</id>
+    <author>
+      <name>clue</name>
+      <uri>https://github.com/clue</uri>
+    </author>
+  </entry>
+</feed>
diff --git a/changelog.html b/changelog.html
new file mode 100644
index 000000000..7e86fcd92
--- /dev/null
+++ b/changelog.html
@@ -0,0 +1,7311 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>Changelog - ReactPHP</title>
+
+        <meta name="description" content="Event-driven, non-blocking I/O with PHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = 'assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(assets/icons.063d0ba7.ttf) format("truetype"),url(assets/icons.5ea4cc5c.woff) format("woff"),url(assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="assets/main.d691d407.js"></script>
+        <link href="https://reactphp.org/changelog.atom" type="application/atom+xml" rel="alternate" title="Changelog">
+    </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="./">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="./">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+    
+    <div class="container">
+        <div class="wrapper wrapper--small">
+            <h1>
+<a id="changelog" class="anchor" href="#changelog" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Changelog</h1>
+<p>The combined changelog for all ReactPHP components.</p>
+
+
+            <ul class="toc">
+            <li><a href="#2020" title="Jump to year 2020 (6 releases)">2020</a></li>
+            <li><a href="#2019" title="Jump to year 2019 (21 releases)">2019</a></li>
+            <li><a href="#2018" title="Jump to year 2018 (33 releases)">2018</a></li>
+            <li><a href="#2017" title="Jump to year 2017 (71 releases)">2017</a></li>
+            <li><a href="#2016" title="Jump to year 2016 (29 releases)">2016</a></li>
+            <li><a href="#2015" title="Jump to year 2015 (13 releases)">2015</a></li>
+            <li><a href="#2014" title="Jump to year 2014 (21 releases)">2014</a></li>
+            <li><a href="#2013" title="Jump to year 2013 (21 releases)">2013</a></li>
+            <li><a href="#2012" title="Jump to year 2012 (42 releases)">2012</a></li>
+        </ul>
+
+    <h2>
+        <a id="2020" class="anchor" href="#2020" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2020
+    </h2>
+
+    
+                        <h3>
+        <a id="promise-280-2020-05-12" class="anchor" href="#promise-280-2020-05-12" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Promise 2.8.0
+
+        <small>
+            (2020-05-12)
+            <a href="https://github.com/reactphp/promise/releases/tag/v2.8.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Mark <code>FulfilledPromise</code>, <code>RejectedPromise</code> and <code>LazyPromise</code> as deprecated for Promise v2 (and remove for Promise v3).<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="459181492" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/143" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/143/hovercard" href="https://github.com/reactphp/promise/pull/143">#143</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="577487588" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/165" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/165/hovercard" href="https://github.com/reactphp/promise/pull/165">#165</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre>// deprecated
+$fulfilled = new React\Promise\FulfilledPromise($value);
+$rejected = new React\Promise\RejectedPromise($reason);
+
+// recommended alternatives
+$fulfilled = React\Promise\resolve($value);
+$rejected = React\Promise\reject($reason);</pre></div>
+</li>
+<li>
+<p>Fix: Fix checking whether cancellable promise is an object and avoid possible warning.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="615161685" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/168" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/168/hovercard" href="https://github.com/reactphp/promise/pull/168">#168</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/smscr/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/smscr">@smscr</a> and <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</p>
+</li>
+<li>
+<p>Improve documentation and add docblocks to functions and interfaces.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="396878297" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/135" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/135/hovercard" href="https://github.com/reactphp/promise/pull/135">#135</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/CharlotteDunois/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/CharlotteDunois">@CharlotteDunois</a>)</p>
+</li>
+<li>
+<p>Add <code>.gitattributes</code> to exclude dev files from exports.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="530762040" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/154" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/154/hovercard" href="https://github.com/reactphp/promise/pull/154">#154</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/reedy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/reedy">@reedy</a>)</p>
+</li>
+<li>
+<p>Improve test suite, run tests on PHP 7.4 and update PHPUnit test setup.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="575313779" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/163" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/163/hovercard" href="https://github.com/reactphp/promise/pull/163">#163</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-111-2020-05-04" class="anchor" href="#stream-111-2020-05-04" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 1.1.1
+
+        <small>
+            (2020-05-04)
+            <a href="https://github.com/reactphp/stream/releases/tag/v1.1.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Fix: Fix faulty write buffer behavior when sending large data chunks over TLS (Mac OS X only).<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="609798969" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/150" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/150/hovercard" href="https://github.com/reactphp/stream/pull/150">#150</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Minor code style improvements to fix phpstan analysis warnings and<br>
+add <code>.gitattributes</code> to exclude dev files from exports.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="443419394" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/140" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/140/hovercard" href="https://github.com/reactphp/stream/pull/140">#140</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/flow-control/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/flow-control">@flow-control</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="530765542" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/144" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/144/hovercard" href="https://github.com/reactphp/stream/pull/144">#144</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/reedy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/reedy">@reedy</a>)</p>
+</li>
+<li>
+<p>Improve test suite to run tests on PHP 7.4 and simplify test matrix.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="547450197" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/147" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/147/hovercard" href="https://github.com/reactphp/stream/pull/147">#147</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-140-2020-03-12" class="anchor" href="#socket-140-2020-03-12" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 1.4.0
+
+        <small>
+            (2020-03-12)
+            <a href="https://github.com/reactphp/socket/releases/tag/v1.4.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <p>A major new feature release, see <a href="https://clue.engineering/2020/introducing-ipv6-for-reactphp" rel="nofollow"><strong>release announcement</strong></a>.</p>
+<ul>
+<li>
+<p>Feature: Add IPv6 support to <code>Connector</code> (implement "Happy Eyeballs" algorithm to support IPv6 probing).<br>
+IPv6 support is turned on by default, use new <code>happy_eyeballs</code> option in <code>Connector</code> to toggle behavior.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="415336445" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/196" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/196/hovercard" href="https://github.com/reactphp/socket/pull/196">#196</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="577351300" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/224" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/224/hovercard" href="https://github.com/reactphp/socket/pull/224">#224</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="579243592" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/225" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/225/hovercard" href="https://github.com/reactphp/socket/pull/225">#225</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a> and <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Default to using DNS cache (with max 256 entries) for <code>Connector</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="579375999" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/226" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/226/hovercard" href="https://github.com/reactphp/socket/pull/226">#226</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Add <code>.gitattributes</code> to exclude dev files from exports and some minor code style fixes.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="530763455" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/219" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/219/hovercard" href="https://github.com/reactphp/socket/pull/219">#219</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/reedy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/reedy">@reedy</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="525991391" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/218" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/218/hovercard" href="https://github.com/reactphp/socket/pull/218">#218</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/mmoreram/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mmoreram">@mmoreram</a>)</p>
+</li>
+<li>
+<p>Improve test suite to fix failing test cases when using new DNS component,<br>
+significantly improve test performance by awaiting events instead of sleeping,<br>
+exclude TLS 1.3 test on PHP 7.3, run tests on PHP 7.4 and simplify test matrix.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="469718878" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/208" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/208/hovercard" href="https://github.com/reactphp/socket/pull/208">#208</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="481098218" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/209" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/209/hovercard" href="https://github.com/reactphp/socket/pull/209">#209</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="481102160" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/210" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/210/hovercard" href="https://github.com/reactphp/socket/pull/210">#210</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="524032637" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/217" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/217/hovercard" href="https://github.com/reactphp/socket/pull/217">#217</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="575460798" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/223" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/223/hovercard" href="https://github.com/reactphp/socket/pull/223">#223</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-0510-2020-01-14" class="anchor" href="#httpclient-0510-2020-01-14" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.5.10
+
+        <small>
+            (2020-01-14)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.5.10" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Fix: Avoid unneeded warning when decoding invalid data on PHP 7.4.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="548458501" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/150" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/150/hovercard" href="https://github.com/reactphp/http-client/pull/150">#150</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Add <code>.gitattributes</code> to exclude dev files from exports.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="530764048" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/149" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/149/hovercard" href="https://github.com/reactphp/http-client/pull/149">#149</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/reedy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/reedy">@reedy</a>)</p>
+</li>
+<li>
+<p>Link to clue/reactphp-buzz for higher-level HTTP client.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="403569861" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/139" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/139/hovercard" href="https://github.com/reactphp/http-client/pull/139">#139</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by simplifying test matrix and test setup.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="549149444" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/151" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/151/hovercard" href="https://github.com/reactphp/http-client/pull/151">#151</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="http-086-2020-01-12" class="anchor" href="#http-086-2020-01-12" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTP 0.8.6
+
+        <small>
+            (2020-01-12)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.8.6" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix parsing Cookie request header with comma in its values (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="530559091" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/352" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/352/hovercard" href="https://github.com/reactphp/http/pull/352">#352</a> by @fiskie)</li>
+<li>Add .gitattributes to exclude dev files from exports (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="530763163" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/353" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/353/hovercard" href="https://github.com/reactphp/http/pull/353">#353</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/reedy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/reedy">@reedy</a>)</li>
+<li>Avoid unneeded warning when decoding invalid data on PHP 7.4 (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="548477670" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/357" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/357/hovercard" href="https://github.com/reactphp/http/pull/357">#357</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="eventloop-111-2020-01-01" class="anchor" href="#eventloop-111-2020-01-01" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        EventLoop 1.1.1
+
+        <small>
+            (2020-01-01)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v1.1.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Fix: Fix reporting connection refused errors with <code>ExtUvLoop</code> on Linux and <code>StreamSelectLoop</code> on Windows.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="543263503" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/207" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/207/hovercard" href="https://github.com/reactphp/event-loop/pull/207">#207</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="544149993" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/208" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/208/hovercard" href="https://github.com/reactphp/event-loop/pull/208">#208</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Fix unsupported EventConfig and <code>SEGFAULT</code> on shutdown with <code>ExtEventLoop</code> on Windows.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="542964895" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/205" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/205/hovercard" href="https://github.com/reactphp/event-loop/pull/205">#205</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Prevent interval overflow for timers very far in the future with <code>ExtUvLoop</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="445966113" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/196" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/196/hovercard" href="https://github.com/reactphp/event-loop/pull/196">#196</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/PabloKowalczyk/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/PabloKowalczyk">@PabloKowalczyk</a>)</p>
+</li>
+<li>
+<p>Fix: Check PCNTL functions for signal support instead of PCNTL extension with <code>StreamSelectLoop</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="441409833" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/195" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/195/hovercard" href="https://github.com/reactphp/event-loop/pull/195">#195</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Add <code>.gitattributes</code> to exclude dev files from exports.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="530765087" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/201" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/201/hovercard" href="https://github.com/reactphp/event-loop/pull/201">#201</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/reedy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/reedy">@reedy</a>)</p>
+</li>
+<li>
+<p>Improve test suite to fix testing <code>ExtUvLoop</code> on Travis,<br>
+fix Travis CI builds, do not install <code>libuv</code> on legacy PHP setups,<br>
+fix failing test cases due to inaccurate timers,<br>
+run tests on Windows via Travis CI and<br>
+run tests on PHP 7.4 and simplify test matrix and test setup.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="447465228" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/197" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/197/hovercard" href="https://github.com/reactphp/event-loop/pull/197">#197</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="531456371" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/202" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/202/hovercard" href="https://github.com/reactphp/event-loop/pull/202">#202</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="541787408" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/203" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/203/hovercard" href="https://github.com/reactphp/event-loop/pull/203">#203</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="541905883" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/204" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/204/hovercard" href="https://github.com/reactphp/event-loop/pull/204">#204</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="544160472" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/209" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/209/hovercard" href="https://github.com/reactphp/event-loop/pull/209">#209</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2019" class="anchor" href="#2019" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2019
+    </h2>
+
+    
+                        <h3>
+        <a id="http-085-2019-10-29" class="anchor" href="#http-085-2019-10-29" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTP 0.8.5
+
+        <small>
+            (2019-10-29)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.8.5" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Internal refactorings and optimizations to improve request parsing performance.<br>
+Benchmarks suggest number of requests/s improved by ~30% for common <code>GET</code> requests.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="456296934" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/345" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/345/hovercard" href="https://github.com/reactphp/http/pull/345">#345</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="456649853" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/346" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/346/hovercard" href="https://github.com/reactphp/http/pull/346">#346</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="498214944" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/349" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/349/hovercard" href="https://github.com/reactphp/http/pull/349">#349</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="499118258" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/350" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/350/hovercard" href="https://github.com/reactphp/http/pull/350">#350</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Add documentation and example for JSON/XML request body and<br>
+improve documentation for concurrency and streaming requests and for error handling.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="432871220" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/341" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/341/hovercard" href="https://github.com/reactphp/http/pull/341">#341</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="434218553" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/342" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/342/hovercard" href="https://github.com/reactphp/http/pull/342">#342</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="dns-120-2019-08-15" class="anchor" href="#dns-120-2019-08-15" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        DNS 1.2.0
+
+        <small>
+            (2019-08-15)
+            <a href="https://github.com/reactphp/dns/releases/tag/v1.2.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Add <code>TcpTransportExecutor</code> to send DNS queries over TCP/IP connection,<br>
+add <code>SelectiveTransportExecutor</code> to retry with TCP if UDP is truncated and<br>
+automatically select transport protocol when no explicit <code>udp://</code> or <code>tcp://</code> scheme is given in <code>Factory</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="476278188" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/145" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/145/hovercard" href="https://github.com/reactphp/dns/pull/145">#145</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="478672660" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/146" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/146/hovercard" href="https://github.com/reactphp/dns/pull/146">#146</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="479002973" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/147" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/147/hovercard" href="https://github.com/reactphp/dns/pull/147">#147</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="480052064" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/148" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/148/hovercard" href="https://github.com/reactphp/dns/pull/148">#148</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Support escaping literal dots and special characters in domain names.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="475625705" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/144" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/144/hovercard" href="https://github.com/reactphp/dns/pull/144">#144</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="dns-110-2019-07-18" class="anchor" href="#dns-110-2019-07-18" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        DNS 1.1.0
+
+        <small>
+            (2019-07-18)
+            <a href="https://github.com/reactphp/dns/releases/tag/v1.1.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Support parsing <code>CAA</code> and <code>SSHFP</code> records.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="468573632" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/141" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/141/hovercard" href="https://github.com/reactphp/dns/pull/141">#141</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="468845581" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/142" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/142/hovercard" href="https://github.com/reactphp/dns/pull/142">#142</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Add <code>ResolverInterface</code> as common interface for <code>Resolver</code> class.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="468244418" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/139" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/139/hovercard" href="https://github.com/reactphp/dns/pull/139">#139</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Add missing private property definitions and<br>
+remove unneeded dependency on <code>react/stream</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="468250332" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/140" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/140/hovercard" href="https://github.com/reactphp/dns/pull/140">#140</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="469402412" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/143" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/143/hovercard" href="https://github.com/reactphp/dns/pull/143">#143</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="dns-100-2019-07-11" class="anchor" href="#dns-100-2019-07-11" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        DNS 1.0.0
+
+        <small>
+            (2019-07-11)
+            <a href="https://github.com/reactphp/dns/releases/tag/v1.0.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>First stable LTS release, now following <a href="https://semver.org/" rel="nofollow">SemVer</a>.<br>
+We'd like to emphasize that this component is production ready and battle-tested.<br>
+We plan to support all long-term support (LTS) releases for at least 24 months,<br>
+so you have a rock-solid foundation to build on top of.</li>
+</ul>
+<p>This update involves a number of BC breaks due to dropped support for<br>
+deprecated functionality and some internal API cleanup. We've tried hard to<br>
+avoid BC breaks where possible and minimize impact otherwise. We expect that<br>
+most consumers of this package will actually not be affected by any BC<br>
+breaks, see below for more details:</p>
+<ul>
+<li>
+<p>BC break: Delete all deprecated APIs, use <code>Query</code> objects for <code>Message</code> questions<br>
+instead of nested arrays and increase code coverage to 100%.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="465771042" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/130" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/130/hovercard" href="https://github.com/reactphp/dns/pull/130">#130</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>BC break: Move <code>$nameserver</code> from <code>ExecutorInterface</code> to <code>UdpTransportExecutor</code>,<br>
+remove advanced/internal <code>UdpTransportExecutor</code> args for <code>Parser</code>/<code>BinaryDumper</code> and<br>
+add API documentation for <code>ExecutorInterface</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="466759823" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/135" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/135/hovercard" href="https://github.com/reactphp/dns/pull/135">#135</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="466797146" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/137" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/137/hovercard" href="https://github.com/reactphp/dns/pull/137">#137</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="466886290" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/138" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/138/hovercard" href="https://github.com/reactphp/dns/pull/138">#138</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>BC break: Replace <code>HeaderBag</code> attributes with simple <code>Message</code> properties.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="465915799" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/132" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/132/hovercard" href="https://github.com/reactphp/dns/pull/132">#132</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>BC break: Mark all <code>Record</code> attributes as required, add documentation vs <code>Query</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="466784724" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/136" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/136/hovercard" href="https://github.com/reactphp/dns/pull/136">#136</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>BC break: Mark all classes as final to discourage inheritance<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="466693315" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/134" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/134/hovercard" href="https://github.com/reactphp/dns/pull/134">#134</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="cache-100-2019-07-11" class="anchor" href="#cache-100-2019-07-11" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Cache 1.0.0
+
+        <small>
+            (2019-07-11)
+            <a href="https://github.com/reactphp/cache/releases/tag/v1.0.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>First stable LTS release, now following <a href="https://semver.org/" rel="nofollow">SemVer</a>.<br>
+We'd like to emphasize that this component is production ready and battle-tested.<br>
+We plan to support all long-term support (LTS) releases for at least 24 months,<br>
+so you have a rock-solid foundation to build on top of.</li>
+</ul>
+<blockquote>
+<p>Contains no other changes, so it's actually fully compatible with the v0.6.0 release.</p>
+</blockquote>
+
+    <hr>
+    
+                        <h3>
+        <a id="dns-0419-2019-07-10" class="anchor" href="#dns-0419-2019-07-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        DNS 0.4.19
+
+        <small>
+            (2019-07-10)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.19" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Avoid garbage references when DNS resolution rejects on legacy PHP &lt;= 5.6.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="466271528" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/133" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/133/hovercard" href="https://github.com/reactphp/dns/pull/133">#133</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-130-2019-07-10" class="anchor" href="#socket-130-2019-07-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 1.3.0
+
+        <small>
+            (2019-07-10)
+            <a href="https://github.com/reactphp/socket/releases/tag/v1.3.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Forward compatibility with upcoming stable DNS component.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="464951885" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/206" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/206/hovercard" href="https://github.com/reactphp/socket/pull/206">#206</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="datagram-150-2019-07-10" class="anchor" href="#datagram-150-2019-07-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Datagram 1.5.0
+
+        <small>
+            (2019-07-10)
+            <a href="https://github.com/reactphp/datagram/releases/tag/v1.5.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Forward compatibility with upcoming stable DNS component.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="464954089" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/29" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/29/hovercard" href="https://github.com/reactphp/datagram/pull/29">#29</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Prefix all global functions calls with <code>\</code> to skip the look up and resolve process and go straight to the global function.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="366477132" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/28" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/28/hovercard" href="https://github.com/reactphp/datagram/pull/28">#28</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+<li>
+<p>Improve test suite to also test against PHP 7.1 and 7.2.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="319487815" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/25" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/25/hovercard" href="https://github.com/reactphp/datagram/pull/25">#25</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/andreybolonin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/andreybolonin">@andreybolonin</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="dns-0418-2019-07-09" class="anchor" href="#dns-0418-2019-07-09" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        DNS 0.4.18
+
+        <small>
+            (2019-07-09)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.18" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature / Fix: Implement <code>CachingExecutor</code> using cache TTL, deprecate old <code>CachedExecutor</code>,<br>
+respect TTL from response records when caching and do not cache truncated responses.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="465179457" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/129" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/129/hovercard" href="https://github.com/reactphp/dns/pull/129">#129</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Limit cache size to 256 last responses by default.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="464855970" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/127" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/127/hovercard" href="https://github.com/reactphp/dns/pull/127">#127</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Cooperatively resolve hosts to avoid running same query concurrently.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="427568088" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/125" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/125/hovercard" href="https://github.com/reactphp/dns/pull/125">#125</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="cache-060-2019-07-04" class="anchor" href="#cache-060-2019-07-04" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Cache 0.6.0
+
+        <small>
+            (2019-07-04)
+            <a href="https://github.com/reactphp/cache/releases/tag/v0.6.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature / BC break: Add support for <code>getMultiple()</code>, <code>setMultiple()</code>, <code>deleteMultiple()</code>, <code>clear()</code> and <code>has()</code><br>
+supporting multiple cache items (inspired by PSR-16).<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="374219300" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/32" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/32/hovercard" href="https://github.com/reactphp/cache/pull/32">#32</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/krlv/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/krlv">@krlv</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="463813955" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/37" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/37/hovercard" href="https://github.com/reactphp/cache/pull/37">#37</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Documentation for TTL precision with millisecond accuracy or below and<br>
+use high-resolution timer for cache TTL on PHP 7.3+.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="437931289" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/35" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/35/hovercard" href="https://github.com/reactphp/cache/pull/35">#35</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="463897470" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/38" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/38/hovercard" href="https://github.com/reactphp/cache/pull/38">#38</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve API documentation and allow legacy HHVM to fail in Travis CI config.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="398559997" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/34" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/34/hovercard" href="https://github.com/reactphp/cache/pull/34">#34</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="437932059" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/36" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/36/hovercard" href="https://github.com/reactphp/cache/pull/36">#36</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Prefix all global functions calls with \ to skip the look up and resolve process and go straight to the global function.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="366461579" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/31" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/31/hovercard" href="https://github.com/reactphp/cache/pull/31">#31</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promisestream-120-2019-07-03" class="anchor" href="#promisestream-120-2019-07-03" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        PromiseStream 1.2.0
+
+        <small>
+            (2019-07-03)
+            <a href="https://github.com/reactphp/promise-stream/releases/tag/v1.2.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Support unwrapping object streams by buffering original write chunks in array.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="374340356" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-stream/issues/15" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-stream/pull/15/hovercard" href="https://github.com/reactphp/promise-stream/pull/15">#15</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Clean up unneeded references for unwrapped streams when closing.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="463243741" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-stream/issues/18" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-stream/pull/18/hovercard" href="https://github.com/reactphp/promise-stream/pull/18">#18</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Writing to closed unwrapped stream should return false (backpressure).<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="463195512" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-stream/issues/17" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-stream/pull/17/hovercard" href="https://github.com/reactphp/promise-stream/pull/17">#17</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite to support PHPUnit 7, PHP 7.3 and fix incomplete test<br>
+and improve API documentation.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="459473596" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-stream/issues/16" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-stream/pull/16/hovercard" href="https://github.com/reactphp/promise-stream/pull/16">#16</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="463279094" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-stream/issues/19" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-stream/pull/19/hovercard" href="https://github.com/reactphp/promise-stream/pull/19">#19</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-121-2019-06-03" class="anchor" href="#socket-121-2019-06-03" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 1.2.1
+
+        <small>
+            (2019-06-03)
+            <a href="https://github.com/reactphp/socket/releases/tag/v1.2.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Avoid uneeded fragmented TLS work around for PHP 7.3.3+ and<br>
+work around failing test case detecting EOF on TLS 1.3 socket streams.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="448608612" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/201" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/201/hovercard" href="https://github.com/reactphp/socket/pull/201">#201</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="450731876" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/202" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/202/hovercard" href="https://github.com/reactphp/socket/pull/202">#202</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve TLS certificate/passphrase example.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="401920397" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/190" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/190/hovercard" href="https://github.com/reactphp/socket/pull/190">#190</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="dns-0417-2019-04-01" class="anchor" href="#dns-0417-2019-04-01" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        DNS 0.4.17
+
+        <small>
+            (2019-04-01)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.17" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Support parsing <code>authority</code> and <code>additional</code> records from DNS response.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="404751562" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/123" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/123/hovercard" href="https://github.com/reactphp/dns/pull/123">#123</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Support dumping records as part of outgoing binary DNS message.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="404779998" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/124" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/124/hovercard" href="https://github.com/reactphp/dns/pull/124">#124</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Forward compatibility with upcoming Cache v0.6 and Cache v1.0<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="404300120" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/121" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/121/hovercard" href="https://github.com/reactphp/dns/pull/121">#121</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite to add forward compatibility with PHPUnit 7,<br>
+test against PHP 7.3 and use legacy PHPUnit 5 on legacy HHVM.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="404417125" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/122" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/122/hovercard" href="https://github.com/reactphp/dns/pull/122">#122</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promisetimer-151-2019-03-27" class="anchor" href="#promisetimer-151-2019-03-27" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        PromiseTimer 1.5.1
+
+        <small>
+            (2019-03-27)
+            <a href="https://github.com/reactphp/promise-timer/releases/tag/v1.5.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Fix: Typo in readme<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="348606196" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-timer/issues/35" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-timer/pull/35/hovercard" href="https://github.com/reactphp/promise-timer/pull/35">#35</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/aak74/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/aak74">@aak74</a>)</p>
+</li>
+<li>
+<p>Improvement: Only include functions file when functions aren't defined<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="423009953" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-timer/issues/36" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-timer/pull/36/hovercard" href="https://github.com/reactphp/promise-timer/pull/36">#36</a> by <a class="user-mention" data-hovercard-type="organization" data-hovercard-url="/orgs/Niko9911/hovercard" href="https://github.com/Niko9911">@Niko9911</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="childprocess-061-2019-02-15" class="anchor" href="#childprocess-061-2019-02-15" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        ChildProcess 0.6.1
+
+        <small>
+            (2019-02-15)
+            <a href="https://github.com/reactphp/child-process/releases/tag/v0.6.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature / Fix: Improve error reporting when spawning child process fails.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="409917419" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/73" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/73/hovercard" href="https://github.com/reactphp/child-process/pull/73">#73</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="eventloop-110-2019-02-07" class="anchor" href="#eventloop-110-2019-02-07" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        EventLoop 1.1.0
+
+        <small>
+            (2019-02-07)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v1.1.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>New UV based event loop (ext-uv).<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="269913340" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/112" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/112/hovercard" href="https://github.com/reactphp/event-loop/pull/112">#112</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+<li>
+<p>Use high resolution timer on PHP 7.3+.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="407159925" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/182" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/182/hovercard" href="https://github.com/reactphp/event-loop/pull/182">#182</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve PCNTL signals by using async signal dispatching if available.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="398847598" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/179" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/179/hovercard" href="https://github.com/reactphp/event-loop/pull/179">#179</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/CharlotteDunois/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/CharlotteDunois">@CharlotteDunois</a>)</p>
+</li>
+<li>
+<p>Improve test suite and test suite set up.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="374434272" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/174" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/174/hovercard" href="https://github.com/reactphp/event-loop/pull/174">#174</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="406302085" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/181" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/181/hovercard" href="https://github.com/reactphp/event-loop/pull/181">#181</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix PCNTL signals edge case.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="407294905" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/183" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/183/hovercard" href="https://github.com/reactphp/event-loop/pull/183">#183</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="http-084-2019-01-16" class="anchor" href="#http-084-2019-01-16" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTP 0.8.4
+
+        <small>
+            (2019-01-16)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.8.4" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: Internal refactoring to simplify response header logic (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="343679950" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/321" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/321/hovercard" href="https://github.com/reactphp/http/pull/321">#321</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Improvement: Assign Content-Length response header automatically only when size is known (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="379770949" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/329" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/329/hovercard" href="https://github.com/reactphp/http/pull/329">#329</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Improvement: Import global functions for better performance (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="380088071" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/330" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/330/hovercard" href="https://github.com/reactphp/http/pull/330">#330</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="childprocess-060-2019-01-14" class="anchor" href="#childprocess-060-2019-01-14" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        ChildProcess 0.6.0
+
+        <small>
+            (2019-01-14)
+            <a href="https://github.com/reactphp/child-process/releases/tag/v0.6.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <p>A major feature release with some minor API improvements!<br>
+This project now has limited Windows support and supports passing custom pipes<br>
+and file descriptors to the child process.</p>
+<p>This update involves a few minor BC breaks. We've tried hard to avoid BC breaks<br>
+where possible and minimize impact otherwise. We expect that most consumers of<br>
+this package will actually not be affected by any BC breaks, see below for more<br>
+details.</p>
+<ul>
+<li>
+<p>Feature / BC break: Support passing custom pipes and file descriptors to child process,<br>
+expose all standard I/O pipes in an array and remove unused Windows-only options.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="383999912" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/62" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/62/hovercard" href="https://github.com/reactphp/child-process/pull/62">#62</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="386159810" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/64" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/64/hovercard" href="https://github.com/reactphp/child-process/pull/64">#64</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="386584758" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/65" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/65/hovercard" href="https://github.com/reactphp/child-process/pull/65">#65</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<blockquote>
+<p>BC note: The optional <code>$options</code> parameter in the <code>Process</code> constructor<br>
+has been removed and a new <code>$fds</code> parameter has been added instead. The<br>
+previous <code>$options</code> parameter was Windows-only, available options were not<br>
+documented or referenced anywhere else in this library, so its actual<br>
+impact is expected to be relatively small. See the documentation and the<br>
+following changelog entry if you're looking for Windows support.</p>
+</blockquote>
+</li>
+<li>
+<p>Feature: Support spawning child process on Windows without process I/O pipes.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="397884467" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/67" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/67/hovercard" href="https://github.com/reactphp/child-process/pull/67">#67</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature / BC break: Improve sigchild compatibility and support explicit configuration.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="384374501" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/63" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/63/hovercard" href="https://github.com/reactphp/child-process/pull/63">#63</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> advanced: not recommended by default</span></span>
+<span class="pl-s1"><span class="pl-c1">Process</span><span class="pl-k">::</span>setSigchildEnabled(<span class="pl-c1">true</span>);</span></pre></div>
+<blockquote>
+<p>BC note: The old public sigchild methods have been removed, but its<br>
+practical impact is believed to be relatively small due to the automatic detection.</p>
+</blockquote>
+</li>
+<li>
+<p>Improve performance by prefixing all global functions calls with \ to skip<br>
+the look up and resolve process and go straight to the global function.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="398402393" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/68" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/68/hovercard" href="https://github.com/reactphp/child-process/pull/68">#68</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+<li>
+<p>Minor documentation improvements and docblock updates.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="331323060" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/59" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/59/hovercard" href="https://github.com/reactphp/child-process/pull/59">#59</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/iamluc/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/iamluc">@iamluc</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="398553768" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/69" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/69/hovercard" href="https://github.com/reactphp/child-process/pull/69">#69</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/CharlotteDunois/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/CharlotteDunois">@CharlotteDunois</a>)</p>
+</li>
+<li>
+<p>Improve test suite to test against PHP7.2 and PHP 7.3, improve HHVM compatibility,<br>
+add forward compatibility with PHPUnit 7 and run tests on Windows via Travis CI.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="397396699" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/66" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/66/hovercard" href="https://github.com/reactphp/child-process/pull/66">#66</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="398659551" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/71" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/71/hovercard" href="https://github.com/reactphp/child-process/pull/71">#71</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promise-271-2019-01-07" class="anchor" href="#promise-271-2019-01-07" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Promise 2.7.1
+
+        <small>
+            (2019-01-07)
+            <a href="https://github.com/reactphp/promise/releases/tag/v2.7.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix: file_exists warning when resolving with long strings. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="392998751" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/130" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/130/hovercard" href="https://github.com/reactphp/promise/pull/130">#130</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/sbesselsen/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sbesselsen">@sbesselsen</a>)</li>
+<li>Improve performance by prefixing all global functions calls with \ to skip the look up and resolve process and go straight to the global function. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="396586706" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/133" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/133/hovercard" href="https://github.com/reactphp/promise/pull/133">#133</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-120-2019-01-07" class="anchor" href="#socket-120-2019-01-07" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 1.2.0
+
+        <small>
+            (2019-01-07)
+            <a href="https://github.com/reactphp/socket/releases/tag/v1.2.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature / Fix: Improve TLS 1.3 support.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="395302314" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/186" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/186/hovercard" href="https://github.com/reactphp/socket/pull/186">#186</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>TLS 1.3 is now an official standard as of August 2018! <g-emoji class="g-emoji" alias="tada" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f389.png">🎉</g-emoji><br>
+The protocol has major improvements in the areas of security, performance, and privacy.<br>
+TLS 1.3 is supported by default as of <a href="https://www.openssl.org/blog/blog/2018/09/11/release111/" rel="nofollow">OpenSSL 1.1.1</a>.<br>
+For example, this version ships with Ubuntu 18.10 (and newer) by default, meaning that recent installations support TLS 1.3 out of the box <img class="emoji" title=":shipit:" alt=":shipit:" src="https://github.githubassets.com/images/icons/emoji/shipit.png" height="20" width="20" align="absmiddle"></p>
+</li>
+<li>
+<p>Fix: Avoid possibility of missing remote address when TLS handshake fails.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="396284100" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/188" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/188/hovercard" href="https://github.com/reactphp/socket/pull/188">#188</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve performance by prefixing all global functions calls with <code>\</code> to skip the look up and resolve process and go straight to the global function.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="394901397" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/183" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/183/hovercard" href="https://github.com/reactphp/socket/pull/183">#183</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+<li>
+<p>Update documentation to use full class names with namespaces.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="396040268" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/187" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/187/hovercard" href="https://github.com/reactphp/socket/pull/187">#187</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite to avoid some possible race conditions,<br>
+test against PHP 7.3 on Travis and<br>
+use dedicated <code>assertInstanceOf()</code> assertions.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="395084900" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/185" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/185/hovercard" href="https://github.com/reactphp/socket/pull/185">#185</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="374436516" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/178" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/178/hovercard" href="https://github.com/reactphp/socket/pull/178">#178</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="379523025" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/181" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/181/hovercard" href="https://github.com/reactphp/socket/pull/181">#181</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/carusogabriel/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/carusogabriel">@carusogabriel</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-110-2019-01-01" class="anchor" href="#stream-110-2019-01-01" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 1.1.0
+
+        <small>
+            (2019-01-01)
+            <a href="https://github.com/reactphp/stream/releases/tag/v1.1.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Improvement: Increase performance by optimizing global function and constant look ups.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="371711734" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/137" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/137/hovercard" href="https://github.com/reactphp/stream/pull/137">#137</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+<li>
+<p>Travis: Test against PHP 7.3.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="374435409" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/138" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/138/hovercard" href="https://github.com/reactphp/stream/pull/138">#138</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+<li>
+<p>Fix: Ignore empty reads.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="384006525" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/139" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/139/hovercard" href="https://github.com/reactphp/stream/pull/139">#139</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2018" class="anchor" href="#2018" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2018
+    </h2>
+
+    
+                        <h3>
+        <a id="dns-0416-2018-11-11" class="anchor" href="#dns-0416-2018-11-11" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        DNS 0.4.16
+
+        <small>
+            (2018-11-11)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.16" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Improve promise cancellation for DNS lookup retries and clean up any garbage references.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="377369343" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/118" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/118/hovercard" href="https://github.com/reactphp/dns/pull/118">#118</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Reject parsing malformed DNS response messages such as incomplete DNS response messages,<br>
+malformed record data or malformed compressed domain name labels.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="377073833" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/115" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/115/hovercard" href="https://github.com/reactphp/dns/pull/115">#115</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="377314964" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/117" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/117/hovercard" href="https://github.com/reactphp/dns/pull/117">#117</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Fix interpretation of TTL as UINT32 with most significant bit unset.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="377149683" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/116" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/116/hovercard" href="https://github.com/reactphp/dns/pull/116">#116</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Fix caching advanced MX/SRV/TXT/SOA structures.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="343098921" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/112" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/112/hovercard" href="https://github.com/reactphp/dns/pull/112">#112</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-110-2018-10-01" class="anchor" href="#socket-110-2018-10-01" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 1.1.0
+
+        <small>
+            (2018-10-01)
+            <a href="https://github.com/reactphp/socket/releases/tag/v1.1.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Improve error reporting for failed connection attempts and improve<br>
+cancellation forwarding during DNS lookup, TCP/IP connection or TLS handshake.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="342009514" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/168" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/168/hovercard" href="https://github.com/reactphp/socket/pull/168">#168</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="342683404" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/169" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/169/hovercard" href="https://github.com/reactphp/socket/pull/169">#169</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="346511755" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/170" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/170/hovercard" href="https://github.com/reactphp/socket/pull/170">#170</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="348085928" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/171" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/171/hovercard" href="https://github.com/reactphp/socket/pull/171">#171</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="362933766" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/176" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/176/hovercard" href="https://github.com/reactphp/socket/pull/176">#176</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="364365413" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/177" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/177/hovercard" href="https://github.com/reactphp/socket/pull/177">#177</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>All error messages now always contain a reference to the remote URI to give<br>
+more details which connection actually failed and the reason for this error.<br>
+Accordingly, failures during DNS lookup will now mention both the remote URI<br>
+as well as the DNS error reason. TCP/IP connection issues and errors during<br>
+a secure TLS handshake will both mention the remote URI as well as the<br>
+underlying socket error. Similarly, lost/dropped connections during a TLS<br>
+handshake will now report a lost connection instead of an empty error reason.</p>
+<p>For most common use cases this means that simply reporting the <code>Exception</code><br>
+message should give the most relevant details for any connection issues:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> <span class="pl-smi">$connector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>tls://example.com:443<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"><span class="pl-smi">$promise</span><span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$conn</span>) <span class="pl-k">use</span> (<span class="pl-smi">$loop</span>) {</span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> …</span></span>
+<span class="pl-s1">}, <span class="pl-k">function</span> (<span class="pl-c1">Exception</span> <span class="pl-smi">$e</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-smi">$e</span><span class="pl-k">-&gt;</span>getMessage();</span>
+<span class="pl-s1">});</span></pre></div>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-100-2018-07-11" class="anchor" href="#socket-100-2018-07-11" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 1.0.0
+
+        <small>
+            (2018-07-11)
+            <a href="https://github.com/reactphp/socket/releases/tag/v1.0.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>First stable LTS release, now following <a href="https://semver.org/" rel="nofollow">SemVer</a>.<br>
+We'd like to emphasize that this component is production ready and battle-tested.<br>
+We plan to support all long-term support (LTS) releases for at least 24 months,<br>
+so you have a rock-solid foundation to build on top of.</li>
+</ul>
+<blockquote>
+<p>Contains no other changes, so it's actually fully compatible with the v0.8.12 release.</p>
+</blockquote>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-100-2018-07-11" class="anchor" href="#stream-100-2018-07-11" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 1.0.0
+
+        <small>
+            (2018-07-11)
+            <a href="https://github.com/reactphp/stream/releases/tag/v1.0.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>First stable LTS release, now following <a href="https://semver.org/" rel="nofollow">SemVer</a>.<br>
+We'd like to emphasize that this component is production ready and battle-tested.<br>
+We plan to support all long-term support (LTS) releases for at least 24 months,<br>
+so you have a rock-solid foundation to build on top of.</li>
+</ul>
+<blockquote>
+<p>Contains no other changes, so it's actually fully compatible with the v0.7.7 release.</p>
+</blockquote>
+
+    <hr>
+    
+                        <h3>
+        <a id="eventloop-100-2018-07-11" class="anchor" href="#eventloop-100-2018-07-11" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        EventLoop 1.0.0
+
+        <small>
+            (2018-07-11)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v1.0.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>First stable LTS release, now following <a href="https://semver.org/" rel="nofollow">SemVer</a>.<br>
+We'd like to emphasize that this component is production ready and battle-tested.<br>
+We plan to support all long-term support (LTS) releases for at least 24 months,<br>
+so you have a rock-solid foundation to build on top of.</li>
+</ul>
+<blockquote>
+<p>Contains no other changes, so it's actually fully compatible with the v0.5.3 release.</p>
+</blockquote>
+
+    <hr>
+    
+                        <h3>
+        <a id="eventloop-053-2018-07-09" class="anchor" href="#eventloop-053-2018-07-09" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        EventLoop 0.5.3
+
+        <small>
+            (2018-07-09)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.5.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Improve performance by importing global functions.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="331935499" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/167" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/167/hovercard" href="https://github.com/reactphp/event-loop/pull/167">#167</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/Ocramius/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Ocramius">@Ocramius</a>)</p>
+</li>
+<li>
+<p>Improve test suite by simplifying test bootstrap by using dev autoloader.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="335578689" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/169" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/169/hovercard" href="https://github.com/reactphp/event-loop/pull/169">#169</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/lcobucci/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/lcobucci">@lcobucci</a>)</p>
+</li>
+<li>
+<p>Minor internal changes to improved backward compatibility with PHP 5.3.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="321859321" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/166" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/166/hovercard" href="https://github.com/reactphp/event-loop/pull/166">#166</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/Donatello-za/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Donatello-za">@Donatello-za</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="dns-0415-2018-07-02" class="anchor" href="#dns-0415-2018-07-02" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        DNS 0.4.15
+
+        <small>
+            (2018-07-02)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.15" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Add <code>resolveAll()</code> method to support custom query types in <code>Resolver</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="336884718" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/110" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/110/hovercard" href="https://github.com/reactphp/dns/pull/110">#110</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a> and <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$resolver</span><span class="pl-k">-&gt;</span>resolveAll(<span class="pl-s"><span class="pl-pds">'</span>reactphp.org<span class="pl-pds">'</span></span>, <span class="pl-c1">Message</span><span class="pl-k">::</span><span class="pl-c1">TYPE_AAAA</span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$ips</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>IPv6 addresses for reactphp.org <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-c1">implode</span>(<span class="pl-s"><span class="pl-pds">'</span>, <span class="pl-pds">'</span></span>, <span class="pl-smi">$ips</span>) <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">});</span></pre></div>
+</li>
+<li>
+<p>Feature: Support parsing <code>NS</code>, <code>TXT</code>, <code>MX</code>, <code>SOA</code> and <code>SRV</code> records.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="335771740" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/104" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/104/hovercard" href="https://github.com/reactphp/dns/pull/104">#104</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="335818701" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/105" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/105/hovercard" href="https://github.com/reactphp/dns/pull/105">#105</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="336554084" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/106" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/106/hovercard" href="https://github.com/reactphp/dns/pull/106">#106</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="336605164" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/107" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/107/hovercard" href="https://github.com/reactphp/dns/pull/107">#107</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="336609410" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/108" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/108/hovercard" href="https://github.com/reactphp/dns/pull/108">#108</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Add support for <code>Message::TYPE_ANY</code> and parse unknown types as binary data.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="335771740" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/104" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/104/hovercard" href="https://github.com/reactphp/dns/pull/104">#104</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Improve error messages for failed queries and improve documentation.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="336652900" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/109" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/109/hovercard" href="https://github.com/reactphp/dns/pull/109">#109</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Add reverse DNS lookup example.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="336953891" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/111" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/111/hovercard" href="https://github.com/reactphp/dns/pull/111">#111</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="dns-0414-2018-06-26" class="anchor" href="#dns-0414-2018-06-26" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        DNS 0.4.14
+
+        <small>
+            (2018-06-26)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.14" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Add <code>UdpTransportExecutor</code>, validate incoming DNS response messages<br>
+to avoid cache poisoning attacks and deprecate legacy <code>Executor</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="334955344" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/101" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/101/hovercard" href="https://github.com/reactphp/dns/pull/101">#101</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="335412702" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/103" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/103/hovercard" href="https://github.com/reactphp/dns/pull/103">#103</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Forward compatibility with Cache 0.5<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="335206013" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/102" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/102/hovercard" href="https://github.com/reactphp/dns/pull/102">#102</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Deprecate legacy <code>Query::$currentTime</code> and binary parser data attributes to clean up and simplify API.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="334767473" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/99" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/99/hovercard" href="https://github.com/reactphp/dns/pull/99">#99</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="cache-050-2018-06-25" class="anchor" href="#cache-050-2018-06-25" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Cache 0.5.0
+
+        <small>
+            (2018-06-25)
+            <a href="https://github.com/reactphp/cache/releases/tag/v0.5.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Improve documentation by describing what is expected of a class implementing <code>CacheInterface</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="294126811" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/21" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/21/hovercard" href="https://github.com/reactphp/cache/pull/21">#21</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="294557985" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/22" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/22/hovercard" href="https://github.com/reactphp/cache/pull/22">#22</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="298120483" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/23" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/23/hovercard" href="https://github.com/reactphp/cache/pull/23">#23</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="310016131" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/27" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/27/hovercard" href="https://github.com/reactphp/cache/pull/27">#27</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+<li>
+<p>Implemented (optional) Least Recently Used (LRU) cache algorithm for <code>ArrayCache</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="308650927" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/26" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/26/hovercard" href="https://github.com/reactphp/cache/pull/26">#26</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Added support for cache expiration (TTL).<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="330626351" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/29" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/29/hovercard" href="https://github.com/reactphp/cache/pull/29">#29</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a> and <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+<li>
+<p>Renamed <code>remove</code> to <code>delete</code> making it more in line with <code>PSR-16</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="330633468" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/30" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/30/hovercard" href="https://github.com/reactphp/cache/pull/30">#30</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promisetimer-150-2018-06-13" class="anchor" href="#promisetimer-150-2018-06-13" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        PromiseTimer 1.5.0
+
+        <small>
+            (2018-06-13)
+            <a href="https://github.com/reactphp/promise-timer/releases/tag/v1.5.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Improve memory consumption by cleaning up garbage references to pending promise without canceller.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="331618143" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-timer/issues/34" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-timer/pull/34/hovercard" href="https://github.com/reactphp/promise-timer/pull/34">#34</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promise-270-2018-06-13" class="anchor" href="#promise-270-2018-06-13" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Promise 2.7.0
+
+        <small>
+            (2018-06-13)
+            <a href="https://github.com/reactphp/promise/releases/tag/v2.7.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Improve memory consumption for pending promises by using static internal callbacks without binding to self.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="331547631" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/124" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/124/hovercard" href="https://github.com/reactphp/promise/pull/124">#124</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-0812-2018-06-11" class="anchor" href="#socket-0812-2018-06-11" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.8.12
+
+        <small>
+            (2018-06-11)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.8.12" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Improve memory consumption for failed and cancelled connection attempts.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="320498009" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/161" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/161/hovercard" href="https://github.com/reactphp/socket/pull/161">#161</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite to fix Travis config to test against legacy PHP 5.3 again.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="320515617" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/162" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/162/hovercard" href="https://github.com/reactphp/socket/pull/162">#162</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promisetimer-140-2018-06-11" class="anchor" href="#promisetimer-140-2018-06-11" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        PromiseTimer 1.4.0
+
+        <small>
+            (2018-06-11)
+            <a href="https://github.com/reactphp/promise-timer/releases/tag/v1.4.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Improve memory consumption by cleaning up garbage references.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="320215111" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-timer/issues/33" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-timer/pull/33/hovercard" href="https://github.com/reactphp/promise-timer/pull/33">#33</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promise-260-2018-06-11" class="anchor" href="#promise-260-2018-06-11" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Promise 2.6.0
+
+        <small>
+            (2018-06-11)
+            <a href="https://github.com/reactphp/promise/releases/tag/v2.6.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Significantly improve memory consumption and performance by only passing resolver args<br>
+to resolver and canceller if callback requires them. Also use static callbacks without<br>
+binding to promise, clean up canceller function reference when they are no longer<br>
+needed and hide resolver and canceller references from call stack on PHP 7+.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="317258762" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/113" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/113/hovercard" href="https://github.com/reactphp/promise/pull/113">#113</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="317708225" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/115" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/115/hovercard" href="https://github.com/reactphp/promise/pull/115">#115</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="318735141" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/116" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/116/hovercard" href="https://github.com/reactphp/promise/pull/116">#116</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="320180339" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/117" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/117/hovercard" href="https://github.com/reactphp/promise/pull/117">#117</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="320317368" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/118" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/118/hovercard" href="https://github.com/reactphp/promise/pull/118">#118</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="320624682" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/119" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/119/hovercard" href="https://github.com/reactphp/promise/pull/119">#119</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="330889368" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/123" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/123/hovercard" href="https://github.com/reactphp/promise/pull/123">#123</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>These changes combined mean that rejecting promises with an <code>Exception</code> should<br>
+no longer cause any internal circular references which could cause some unexpected<br>
+memory growth in previous versions. By explicitly avoiding and explicitly<br>
+cleaning up said references, we can avoid relying on PHP's circular garbage collector<br>
+to kick in which significantly improves performance when rejecting many promises.</p>
+</li>
+<li>
+<p>Mark legacy progress support / notification API as deprecated<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="316930555" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/112" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/112/hovercard" href="https://github.com/reactphp/promise/pull/112">#112</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Recommend rejecting promises by throwing an exception<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="317591712" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/114" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/114/hovercard" href="https://github.com/reactphp/promise/pull/114">#114</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</p>
+</li>
+<li>
+<p>Improve documentation to properly instantiate LazyPromise<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="328515975" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/121" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/121/hovercard" href="https://github.com/reactphp/promise/pull/121">#121</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/holtkamp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/holtkamp">@holtkamp</a>)</p>
+</li>
+<li>
+<p>Follower cancellation propagation was originally planned for this release<br>
+but has been reverted for now and is planned for a future release.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="255393042" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/99" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/99/hovercard" href="https://github.com/reactphp/promise/pull/99">#99</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="330649264" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/122" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/122/hovercard" href="https://github.com/reactphp/promise/pull/122">#122</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promisetimer-130-2018-04-24" class="anchor" href="#promisetimer-130-2018-04-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        PromiseTimer 1.3.0
+
+        <small>
+            (2018-04-24)
+            <a href="https://github.com/reactphp/promise-timer/releases/tag/v1.3.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Improve memory consumption by cleaning up unneeded references.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="316608822" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-timer/issues/32" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-timer/pull/32/hovercard" href="https://github.com/reactphp/promise-timer/pull/32">#32</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-0811-2018-04-24" class="anchor" href="#socket-0811-2018-04-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.8.11
+
+        <small>
+            (2018-04-24)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.8.11" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Improve memory consumption for cancelled connection attempts and<br>
+simplify skipping DNS lookup when connecting to IP addresses.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="316722153" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/159" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/159/hovercard" href="https://github.com/reactphp/socket/pull/159">#159</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="316745437" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/160" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/160/hovercard" href="https://github.com/reactphp/socket/pull/160">#160</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="eventloop-052-2018-04-24" class="anchor" href="#eventloop-052-2018-04-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        EventLoop 0.5.2
+
+        <small>
+            (2018-04-24)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.5.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Improve memory consumption and runtime performance for <code>StreamSelectLoop</code> timers.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="316493410" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/164" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/164/hovercard" href="https://github.com/reactphp/event-loop/pull/164">#164</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by removing I/O dependency at <code>StreamSelectLoopTest</code> to fix Mac OS X tests.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="312576351" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/161" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/161/hovercard" href="https://github.com/reactphp/event-loop/pull/161">#161</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/nawarian/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nawarian">@nawarian</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="http-083-2018-04-11" class="anchor" href="#http-083-2018-04-11" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTP 0.8.3
+
+        <small>
+            (2018-04-11)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.8.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Do not pause connection stream to detect closed connections immediately.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="311933954" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/315" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/315/hovercard" href="https://github.com/reactphp/http/pull/315">#315</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Keep incoming <code>Transfer-Encoding: chunked</code> request header.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="312096531" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/316" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/316/hovercard" href="https://github.com/reactphp/http/pull/316">#316</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Reject invalid requests that contain both <code>Content-Length</code> and <code>Transfer-Encoding</code> request headers.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="312429901" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/318" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/318/hovercard" href="https://github.com/reactphp/http/pull/318">#318</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Minor internal refactoring to simplify connection close logic after sending response.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="312197164" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/317" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/317/hovercard" href="https://github.com/reactphp/http/pull/317">#317</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-059-2018-04-10" class="anchor" href="#httpclient-059-2018-04-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.5.9
+
+        <small>
+            (2018-04-10)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.5.9" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Support legacy HTTP servers that use only <code>LF</code> instead of <code>CRLF</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="312210317" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/130" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/130/hovercard" href="https://github.com/reactphp/http-client/pull/130">#130</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by applying maximum test timeouts for integration tests.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="312426580" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/131" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/131/hovercard" href="https://github.com/reactphp/http-client/pull/131">#131</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="eventloop-051-2018-04-09" class="anchor" href="#eventloop-051-2018-04-09" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        EventLoop 0.5.1
+
+        <small>
+            (2018-04-09)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.5.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: New <code>ExtEvLoop</code> (PECL ext-ev)  (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="288710348" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/148" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/148/hovercard" href="https://github.com/reactphp/event-loop/pull/148">#148</a> by @kaduev13)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="http-082-2018-04-06" class="anchor" href="#http-082-2018-04-06" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTP 0.8.2
+
+        <small>
+            (2018-04-06)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.8.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Fix: Do not pass <code>$next</code> handler to final request handler.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="304832383" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/308" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/308/hovercard" href="https://github.com/reactphp/http/pull/308">#308</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Fix awaiting queued handlers when cancelling a queued handler.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="308741696" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/313" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/313/hovercard" href="https://github.com/reactphp/http/pull/313">#313</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Fix Server to skip <code>SERVER_ADDR</code> params for Unix domain sockets (UDS).<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="304829243" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/307" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/307/hovercard" href="https://github.com/reactphp/http/pull/307">#307</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Documentation for PSR-15 middleware and minor documentation improvements.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="311651592" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/314" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/314/hovercard" href="https://github.com/reactphp/http/pull/314">#314</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="286554630" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/297" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/297/hovercard" href="https://github.com/reactphp/http/pull/297">#297</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="286733141" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/298" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/298/hovercard" href="https://github.com/reactphp/http/pull/298">#298</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="307602017" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/310" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/310/hovercard" href="https://github.com/reactphp/http/pull/310">#310</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/seregazhuk/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/seregazhuk">@seregazhuk</a>)</p>
+</li>
+<li>
+<p>Minor code improvements and micro optimizations.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="288894175" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/301" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/301/hovercard" href="https://github.com/reactphp/http/pull/301">#301</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/seregazhuk/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/seregazhuk">@seregazhuk</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="291153053" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/305" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/305/hovercard" href="https://github.com/reactphp/http/pull/305">#305</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/kalessil/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kalessil">@kalessil</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="eventloop-050-2018-04-05" class="anchor" href="#eventloop-050-2018-04-05" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        EventLoop 0.5.0
+
+        <small>
+            (2018-04-05)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.5.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <p>A major feature release with a significant documentation overhaul and long overdue API cleanup!</p>
+<p>This update involves a number of BC breaks due to dropped support for deprecated<br>
+functionality. We've tried hard to avoid BC breaks where possible and minimize<br>
+impact otherwise. We expect that most consumers of this package will actually<br>
+not be affected by any BC breaks, see below for more details.</p>
+<p>We realize that the changes listed below may seem overwhelming, but we've tried<br>
+to be very clear about any possible BC breaks. Don't worry: In fact, all ReactPHP<br>
+components are already compatible and support both this new release as well as<br>
+providing backwards compatibility with the last release.</p>
+<ul>
+<li>
+<p>Feature / BC break: Add support for signal handling via new<br>
+<code>LoopInterface::addSignal()</code> and <code>LoopInterface::removeSignal()</code> methods.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="245468234" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/104" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/104/hovercard" href="https://github.com/reactphp/event-loop/pull/104">#104</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="265329808" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/111" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/111/hovercard" href="https://github.com/reactphp/event-loop/pull/111">#111</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="294792335" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/150" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/150/hovercard" href="https://github.com/reactphp/event-loop/pull/150">#150</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addSignal(<span class="pl-c1">SIGINT</span>, <span class="pl-k">function</span> () {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>CTRL-C<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1">});</span></pre></div>
+</li>
+<li>
+<p>Feature: Significant documentation updates for <code>LoopInterface</code> and <code>Factory</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="224109678" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/100" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/100/hovercard" href="https://github.com/reactphp/event-loop/pull/100">#100</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="273028149" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/119" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/119/hovercard" href="https://github.com/reactphp/event-loop/pull/119">#119</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278790822" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/126" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/126/hovercard" href="https://github.com/reactphp/event-loop/pull/126">#126</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278918982" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/127" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/127/hovercard" href="https://github.com/reactphp/event-loop/pull/127">#127</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="308582229" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/159" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/159/hovercard" href="https://github.com/reactphp/event-loop/pull/159">#159</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="311012657" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/160" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/160/hovercard" href="https://github.com/reactphp/event-loop/pull/160">#160</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="270054398" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/113" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/113/hovercard" href="https://github.com/reactphp/event-loop/pull/113">#113</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="207950166" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/81" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/81/hovercard" href="https://github.com/reactphp/event-loop/pull/81">#81</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="217249672" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/91" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/91/hovercard" href="https://github.com/reactphp/event-loop/pull/91">#91</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</p>
+</li>
+<li>
+<p>Feature: Add examples to ease getting started<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="224105021" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/99" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/99/hovercard" href="https://github.com/reactphp/event-loop/pull/99">#99</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="224109678" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/100" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/100/hovercard" href="https://github.com/reactphp/event-loop/pull/100">#100</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278523272" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/125" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/125/hovercard" href="https://github.com/reactphp/event-loop/pull/125">#125</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="188995801" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/59" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/59/hovercard" href="https://github.com/reactphp/event-loop/pull/59">#59</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="284245726" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/143" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/143/hovercard" href="https://github.com/reactphp/event-loop/pull/143">#143</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</p>
+</li>
+<li>
+<p>Feature: Documentation for advanced timer concepts, such as monotonic time source vs wall-clock time<br>
+and high precision timers with millisecond accuracy or below.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278965855" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/130" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/130/hovercard" href="https://github.com/reactphp/event-loop/pull/130">#130</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="308380978" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/157" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/157/hovercard" href="https://github.com/reactphp/event-loop/pull/157">#157</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Documentation for advanced stream concepts, such as edge-triggered event listeners<br>
+and stream buffers and allow throwing Exception if stream resource is not supported.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278954715" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/129" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/129/hovercard" href="https://github.com/reactphp/event-loop/pull/129">#129</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="308576284" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/158" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/158/hovercard" href="https://github.com/reactphp/event-loop/pull/158">#158</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Throw <code>BadMethodCallException</code> on manual loop creation when required extension isn't installed.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="300794188" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/153" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/153/hovercard" href="https://github.com/reactphp/event-loop/pull/153">#153</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+<li>
+<p>Feature / BC break: First class support for legacy PHP 5.3 through PHP 7.2 and HHVM<br>
+and remove all <code>callable</code> type hints for consistency reasons.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="283558370" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/141" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/141/hovercard" href="https://github.com/reactphp/event-loop/pull/141">#141</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="294901726" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/151" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/151/hovercard" href="https://github.com/reactphp/event-loop/pull/151">#151</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>BC break: Documentation for timer API and clean up unneeded timer API.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="224403165" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/102" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/102/hovercard" href="https://github.com/reactphp/event-loop/pull/102">#102</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>Remove <code>TimerInterface::cancel()</code>, use <code>LoopInterface::cancelTimer()</code> instead:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old (method invoked on timer instance)</span></span>
+<span class="pl-s1"><span class="pl-smi">$timer</span><span class="pl-k">-&gt;</span>cancel();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> already supported before: invoke method on loop instance</span></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>cancelTimer(<span class="pl-smi">$timer</span>);</span></pre></div>
+<p>Remove unneeded <code>TimerInterface::setData()</code> and <code>TimerInterface::getData()</code>,<br>
+use closure binding to add arbitrary data to timer instead:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old (limited setData() and getData() only allows single variable)</span></span>
+<span class="pl-s1"><span class="pl-smi">$name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>Tester<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1"><span class="pl-smi">$timer</span> <span class="pl-k">=</span> <span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addTimer(<span class="pl-c1">1.0</span>, <span class="pl-k">function</span> (<span class="pl-smi">$timer</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>Hello <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$timer</span><span class="pl-k">-&gt;</span>getData() <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"><span class="pl-smi">$timer</span><span class="pl-k">-&gt;</span>setData(<span class="pl-smi">$name</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> already supported before: closure binding allows any number of variables</span></span>
+<span class="pl-s1"><span class="pl-smi">$name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>Tester<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addTimer(<span class="pl-c1">1.0</span>, <span class="pl-k">function</span> () <span class="pl-k">use</span> (<span class="pl-smi">$name</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>Hello <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$name</span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">});</span></pre></div>
+<p>Remove unneeded <code>TimerInterface::getLoop()</code>, use closure binding instead:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old (getLoop() called on timer instance)</span></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addTimer(<span class="pl-c1">0.1</span>, <span class="pl-k">function</span> (<span class="pl-smi">$timer</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$timer</span><span class="pl-k">-&gt;</span>getLoop()<span class="pl-k">-&gt;</span>stop();</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> already supported before: use closure binding as usual</span></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addTimer(<span class="pl-c1">0.1</span>, <span class="pl-k">function</span> () <span class="pl-k">use</span> (<span class="pl-smi">$loop</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>stop();</span>
+<span class="pl-s1">});</span></pre></div>
+</li>
+<li>
+<p>BC break: Remove unneeded <code>LoopInterface::isTimerActive()</code> and<br>
+<code>TimerInterface::isActive()</code> to reduce API surface.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="279031792" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/133" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/133/hovercard" href="https://github.com/reactphp/event-loop/pull/133">#133</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old (method on timer instance or on loop instance)</span></span>
+<span class="pl-s1"><span class="pl-smi">$timer</span><span class="pl-k">-&gt;</span>isActive();</span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>isTimerActive(<span class="pl-smi">$timer</span>);</span></pre></div>
+</li>
+<li>
+<p>BC break: Move <code>TimerInterface</code> one level up to <code>React\EventLoop\TimerInterface</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="283022277" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/138" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/138/hovercard" href="https://github.com/reactphp/event-loop/pull/138">#138</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old (notice obsolete "Timer" namespace)</span></span>
+<span class="pl-s1"><span class="pl-c1">assert</span>(<span class="pl-smi">$timer</span> <span class="pl-k">instanceof</span> <span class="pl-c1">React\EventLoop\Timer\</span><span class="pl-c1">TimerInterface</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new</span></span>
+<span class="pl-s1"><span class="pl-c1">assert</span>(<span class="pl-smi">$timer</span> <span class="pl-k">instanceof</span> <span class="pl-c1">React\EventLoop\</span><span class="pl-c1">TimerInterface</span>);</span></pre></div>
+</li>
+<li>
+<p>BC break: Remove unneeded <code>LoopInterface::nextTick()</code> (and internal <code>NextTickQueue</code>),<br>
+use <code>LoopInterface::futureTick()</code> instead.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="85954441" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/30" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/30/hovercard" href="https://github.com/reactphp/event-loop/pull/30">#30</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old (removed)</span></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>nextTick(<span class="pl-k">function</span> () {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>tick<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> already supported before</span></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>futureTick(<span class="pl-k">function</span> () {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>tick<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1">});</span></pre></div>
+</li>
+<li>
+<p>BC break: Remove unneeded <code>$loop</code> argument for <code>LoopInterface::futureTick()</code><br>
+(and fix internal cyclic dependency).<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="224410862" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/103" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/103/hovercard" href="https://github.com/reactphp/event-loop/pull/103">#103</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old ($loop gets passed by default)</span></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>futureTick(<span class="pl-k">function</span> (<span class="pl-smi">$loop</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>stop();</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> already supported before: use closure binding as usual</span></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>futureTick(<span class="pl-k">function</span> () <span class="pl-k">use</span> (<span class="pl-smi">$loop</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>stop();</span>
+<span class="pl-s1">});</span></pre></div>
+</li>
+<li>
+<p>BC break: Remove unneeded <code>LoopInterface::tick()</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="205104548" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/72" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/72/hovercard" href="https://github.com/reactphp/event-loop/pull/72">#72</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old (removed)</span></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>tick();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> suggested work around for testing purposes only</span></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>futureTick(<span class="pl-k">function</span> () <span class="pl-k">use</span> (<span class="pl-smi">$loop</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>stop();</span>
+<span class="pl-s1">});</span></pre></div>
+</li>
+<li>
+<p>BC break: Documentation for advanced stream API and clean up unneeded stream API.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="265293115" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/110" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/110/hovercard" href="https://github.com/reactphp/event-loop/pull/110">#110</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>Remove unneeded <code>$loop</code> argument for <code>LoopInterface::addReadStream()</code><br>
+and <code>LoopInterface::addWriteStream()</code>, use closure binding instead:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old ($loop gets passed by default)</span></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addReadStream(<span class="pl-smi">$stream</span>, <span class="pl-k">function</span> (<span class="pl-smi">$stream</span>, <span class="pl-smi">$loop</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>removeReadStream(<span class="pl-smi">$stream</span>);</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> already supported before: use closure binding as usual</span></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addReadStream(<span class="pl-smi">$stream</span>, <span class="pl-k">function</span> (<span class="pl-smi">$stream</span>) <span class="pl-k">use</span> (<span class="pl-smi">$loop</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>removeReadStream(<span class="pl-smi">$stream</span>);</span>
+<span class="pl-s1">});</span></pre></div>
+</li>
+<li>
+<p>BC break: Remove unneeded <code>LoopInterface::removeStream()</code> method,<br>
+use <code>LoopInterface::removeReadStream()</code> and <code>LoopInterface::removeWriteStream()</code> instead.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="272972993" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/118" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/118/hovercard" href="https://github.com/reactphp/event-loop/pull/118">#118</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old</span></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>removeStream(<span class="pl-smi">$stream</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> already supported before</span></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>removeReadStream(<span class="pl-smi">$stream</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>removeWriteStream(<span class="pl-smi">$stream</span>);</span></pre></div>
+</li>
+<li>
+<p>BC break: Rename <code>LibEventLoop</code> to <code>ExtLibeventLoop</code> and <code>LibEvLoop</code> to <code>ExtLibevLoop</code><br>
+for consistent naming for event loop implementations.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278941271" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/128" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/128/hovercard" href="https://github.com/reactphp/event-loop/pull/128">#128</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>BC break: Remove optional <code>EventBaseConfig</code> argument from <code>ExtEventLoop</code><br>
+and make its <code>FEATURE_FDS</code> enabled by default.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="304173816" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/156" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/156/hovercard" href="https://github.com/reactphp/event-loop/pull/156">#156</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+<li>
+<p>BC break: Mark all classes as final to discourage inheritance.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278968312" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/131" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/131/hovercard" href="https://github.com/reactphp/event-loop/pull/131">#131</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Fix <code>ExtEventLoop</code> to keep track of stream resources (refcount)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278444721" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/123" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/123/hovercard" href="https://github.com/reactphp/event-loop/pull/123">#123</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Ensure large timer interval does not overflow on 32bit systems<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278987616" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/132" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/132/hovercard" href="https://github.com/reactphp/event-loop/pull/132">#132</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Fix separately removing readable and writable side of stream when closing<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="283218692" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/139" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/139/hovercard" href="https://github.com/reactphp/event-loop/pull/139">#139</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Properly clean up event watchers for <code>ext-event</code> and <code>ext-libev</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="294717134" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/149" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/149/hovercard" href="https://github.com/reactphp/event-loop/pull/149">#149</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Minor code cleanup and remove unneeded references<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="287557023" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/145" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/145/hovercard" href="https://github.com/reactphp/event-loop/pull/145">#145</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/seregazhuk/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/seregazhuk">@seregazhuk</a>)</p>
+</li>
+<li>
+<p>Fix: Discourage outdated <code>ext-libevent</code> on PHP 7<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="190101158" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/62" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/62/hovercard" href="https://github.com/reactphp/event-loop/pull/62">#62</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/cboden/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cboden">@cboden</a>)</p>
+</li>
+<li>
+<p>Improve test suite by adding forward compatibility with PHPUnit 6 and PHPUnit 5,<br>
+lock Travis distro so new defaults will not break the build,<br>
+improve test suite to be less fragile and increase test timeouts,<br>
+test against PHP 7.2 and reduce fwrite() call length to one chunk.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248031970" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/106" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/106/hovercard" href="https://github.com/reactphp/event-loop/pull/106">#106</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="284882235" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/144" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/144/hovercard" href="https://github.com/reactphp/event-loop/pull/144">#144</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="273339855" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/120" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/120/hovercard" href="https://github.com/reactphp/event-loop/pull/120">#120</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278458105" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/124" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/124/hovercard" href="https://github.com/reactphp/event-loop/pull/124">#124</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/carusogabriel/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/carusogabriel">@carusogabriel</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="288408980" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/147" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/147/hovercard" href="https://github.com/reactphp/event-loop/pull/147">#147</a> by nawarian and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="217835536" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/92" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/92/hovercard" href="https://github.com/reactphp/event-loop/pull/92">#92</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/kelunik/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kelunik">@kelunik</a>)</p>
+</li>
+<li>
+<p>A number of changes were originally planned for this release but have been backported<br>
+to the last <code>v0.4.3</code> already: <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="205542977" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/74" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/74/hovercard" href="https://github.com/reactphp/event-loop/pull/74">#74</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206321643" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/76" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/76/hovercard" href="https://github.com/reactphp/event-loop/pull/76">#76</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="207253463" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/79" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/79/hovercard" href="https://github.com/reactphp/event-loop/pull/79">#79</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="207950166" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/81" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/81/hovercard" href="https://github.com/reactphp/event-loop/pull/81">#81</a> (refs <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="199512405" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/65" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/65/hovercard" href="https://github.com/reactphp/event-loop/pull/65">#65</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="199529591" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/66" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/66/hovercard" href="https://github.com/reactphp/event-loop/pull/66">#66</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="200029677" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/67" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/67/hovercard" href="https://github.com/reactphp/event-loop/pull/67">#67</a>), <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="217041139" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/88" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/88/hovercard" href="https://github.com/reactphp/event-loop/pull/88">#88</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="219039277" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/93" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/93/hovercard" href="https://github.com/reactphp/event-loop/pull/93">#93</a></p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="datagram-140-2018-02-28" class="anchor" href="#datagram-140-2018-02-28" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Datagram 1.4.0
+
+        <small>
+            (2018-02-28)
+            <a href="https://github.com/reactphp/datagram/releases/tag/v1.4.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Update DNS dependency to support loading system default DNS<br>
+nameserver config on all supported platforms<br>
+(<code>/etc/resolv.conf</code> on Unix/Linux/Mac/Docker/WSL and WMIC on Windows)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="300634946" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/23" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/23/hovercard" href="https://github.com/reactphp/datagram/pull/23">#23</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>This means that connecting to hosts that are managed by a local DNS server,<br>
+such as a corporate DNS server or when using Docker containers, will now<br>
+work as expected across all platforms with no changes required:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$factory</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Factory</span>(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$factory</span><span class="pl-k">-&gt;</span>createClient(<span class="pl-s"><span class="pl-pds">'</span>intranet.example:5353<span class="pl-pds">'</span></span>);</span></pre></div>
+</li>
+<li>
+<p>Improve README<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="262178894" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/22" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/22/hovercard" href="https://github.com/reactphp/datagram/pull/22">#22</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-0810-2018-02-28" class="anchor" href="#socket-0810-2018-02-28" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.8.10
+
+        <small>
+            (2018-02-28)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.8.10" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Update DNS dependency to support loading system default DNS<br>
+nameserver config on all supported platforms<br>
+(<code>/etc/resolv.conf</code> on Unix/Linux/Mac/Docker/WSL and WMIC on Windows)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="300621054" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/152" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/152/hovercard" href="https://github.com/reactphp/socket/pull/152">#152</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>This means that connecting to hosts that are managed by a local DNS server,<br>
+such as a corporate DNS server or when using Docker containers, will now<br>
+work as expected across all platforms with no changes required:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$connector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Connector</span>(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$connector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>intranet.example:80<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> …</span></span>
+<span class="pl-s1">});</span></pre></div>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="dns-0413-2018-02-27" class="anchor" href="#dns-0413-2018-02-27" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        DNS 0.4.13
+
+        <small>
+            (2018-02-27)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.13" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Add <code>Config::loadSystemConfigBlocking()</code> to load default system config<br>
+and support parsing DNS config on all supported platforms<br>
+(<code>/etc/resolv.conf</code> on Unix/Linux/Mac and WMIC on Windows)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="294840998" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/92" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/92/hovercard" href="https://github.com/reactphp/dns/pull/92">#92</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="300023271" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/93" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/93/hovercard" href="https://github.com/reactphp/dns/pull/93">#93</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="300261492" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/94" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/94/hovercard" href="https://github.com/reactphp/dns/pull/94">#94</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="300425527" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/95" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/95/hovercard" href="https://github.com/reactphp/dns/pull/95">#95</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$config</span> <span class="pl-k">=</span> <span class="pl-c1">Config</span><span class="pl-k">::</span>loadSystemConfigBlocking();</span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-smi">$config</span><span class="pl-k">-&gt;</span><span class="pl-smi">nameservers</span> ? <span class="pl-c1">reset</span>(<span class="pl-smi">$config</span><span class="pl-k">-&gt;</span><span class="pl-smi">nameservers</span>) : <span class="pl-s"><span class="pl-pds">'</span>8.8.8.8<span class="pl-pds">'</span></span>;</span></pre></div>
+</li>
+<li>
+<p>Remove unneeded cyclic dependency on react/socket<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="300554680" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/96" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/96/hovercard" href="https://github.com/reactphp/dns/pull/96">#96</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-058-2018-02-09" class="anchor" href="#httpclient-058-2018-02-09" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.5.8
+
+        <small>
+            (2018-02-09)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.5.8" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Support legacy PHP 5.3 through PHP 7.2 and HHVM<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="295501645" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/126" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/126/hovercard" href="https://github.com/reactphp/http-client/pull/126">#126</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="295633906" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/127" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/127/hovercard" href="https://github.com/reactphp/http-client/pull/127">#127</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve backwards compatibility with Promise v1 and<br>
+use RingCentral to improve interoperability with react/http.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="295478982" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/124" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/124/hovercard" href="https://github.com/reactphp/http-client/pull/124">#124</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="295482222" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/125" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/125/hovercard" href="https://github.com/reactphp/http-client/pull/125">#125</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-057-2018-02-08" class="anchor" href="#httpclient-057-2018-02-08" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.5.7
+
+        <small>
+            (2018-02-08)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.5.7" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Fix: Ignore excessive whitespace in chunk header for <code>Transfer-Encoding: chunked</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="295225835" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/123" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/123/hovercard" href="https://github.com/reactphp/http-client/pull/123">#123</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/DangerLifter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/DangerLifter">@DangerLifter</a> and <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Ignore invalid incoming <code>Transfer-Encoding</code> response header<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="294932198" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/122" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/122/hovercard" href="https://github.com/reactphp/http-client/pull/122">#122</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve documentation for <code>Client</code> (and advanced <code>Connector</code>)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="261999749" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/111" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/111/hovercard" href="https://github.com/reactphp/http-client/pull/111">#111</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="294503625" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/121" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/121/hovercard" href="https://github.com/reactphp/http-client/pull/121">#121</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by adding support for PHPUnit 6<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="274009027" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/112" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/112/hovercard" href="https://github.com/reactphp/http-client/pull/112">#112</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/carusogabriel/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/carusogabriel">@carusogabriel</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-077-2018-01-19" class="anchor" href="#stream-077-2018-01-19" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 0.7.7
+
+        <small>
+            (2018-01-19)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.7.7" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improve test suite by fixing forward compatibility with upcoming EventLoop<br>
+releases, avoid risky tests and add test group to skip integration tests<br>
+relying on internet connection and apply appropriate test timeouts.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="284177347" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/128" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/128/hovercard" href="https://github.com/reactphp/stream/pull/128">#128</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="289951762" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/131" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/131/hovercard" href="https://github.com/reactphp/stream/pull/131">#131</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="289953509" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/132" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/132/hovercard" href="https://github.com/reactphp/stream/pull/132">#132</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="childprocess-052-2018-01-18" class="anchor" href="#childprocess-052-2018-01-18" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        ChildProcess 0.5.2
+
+        <small>
+            (2018-01-18)
+            <a href="https://github.com/reactphp/child-process/releases/tag/v0.5.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Detect "exit" immediately if last process pipe is closed<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="288330568" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/58" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/58/hovercard" href="https://github.com/reactphp/child-process/pull/58">#58</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>This introduces a simple check to see if the program is already known to be<br>
+closed when the last process pipe is closed instead of relying on a periodic<br>
+timer. This simple change improves "exit" detection significantly for most<br>
+programs and does not cause a noticeable penalty for more advanced use cases.</p>
+</li>
+<li>
+<p>Fix forward compatibility with upcoming EventLoop releases<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="284172026" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/56" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/56/hovercard" href="https://github.com/reactphp/child-process/pull/56">#56</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-089-2018-01-18" class="anchor" href="#socket-089-2018-01-18" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.8.9
+
+        <small>
+            (2018-01-18)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.8.9" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Support explicitly choosing TLS version to negotiate with remote side<br>
+by respecting <code>crypto_method</code> context parameter for all classes.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="288880718" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/149" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/149/hovercard" href="https://github.com/reactphp/socket/pull/149">#149</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>By default, all connector and server classes support TLSv1.0+ and exclude<br>
+support for legacy SSLv2/SSLv3. As of PHP 5.6+ you can also explicitly<br>
+choose the TLS version you want to negotiate with the remote side:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new: now supports 'crypto_method` context parameter for all classes</span></span>
+<span class="pl-s1"><span class="pl-smi">$connector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Connector</span>(<span class="pl-smi">$loop</span>, <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>tls<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">        <span class="pl-s"><span class="pl-pds">'</span>crypto_method<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT</span></span>
+<span class="pl-s1">    )</span>
+<span class="pl-s1">));</span></pre></div>
+</li>
+<li>
+<p>Minor internal clean up to unify class imports<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="288872868" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/148" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/148/hovercard" href="https://github.com/reactphp/socket/pull/148">#148</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="dns-0412-2018-01-14" class="anchor" href="#dns-0412-2018-01-14" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        DNS 0.4.12
+
+        <small>
+            (2018-01-14)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.12" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improve test suite by adding forward compatibility with PHPUnit 6,<br>
+test against PHP 7.2, fix forward compatibility with upcoming EventLoop releases,<br>
+add test group to skip integration tests relying on internet connection<br>
+and add minor documentation improvements.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="273346003" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/85" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/85/hovercard" href="https://github.com/reactphp/dns/pull/85">#85</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278460191" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/87" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/87/hovercard" href="https://github.com/reactphp/dns/pull/87">#87</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/carusogabriel/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/carusogabriel">@carusogabriel</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="284302441" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/88" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/88/hovercard" href="https://github.com/reactphp/dns/pull/88">#88</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="288394422" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/89" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/89/hovercard" href="https://github.com/reactphp/dns/pull/89">#89</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="262180697" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/83" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/83/hovercard" href="https://github.com/reactphp/dns/pull/83">#83</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-088-2018-01-06" class="anchor" href="#socket-088-2018-01-06" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.8.8
+
+        <small>
+            (2018-01-06)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.8.8" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improve test suite by adding test group to skip integration tests relying on<br>
+internet connection and fix minor documentation typo.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="286403640" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/146" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/146/hovercard" href="https://github.com/reactphp/socket/pull/146">#146</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="285625461" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/145" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/145/hovercard" href="https://github.com/reactphp/socket/pull/145">#145</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/cn007b/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cn007b">@cn007b</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="http-081-2018-01-05" class="anchor" href="#http-081-2018-01-05" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTP 0.8.1
+
+        <small>
+            (2018-01-05)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.8.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Major request handler performance improvement. Benchmarks suggest number of<br>
+requests/s improved by more than 50% for common <code>GET</code> requests!<br>
+We now avoid queuing, buffering and wrapping incoming requests in promises<br>
+when we're below limits and instead can directly process common requests.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="285206032" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/291" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/291/hovercard" href="https://github.com/reactphp/http/pull/291">#291</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="285208805" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/292" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/292/hovercard" href="https://github.com/reactphp/http/pull/292">#292</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="285229190" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/293" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/293/hovercard" href="https://github.com/reactphp/http/pull/293">#293</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="285253938" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/294" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/294/hovercard" href="https://github.com/reactphp/http/pull/294">#294</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="285939550" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/296" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/296/hovercard" href="https://github.com/reactphp/http/pull/296">#296</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Fix concurrent invoking next middleware request handlers<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="285229190" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/293" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/293/hovercard" href="https://github.com/reactphp/http/pull/293">#293</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Small code improvements<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="281678366" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/286" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/286/hovercard" href="https://github.com/reactphp/http/pull/286">#286</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/seregazhuk/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/seregazhuk">@seregazhuk</a>)</p>
+</li>
+<li>
+<p>Improve test suite to be less fragile when using <code>ext-event</code> and<br>
+fix test suite forward compatibility with upcoming EventLoop releases<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="284312569" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/288" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/288/hovercard" href="https://github.com/reactphp/http/pull/288">#288</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="284903406" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/290" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/290/hovercard" href="https://github.com/reactphp/http/pull/290">#290</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2017" class="anchor" href="#2017" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2017
+    </h2>
+
+    
+                        <h3>
+        <a id="socket-087-2017-12-24" class="anchor" href="#socket-087-2017-12-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.8.7
+
+        <small>
+            (2017-12-24)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.8.7" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Fix: Fix closing socket resource before removing from loop<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="284322182" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/141" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/141/hovercard" href="https://github.com/reactphp/socket/pull/141">#141</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>This fixes the root cause of an uncaught <code>Exception</code> that only manifested<br>
+itself after the recent Stream v0.7.4 component update and only if you're<br>
+using <code>ext-event</code> (<code>ExtEventLoop</code>).</p>
+</li>
+<li>
+<p>Improve test suite by testing against PHP 7.2<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278458521" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/140" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/140/hovercard" href="https://github.com/reactphp/socket/pull/140">#140</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/carusogabriel/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/carusogabriel">@carusogabriel</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promisetimer-121-2017-12-22" class="anchor" href="#promisetimer-121-2017-12-22" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        PromiseTimer 1.2.1
+
+        <small>
+            (2017-12-22)
+            <a href="https://github.com/reactphp/promise-timer/releases/tag/v1.2.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>README improvements<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="262176643" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-timer/issues/28" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-timer/pull/28/hovercard" href="https://github.com/reactphp/promise-timer/pull/28">#28</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</p>
+</li>
+<li>
+<p>Improve test suite by adding forward compatiblity with PHPUnit 6 and<br>
+fix test suite forward compatibility with upcoming EventLoop releases<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="284181352" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-timer/issues/30" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-timer/pull/30/hovercard" href="https://github.com/reactphp/promise-timer/pull/30">#30</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="284181695" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-timer/issues/31" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-timer/pull/31/hovercard" href="https://github.com/reactphp/promise-timer/pull/31">#31</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promisestream-111-2017-12-22" class="anchor" href="#promisestream-111-2017-12-22" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        PromiseStream 1.1.1
+
+        <small>
+            (2017-12-22)
+            <a href="https://github.com/reactphp/promise-stream/releases/tag/v1.1.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Fix: Fix <code>all()</code> to assume null values if no event data is passed<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="284110001" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-stream/issues/13" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-stream/pull/13/hovercard" href="https://github.com/reactphp/promise-stream/pull/13">#13</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by simplifying test bootstrapping logic via Composer and<br>
+add forward compatibility with PHPUnit 5 and PHPUnit 6 and<br>
+test against PHP 7.1 and 7.2<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="283879130" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-stream/issues/11" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-stream/pull/11/hovercard" href="https://github.com/reactphp/promise-stream/pull/11">#11</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="284103554" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-stream/issues/12" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-stream/pull/12/hovercard" href="https://github.com/reactphp/promise-stream/pull/12">#12</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278459247" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-stream/issues/9" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-stream/pull/9/hovercard" href="https://github.com/reactphp/promise-stream/pull/9">#9</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/carusogabriel/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/carusogabriel">@carusogabriel</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="childprocess-051-2017-12-22" class="anchor" href="#childprocess-051-2017-12-22" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        ChildProcess 0.5.1
+
+        <small>
+            (2017-12-22)
+            <a href="https://github.com/reactphp/child-process/releases/tag/v0.5.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Fix: Update Stream dependency to work around SEGFAULT in legacy PHP &lt; 5.4.28<br>
+and PHP &lt; 5.5.12<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="251245170" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/50" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/50/hovercard" href="https://github.com/reactphp/child-process/pull/50">#50</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="283899379" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/52" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/52/hovercard" href="https://github.com/reactphp/child-process/pull/52">#52</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by simplifying test bootstrapping logic via Composer and<br>
+adding forward compatibility with PHPUnit 6<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="283907689" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/53" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/53/hovercard" href="https://github.com/reactphp/child-process/pull/53">#53</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="283910315" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/54" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/54/hovercard" href="https://github.com/reactphp/child-process/pull/54">#54</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="283921030" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/55" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/55/hovercard" href="https://github.com/reactphp/child-process/pull/55">#55</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-076-2017-12-21" class="anchor" href="#stream-076-2017-12-21" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 0.7.6
+
+        <small>
+            (2017-12-21)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.7.6" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Fix: Work around reading from unbuffered pipe stream in legacy PHP &lt; 5.4.28 and PHP &lt; 5.5.12<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="283633104" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/126" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/126/hovercard" href="https://github.com/reactphp/stream/pull/126">#126</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by simplifying test bootstrapping logic via Composer and<br>
+test against PHP 7.2<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="283873223" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/127" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/127/hovercard" href="https://github.com/reactphp/stream/pull/127">#127</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278459875" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/124" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/124/hovercard" href="https://github.com/reactphp/stream/pull/124">#124</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/carusogabriel/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/carusogabriel">@carusogabriel</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="cache-042-2017-12-20" class="anchor" href="#cache-042-2017-12-20" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Cache 0.4.2
+
+        <small>
+            (2017-12-20)
+            <a href="https://github.com/reactphp/cache/releases/tag/v0.4.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Improve documentation with usage and installation instructions<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="136478714" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/10" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/10/hovercard" href="https://github.com/reactphp/cache/pull/10">#10</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by adding PHPUnit to <code>require-dev</code> and<br>
+add forward compatibility with PHPUnit 5 and PHPUnit 6 and<br>
+sanitize Composer autoload paths<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="200833342" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/14" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/14/hovercard" href="https://github.com/reactphp/cache/pull/14">#14</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/shaunbramley/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/shaunbramley">@shaunbramley</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="197624721" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/12" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/12/hovercard" href="https://github.com/reactphp/cache/pull/12">#12</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="283579686" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/18" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/18/hovercard" href="https://github.com/reactphp/cache/pull/18">#18</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="http-080-2017-12-12" class="anchor" href="#http-080-2017-12-12" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTP 0.8.0
+
+        <small>
+            (2017-12-12)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.8.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature / BC break: Add new <code>Server</code> facade that buffers and parses incoming<br>
+HTTP requests. This provides full PSR-7 compatibility, including support for<br>
+form submissions with POST fields and file uploads.<br>
+The old <code>Server</code> has been renamed to <code>StreamingServer</code> for advanced usage<br>
+and is used internally.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="276752971" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/266" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/266/hovercard" href="https://github.com/reactphp/http/pull/266">#266</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278815737" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/271" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/271/hovercard" href="https://github.com/reactphp/http/pull/271">#271</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="281031092" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/281" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/281/hovercard" href="https://github.com/reactphp/http/pull/281">#281</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="281037867" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/282" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/282/hovercard" href="https://github.com/reactphp/http/pull/282">#282</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="281216638" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/283" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/283/hovercard" href="https://github.com/reactphp/http/pull/283">#283</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="281341265" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/284" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/284/hovercard" href="https://github.com/reactphp/http/pull/284">#284</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a> and <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old: handle incomplete/streaming requests</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-smi">$handler</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new: handle complete, buffered and parsed requests</span></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new: full PSR-7 support, including POST fields and file uploads</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-smi">$handler</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new: handle incomplete/streaming requests</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">StreamingServer</span>(<span class="pl-smi">$handler</span>);</span></pre></div>
+<blockquote>
+<p>While this is technically a small BC break, this should in fact not break<br>
+most consuming code. If you rely on the old request streaming, you can<br>
+explicitly use the advanced <code>StreamingServer</code> to restore old behavior.</p>
+</blockquote>
+</li>
+<li>
+<p>Feature: Add support for middleware request handler arrays<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="255686438" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/215" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/215/hovercard" href="https://github.com/reactphp/http/pull/215">#215</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="261101834" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/228" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/228/hovercard" href="https://github.com/reactphp/http/pull/228">#228</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="261879723" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/229" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/229/hovercard" href="https://github.com/reactphp/http/pull/229">#229</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="264378362" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/236" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/236/hovercard" href="https://github.com/reactphp/http/pull/236">#236</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="264519766" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/237" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/237/hovercard" href="https://github.com/reactphp/http/pull/237">#237</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="265180156" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/238" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/238/hovercard" href="https://github.com/reactphp/http/pull/238">#238</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="274787821" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/246" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/246/hovercard" href="https://github.com/reactphp/http/pull/246">#246</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="274796358" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/247" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/247/hovercard" href="https://github.com/reactphp/http/pull/247">#247</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="280812790" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/277" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/277/hovercard" href="https://github.com/reactphp/http/pull/277">#277</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="280913484" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/279" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/279/hovercard" href="https://github.com/reactphp/http/pull/279">#279</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="281355820" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/285" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/285/hovercard" href="https://github.com/reactphp/http/pull/285">#285</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>, <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a> and <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new: middleware request handler arrays</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>, <span class="pl-k">callable</span> <span class="pl-smi">$next</span>) {</span>
+<span class="pl-s1">        <span class="pl-smi">$request</span> <span class="pl-k">=</span> <span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>withHeader(<span class="pl-s"><span class="pl-pds">'</span>Processed<span class="pl-pds">'</span></span>, <span class="pl-c1">time</span>());</span>
+<span class="pl-s1">        <span class="pl-k">return</span> $<span class="pl-smi">next</span>(<span class="pl-smi">$request</span>);</span>
+<span class="pl-s1">    },</span>
+<span class="pl-s1">    <span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) {</span>
+<span class="pl-s1">        <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>();</span>
+<span class="pl-s1">    }</span>
+<span class="pl-s1">));</span></pre></div>
+</li>
+<li>
+<p>Feature: Add support for limiting how many next request handlers can be<br>
+executed concurrently (<code>LimitConcurrentRequestsMiddleware</code>)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="280297642" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/272" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/272/hovercard" href="https://github.com/reactphp/http/pull/272">#272</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a> and <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new: explicitly limit concurrency</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">LimitConcurrentRequestsMiddleware</span>(<span class="pl-c1">10</span>),</span>
+<span class="pl-s1">    <span class="pl-smi">$handler</span></span>
+<span class="pl-s1">));</span></pre></div>
+</li>
+<li>
+<p>Feature: Add support for buffering the incoming request body<br>
+(<code>RequestBodyBufferMiddleware</code>).<br>
+This feature mimics PHP's default behavior and respects its <code>post_max_size</code><br>
+ini setting by default and allows explicit configuration.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="255725539" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/216" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/216/hovercard" href="https://github.com/reactphp/http/pull/216">#216</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="259288990" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/224" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/224/hovercard" href="https://github.com/reactphp/http/pull/224">#224</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="276282888" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/263" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/263/hovercard" href="https://github.com/reactphp/http/pull/263">#263</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="280748507" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/276" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/276/hovercard" href="https://github.com/reactphp/http/pull/276">#276</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="280814027" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/278" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/278/hovercard" href="https://github.com/reactphp/http/pull/278">#278</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="263793599" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/235" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/235/hovercard" href="https://github.com/reactphp/http/pull/235">#235</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/andig/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/andig">@andig</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new: buffer up to 10 requests with 8 MiB each</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">StreamingServer</span>(<span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">LimitConcurrentRequestsMiddleware</span>(<span class="pl-c1">10</span>),</span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">RequestBodyBufferMiddleware</span>(<span class="pl-s"><span class="pl-pds">'</span>8M<span class="pl-pds">'</span></span>),</span>
+<span class="pl-s1">    <span class="pl-smi">$handler</span></span>
+<span class="pl-s1">));</span></pre></div>
+</li>
+<li>
+<p>Feature: Add support for parsing form submissions with POST fields and file<br>
+uploads (<code>RequestBodyParserMiddleware</code>).<br>
+This feature mimics PHP's default behavior and respects its ini settings and<br>
+<code>MAX_FILE_SIZE</code> POST fields by default and allows explicit configuration.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="257175939" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/220" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/220/hovercard" href="https://github.com/reactphp/http/pull/220">#220</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="260387117" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/226" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/226/hovercard" href="https://github.com/reactphp/http/pull/226">#226</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="275759557" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/252" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/252/hovercard" href="https://github.com/reactphp/http/pull/252">#252</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="275871424" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/261" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/261/hovercard" href="https://github.com/reactphp/http/pull/261">#261</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="276473027" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/264" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/264/hovercard" href="https://github.com/reactphp/http/pull/264">#264</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="276751163" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/265" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/265/hovercard" href="https://github.com/reactphp/http/pull/265">#265</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="277471070" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/267" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/267/hovercard" href="https://github.com/reactphp/http/pull/267">#267</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278043272" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/268" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/268/hovercard" href="https://github.com/reactphp/http/pull/268">#268</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="280552347" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/274" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/274/hovercard" href="https://github.com/reactphp/http/pull/274">#274</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a> and <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new: buffer up to 10 requests with 8 MiB each</span></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> and limit to 4 uploads with 2 MiB each</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">StreamingServer</span>(<span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">LimitConcurrentRequestsMiddleware</span>(<span class="pl-c1">10</span>),</span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">RequestBodyBufferMiddleware</span>(<span class="pl-s"><span class="pl-pds">'</span>8M<span class="pl-pds">'</span></span>),</span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">RequestBodyParserMiddleware</span>(<span class="pl-s"><span class="pl-pds">'</span>2M<span class="pl-pds">'</span></span>, <span class="pl-c1">4</span>)</span>
+<span class="pl-s1">    <span class="pl-smi">$handler</span></span>
+<span class="pl-s1">));</span></pre></div>
+</li>
+<li>
+<p>Feature: Update Socket to work around sending secure HTTPS responses with PHP &lt; 7.1.4<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="273782825" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/244" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/244/hovercard" href="https://github.com/reactphp/http/pull/244">#244</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Support sending same response header multiple times (e.g. <code>Set-Cookie</code>)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="274874863" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/248" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/248/hovercard" href="https://github.com/reactphp/http/pull/248">#248</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Raise maximum request header size to 8k to match common implementations<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="275765259" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/253" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/253/hovercard" href="https://github.com/reactphp/http/pull/253">#253</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by adding forward compatibility with PHPUnit 6, test<br>
+against PHP 7.1 and PHP 7.2 and refactor and remove risky and duplicate tests.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="273192845" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/243" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/243/hovercard" href="https://github.com/reactphp/http/pull/243">#243</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278458906" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/269" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/269/hovercard" href="https://github.com/reactphp/http/pull/269">#269</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278462213" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/270" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/270/hovercard" href="https://github.com/reactphp/http/pull/270">#270</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/carusogabriel/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/carusogabriel">@carusogabriel</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="274947303" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/249" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/249/hovercard" href="https://github.com/reactphp/http/pull/249">#249</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Minor code refactoring to move internal classes to <code>React\Http\Io</code> namespace<br>
+and clean up minor code and documentation issues<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="274968317" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/251" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/251/hovercard" href="https://github.com/reactphp/http/pull/251">#251</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="260893571" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/227" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/227/hovercard" href="https://github.com/reactphp/http/pull/227">#227</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/kalessil/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kalessil">@kalessil</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="265560655" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/240" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/240/hovercard" href="https://github.com/reactphp/http/pull/240">#240</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/christoph-kluge/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/christoph-kluge">@christoph-kluge</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="262001942" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/230" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/230/hovercard" href="https://github.com/reactphp/http/pull/230">#230</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="280922134" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/280" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/280/hovercard" href="https://github.com/reactphp/http/pull/280">#280</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/andig/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/andig">@andig</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promisestream-110-2017-11-28" class="anchor" href="#promisestream-110-2017-11-28" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        PromiseStream 1.1.0
+
+        <small>
+            (2017-11-28)
+            <a href="https://github.com/reactphp/promise-stream/releases/tag/v1.1.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Reject <code>first()</code> when stream emits an error event<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="277334382" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-stream/issues/7" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-stream/pull/7/hovercard" href="https://github.com/reactphp/promise-stream/pull/7">#7</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Explicit <code>close()</code> of unwrapped stream should not emit <code>error</code> event<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="277338190" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-stream/issues/8" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-stream/pull/8/hovercard" href="https://github.com/reactphp/promise-stream/pull/8">#8</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Internal refactoring to simplify <code>buffer()</code> function<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="268077426" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-stream/issues/6" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-stream/pull/6/hovercard" href="https://github.com/reactphp/promise-stream/pull/6">#6</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/kelunik/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kelunik">@kelunik</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-075-2017-11-20" class="anchor" href="#stream-075-2017-11-20" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 0.7.5
+
+        <small>
+            (2017-11-20)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.7.5" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Fix: Igore excessive <code>fopen()</code> mode flags for <code>WritableResourceStream</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="272511458" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/119" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/119/hovercard" href="https://github.com/reactphp/stream/pull/119">#119</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Fix forward compatibility with upcoming EventLoop releases<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="272994745" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/121" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/121/hovercard" href="https://github.com/reactphp/stream/pull/121">#121</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Restructure examples to ease getting started<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="275158598" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/123" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/123/hovercard" href="https://github.com/reactphp/stream/pull/123">#123</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by adding forward compatibility with PHPUnit 6 and<br>
+ignore Mac OS X test failures for now until Travis tests work again<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="273193264" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/122" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/122/hovercard" href="https://github.com/reactphp/stream/pull/122">#122</a> by @gabriel-caruso and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="272570863" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/120" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/120/hovercard" href="https://github.com/reactphp/stream/pull/120">#120</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-086-2017-11-18" class="anchor" href="#socket-086-2017-11-18" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.8.6
+
+        <small>
+            (2017-11-18)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.8.6" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Add Unix domain socket (UDS) support to <code>Server</code> with <code>unix://</code> URI scheme<br>
+and add advanced <code>UnixServer</code> class.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="263643414" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/120" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/120/hovercard" href="https://github.com/reactphp/socket/pull/120">#120</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/andig/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/andig">@andig</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new: Server now supports "unix://" scheme</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-s"><span class="pl-pds">'</span>unix:///tmp/server.sock<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new: advanced usage</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">UnixServer</span>(<span class="pl-s"><span class="pl-pds">'</span>/tmp/server.sock<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+</li>
+<li>
+<p>Restructure examples to ease getting started<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="275084657" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/136" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/136/hovercard" href="https://github.com/reactphp/socket/pull/136">#136</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by adding forward compatibility with PHPUnit 6 and<br>
+ignore Mac OS X test failures for now until Travis tests work again<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="273192715" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/133" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/133/hovercard" href="https://github.com/reactphp/socket/pull/133">#133</a> by @gabriel-caruso and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="273485503" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/134" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/134/hovercard" href="https://github.com/reactphp/socket/pull/134">#134</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promisestream-100-2017-10-24" class="anchor" href="#promisestream-100-2017-10-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        PromiseStream 1.0.0
+
+        <small>
+            (2017-10-24)
+            <a href="https://github.com/reactphp/promise-stream/releases/tag/v1.0.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>First stable release, now following SemVer</li>
+</ul>
+<blockquote>
+<p>Contains no other changes, so it's actually fully compatible with the v0.1.2 release.</p>
+</blockquote>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-085-2017-10-23" class="anchor" href="#socket-085-2017-10-23" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.8.5
+
+        <small>
+            (2017-10-23)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.8.5" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Fix: Work around PHP bug with Unix domain socket (UDS) paths for Mac OS X<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="263655223" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/123" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/123/hovercard" href="https://github.com/reactphp/socket/pull/123">#123</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/andig/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/andig">@andig</a>)</p>
+</li>
+<li>
+<p>Fix: Fix <code>SecureServer</code> to return <code>null</code> URI if server socket is already closed<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="265358393" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/129" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/129/hovercard" href="https://github.com/reactphp/socket/pull/129">#129</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by adding forward compatibility with PHPUnit v5 and<br>
+forward compatibility with upcoming EventLoop releases in tests and<br>
+test Mac OS X on Travis<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="263651039" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/122" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/122/hovercard" href="https://github.com/reactphp/socket/pull/122">#122</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/andig/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/andig">@andig</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="263719207" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/125" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/125/hovercard" href="https://github.com/reactphp/socket/pull/125">#125</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="264684286" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/127" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/127/hovercard" href="https://github.com/reactphp/socket/pull/127">#127</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="267480956" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/130" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/130/hovercard" href="https://github.com/reactphp/socket/pull/130">#130</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Readme improvements<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="262001059" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/118" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/118/hovercard" href="https://github.com/reactphp/socket/pull/118">#118</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promisestream-012-2017-10-18" class="anchor" href="#promisestream-012-2017-10-18" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        PromiseStream 0.1.2
+
+        <small>
+            (2017-10-18)
+            <a href="https://github.com/reactphp/promise-stream/releases/tag/v0.1.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Optional maximum buffer length for <code>buffer()</code> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="264363772" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-stream/issues/3" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-stream/pull/3/hovercard" href="https://github.com/reactphp/promise-stream/pull/3">#3</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</li>
+<li>Improvement: Readme improvements (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="266132762" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-stream/issues/5" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-stream/pull/5/hovercard" href="https://github.com/reactphp/promise-stream/pull/5">#5</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-074-2017-10-11" class="anchor" href="#stream-074-2017-10-11" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 0.7.4
+
+        <small>
+            (2017-10-11)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.7.4" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Fix: Remove event listeners from <code>CompositeStream</code> once closed and<br>
+remove undocumented left-over <code>close</code> event argument<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="264238876" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/116" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/116/hovercard" href="https://github.com/reactphp/stream/pull/116">#116</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Minor documentation improvements: Fix wrong class name in example,<br>
+fix typos in README and<br>
+fix forward compatibility with upcoming EventLoop releases in example<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="264138990" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/113" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/113/hovercard" href="https://github.com/reactphp/stream/pull/113">#113</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/docteurklein/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/docteurklein">@docteurklein</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="264187481" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/114" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/114/hovercard" href="https://github.com/reactphp/stream/pull/114">#114</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="264188803" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/115" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/115/hovercard" href="https://github.com/reactphp/stream/pull/115">#115</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by running against Mac OS X on Travis<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="263988542" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/112" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/112/hovercard" href="https://github.com/reactphp/stream/pull/112">#112</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="datagram-130-2017-09-25" class="anchor" href="#datagram-130-2017-09-25" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Datagram 1.3.0
+
+        <small>
+            (2017-09-25)
+            <a href="https://github.com/reactphp/datagram/releases/tag/v1.3.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Always use <code>Resolver</code> with default DNS to match Socket component<br>
+and update DNS dependency to support hosts file on all platforms<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="259224540" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/19" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/19/hovercard" href="https://github.com/reactphp/datagram/pull/19">#19</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="259575032" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/20" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/20/hovercard" href="https://github.com/reactphp/datagram/pull/20">#20</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>This means that connecting to hosts such as <code>localhost</code> (and for example<br>
+those used for Docker containers) will now work as expected across all<br>
+platforms with no changes required:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$factory</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Factory</span>(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$factory</span><span class="pl-k">-&gt;</span>createClient(<span class="pl-s"><span class="pl-pds">'</span>localhost:5353<span class="pl-pds">'</span></span>);</span></pre></div>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-056-2017-09-17" class="anchor" href="#httpclient-056-2017-09-17" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.5.6
+
+        <small>
+            (2017-09-17)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.5.6" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Update Socket component to support HTTP over Unix domain sockets (UDS)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="258055894" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/110" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/110/hovercard" href="https://github.com/reactphp/http-client/pull/110">#110</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-084-2017-09-16" class="anchor" href="#socket-084-2017-09-16" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.8.4
+
+        <small>
+            (2017-09-16)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.8.4" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Add <code>FixedUriConnector</code> decorator to use fixed, preconfigured URI instead<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="258032672" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/117" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/117/hovercard" href="https://github.com/reactphp/socket/pull/117">#117</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>This can be useful for consumers that do not support certain URIs, such as<br>
+when you want to explicitly connect to a Unix domain socket (UDS) path<br>
+instead of connecting to a default address assumed by an higher-level API:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$connector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">FixedUriConnector</span>(</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>unix:///var/run/docker.sock<span class="pl-pds">'</span></span>,</span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">UnixConnector</span>(<span class="pl-smi">$loop</span>)</span>
+<span class="pl-s1">);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> destination will be ignored, actually connects to Unix domain socket</span></span>
+<span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> <span class="pl-smi">$connector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>localhost:80<span class="pl-pds">'</span></span>);</span></pre></div>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-055-2017-09-10" class="anchor" href="#httpclient-055-2017-09-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.5.5
+
+        <small>
+            (2017-09-10)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.5.5" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix: Update Socket component to work around sending secure HTTPS requests with PHP &lt; 7.1.4<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="256304682" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/109" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/109/hovercard" href="https://github.com/reactphp/http-client/pull/109">#109</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-083-2017-09-08" class="anchor" href="#socket-083-2017-09-08" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.8.3
+
+        <small>
+            (2017-09-08)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.8.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Reduce memory consumption for failed connections<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="254614468" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/113" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/113/hovercard" href="https://github.com/reactphp/socket/pull/113">#113</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/valga/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/valga">@valga</a>)</p>
+</li>
+<li>
+<p>Fix: Work around write chunk size for TLS streams for PHP &lt; 7.1.14<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="256246825" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/114" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/114/hovercard" href="https://github.com/reactphp/socket/pull/114">#114</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-054-2017-08-25" class="anchor" href="#httpclient-054-2017-08-25" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.5.4
+
+        <small>
+            (2017-08-25)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.5.4" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Update Socket dependency to support hosts file on all platforms<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="252882498" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/108" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/108/hovercard" href="https://github.com/reactphp/http-client/pull/108">#108</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>This means that HTTP requests to hosts such as <code>localhost</code> will now work as<br>
+expected across all platforms with no changes required:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$client</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Client</span>(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$request</span> <span class="pl-k">=</span> <span class="pl-smi">$client</span><span class="pl-k">-&gt;</span>request(<span class="pl-s"><span class="pl-pds">'</span>GET<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>http://localhost/<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"><span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>response<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-c1">Response</span> <span class="pl-smi">$response</span>) {</span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> …</span></span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"><span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>end();</span></pre></div>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-082-2017-08-25" class="anchor" href="#socket-082-2017-08-25" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.8.2
+
+        <small>
+            (2017-08-25)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.8.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Update DNS dependency to support hosts file on all platforms<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="252837020" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/112" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/112/hovercard" href="https://github.com/reactphp/socket/pull/112">#112</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>This means that connecting to hosts such as <code>localhost</code> will now work as<br>
+expected across all platforms with no changes required:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$connector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Connector</span>(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$connector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>localhost:8080<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> …</span></span>
+<span class="pl-s1">});</span></pre></div>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="dns-0411-2017-08-25" class="anchor" href="#dns-0411-2017-08-25" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        DNS 0.4.11
+
+        <small>
+            (2017-08-25)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.11" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Support resolving from default hosts file<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="250600914" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/75" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/75/hovercard" href="https://github.com/reactphp/dns/pull/75">#75</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="252074853" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/76" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/76/hovercard" href="https://github.com/reactphp/dns/pull/76">#76</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="252438414" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/77" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/77/hovercard" href="https://github.com/reactphp/dns/pull/77">#77</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>This means that resolving hosts such as <code>localhost</code> will now work as<br>
+expected across all platforms with no changes required:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$resolver</span><span class="pl-k">-&gt;</span>resolve(<span class="pl-s"><span class="pl-pds">'</span>localhost<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$ip</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>IP: <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$ip</span>;</span>
+<span class="pl-s1">});</span></pre></div>
+<p>The new <code>HostsExecutor</code> exists for advanced usage and is otherwise used<br>
+internally for this feature.</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-053-2017-08-16" class="anchor" href="#httpclient-053-2017-08-16" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.5.3
+
+        <small>
+            (2017-08-16)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.5.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Target evenement 3.0 a long side 2.0<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="250408805" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/106" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/106/hovercard" href="https://github.com/reactphp/http-client/pull/106">#106</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+<li>
+<p>Improve test suite by locking Travis distro so new defaults will not break the build<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248355281" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/105" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/105/hovercard" href="https://github.com/reactphp/http-client/pull/105">#105</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="http-074-2017-08-16" class="anchor" href="#http-074-2017-08-16" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTP 0.7.4
+
+        <small>
+            (2017-08-16)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.7.4" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: Target evenement 3.0 a long side 2.0 and 1.0<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="250354168" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/212" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/212/hovercard" href="https://github.com/reactphp/http/pull/212">#212</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="childprocess-050-2017-08-15" class="anchor" href="#childprocess-050-2017-08-15" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        ChildProcess 0.5.0
+
+        <small>
+            (2017-08-15)
+            <a href="https://github.com/reactphp/child-process/releases/tag/v0.5.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Forward compatibility: react/event-loop 1.0 and 0.5, react/stream 0.7.2 and 1.0, and Événement 3.0<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="235132429" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/38" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/38/hovercard" href="https://github.com/reactphp/child-process/pull/38">#38</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248199759" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/44" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/44/hovercard" href="https://github.com/reactphp/child-process/pull/44">#44</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>, and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248655903" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/46" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/46/hovercard" href="https://github.com/reactphp/child-process/pull/46">#46</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Windows compatibility: Documentate that windows isn't supported in 0.5 unless used from within WSL<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="241482597" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/41" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/41/hovercard" href="https://github.com/reactphp/child-process/pull/41">#41</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="249126978" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/47" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/47/hovercard" href="https://github.com/reactphp/child-process/pull/47">#47</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</li>
+<li>Documentation: Termination examples<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="246529657" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/42" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/42/hovercard" href="https://github.com/reactphp/child-process/pull/42">#42</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>BC: Throw LogicException in Process instanciating when on Windows or when proc_open is missing (was <code>RuntimeException</code>)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="249820539" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/49" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/49/hovercard" href="https://github.com/reactphp/child-process/pull/49">#49</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/mdrost/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mdrost">@mdrost</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-081-2017-08-15" class="anchor" href="#socket-081-2017-08-15" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.8.1
+
+        <small>
+            (2017-08-15)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.8.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Forward compatibility with upcoming EventLoop v1.0 and v0.5 and<br>
+target evenement 3.0 a long side 2.0 and 1.0<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="230023829" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/104" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/104/hovercard" href="https://github.com/reactphp/socket/pull/104">#104</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248200949" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/111" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/111/hovercard" href="https://github.com/reactphp/socket/pull/111">#111</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+<li>
+<p>Improve test suite by locking Travis distro so new defaults will not break the build and<br>
+fix HHVM build for now again and ignore future HHVM build errors<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="235168171" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/109" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/109/hovercard" href="https://github.com/reactphp/socket/pull/109">#109</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248011984" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/110" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/110/hovercard" href="https://github.com/reactphp/socket/pull/110">#110</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Minor documentation fixes<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="228658383" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/103" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/103/hovercard" href="https://github.com/reactphp/socket/pull/103">#103</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/christiaan/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/christiaan">@christiaan</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="235095527" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/108" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/108/hovercard" href="https://github.com/reactphp/socket/pull/108">#108</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/hansott/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hansott">@hansott</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="http-073-2017-08-14" class="anchor" href="#http-073-2017-08-14" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTP 0.7.3
+
+        <small>
+            (2017-08-14)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.7.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Support <code>Throwable</code> when setting previous exception from server callback<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="218201524" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/155" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/155/hovercard" href="https://github.com/reactphp/http/pull/155">#155</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</p>
+</li>
+<li>
+<p>Fix: Fixed URI parsing for origin-form requests that contain scheme separator<br>
+such as <code>/path?param=http://example.com</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="244120827" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/209" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/209/hovercard" href="https://github.com/reactphp/http/pull/209">#209</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/aaronbonneau/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/aaronbonneau">@aaronbonneau</a>)</p>
+</li>
+<li>
+<p>Improve test suite by locking Travis distro so new defaults will not break the build<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248025434" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/211" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/211/hovercard" href="https://github.com/reactphp/http/pull/211">#211</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="dns-0410-2017-08-10" class="anchor" href="#dns-0410-2017-08-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        DNS 0.4.10
+
+        <small>
+            (2017-08-10)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.10" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Forward compatibility with EventLoop v1.0 and v0.5 and<br>
+lock minimum dependencies and work around circular dependency for tests<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248800654" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/70" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/70/hovercard" href="https://github.com/reactphp/dns/pull/70">#70</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248831515" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/71" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/71/hovercard" href="https://github.com/reactphp/dns/pull/71">#71</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Work around DNS timeout issues for Windows users<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="249064150" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/74" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/74/hovercard" href="https://github.com/reactphp/dns/pull/74">#74</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Documentation and examples for advanced usage<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="240034073" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/66" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/66/hovercard" href="https://github.com/reactphp/dns/pull/66">#66</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+<li>
+<p>Remove broken TCP code, do not retry with invalid TCP query<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="249009781" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/73" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/73/hovercard" href="https://github.com/reactphp/dns/pull/73">#73</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by fixing HHVM build for now again and ignore future HHVM build errors and<br>
+lock Travis distro so new defaults will not break the build and<br>
+fix failing tests for PHP 7.1<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="240034347" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/68" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/68/hovercard" href="https://github.com/reactphp/dns/pull/68">#68</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248053285" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/69" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/69/hovercard" href="https://github.com/reactphp/dns/pull/69">#69</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248970395" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/72" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/72/hovercard" href="https://github.com/reactphp/dns/pull/72">#72</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="datagram-120-2017-08-09" class="anchor" href="#datagram-120-2017-08-09" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Datagram 1.2.0
+
+        <small>
+            (2017-08-09)
+            <a href="https://github.com/reactphp/datagram/releases/tag/v1.2.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Target evenement 3.0 a long side 2.0 and 1.0<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248200570" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/16" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/16/hovercard" href="https://github.com/reactphp/datagram/pull/16">#16</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+<li>
+<p>Feature: Forward compatibility with EventLoop v1.0 and v0.5<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248635442" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/18" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/18/hovercard" href="https://github.com/reactphp/datagram/pull/18">#18</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by updating Travis build config so new defaults do not break the build<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248272410" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/17" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/17/hovercard" href="https://github.com/reactphp/datagram/pull/17">#17</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promisetimer-120-2017-08-08" class="anchor" href="#promisetimer-120-2017-08-08" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        PromiseTimer 1.2.0
+
+        <small>
+            (2017-08-08)
+            <a href="https://github.com/reactphp/promise-timer/releases/tag/v1.2.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Only start timers if input Promise is still pending and<br>
+return a settled output promise if the input is already settled.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="219890435" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-timer/issues/25" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-timer/pull/25/hovercard" href="https://github.com/reactphp/promise-timer/pull/25">#25</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Cap minimum timer interval at 1µs across all versions<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="219611060" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-timer/issues/23" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-timer/pull/23/hovercard" href="https://github.com/reactphp/promise-timer/pull/23">#23</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Forward compatibility with EventLoop v1.0 and v0.5<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248537915" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-timer/issues/27" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-timer/pull/27/hovercard" href="https://github.com/reactphp/promise-timer/pull/27">#27</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by adding PHPUnit to require-dev and<br>
+lock Travis distro so new defaults will not break the build<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="219870072" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-timer/issues/24" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-timer/pull/24/hovercard" href="https://github.com/reactphp/promise-timer/pull/24">#24</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248350427" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-timer/issues/26" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-timer/pull/26/hovercard" href="https://github.com/reactphp/promise-timer/pull/26">#26</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-073-2017-08-05" class="anchor" href="#stream-073-2017-08-05" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 0.7.3
+
+        <small>
+            (2017-08-05)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.7.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: Support Événement 3.0 a long side 2.0 and 1.0<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="244938597" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/108" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/108/hovercard" href="https://github.com/reactphp/stream/pull/108">#108</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</li>
+<li>Readme: Corrected loop initialization in usage example<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="245345376" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/109" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/109/hovercard" href="https://github.com/reactphp/stream/pull/109">#109</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/pulyavin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/pulyavin">@pulyavin</a>)</li>
+<li>Travis: Lock linux distribution preventing future builds from breaking<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248006392" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/110" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/110/hovercard" href="https://github.com/reactphp/stream/pull/110">#110</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="http-072-2017-07-04" class="anchor" href="#http-072-2017-07-04" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTP 0.7.2
+
+        <small>
+            (2017-07-04)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.7.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Fix: Stricter check for invalid request-line in HTTP requests<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="240390259" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/206" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/206/hovercard" href="https://github.com/reactphp/http/pull/206">#206</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Refactor to use HTTP response reason phrases from response object<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="240365065" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/205" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/205/hovercard" href="https://github.com/reactphp/http/pull/205">#205</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-052-2017-06-27" class="anchor" href="#httpclient-052-2017-06-27" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.5.2
+
+        <small>
+            (2017-06-27)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.5.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Support passing arrays for request header values<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="238563555" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/100" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/100/hovercard" href="https://github.com/reactphp/http-client/pull/100">#100</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Fix merging default headers if overwritten with custom case headers<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="238607661" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/101" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/101/hovercard" href="https://github.com/reactphp/http-client/pull/101">#101</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-051-2017-06-18" class="anchor" href="#httpclient-051-2017-06-18" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.5.1
+
+        <small>
+            (2017-06-18)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.5.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Emit <code>error</code> event if request URL is invalid<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="236451406" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/99" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/99/hovercard" href="https://github.com/reactphp/http-client/pull/99">#99</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Support OPTIONS method with asterisk-form (<code>OPTIONS * HTTP/1.1</code>)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="236445567" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/98" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/98/hovercard" href="https://github.com/reactphp/http-client/pull/98">#98</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve documentation for event semantics<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="236436774" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/97" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/97/hovercard" href="https://github.com/reactphp/http-client/pull/97">#97</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="http-071-2017-06-17" class="anchor" href="#http-071-2017-06-17" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTP 0.7.1
+
+        <small>
+            (2017-06-17)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.7.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Fix: Fix parsing CONNECT request without <code>Host</code> header<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="236290646" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/201" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/201/hovercard" href="https://github.com/reactphp/http/pull/201">#201</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Internal preparation for future PSR-7 <code>UploadedFileInterface</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="232610790" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/199" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/199/hovercard" href="https://github.com/reactphp/http/pull/199">#199</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-072-2017-06-15" class="anchor" href="#stream-072-2017-06-15" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 0.7.2
+
+        <small>
+            (2017-06-15)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.7.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: WritableResourceStream: Close the underlying stream when closing the stream.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="235132297" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/107" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/107/hovercard" href="https://github.com/reactphp/stream/pull/107">#107</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="http-070-2017-05-29" class="anchor" href="#http-070-2017-05-29" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTP 0.7.0
+
+        <small>
+            (2017-05-29)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.7.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature / BC break: Use PSR-7 (http-message) standard and<br>
+<code>Request-In-Response-Out</code>-style request handler callback.<br>
+Pass standard PSR-7 <code>ServerRequestInterface</code> and expect any standard<br>
+PSR-7 <code>ResponseInterface</code> in return for the request handler callback.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="214687443" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/146" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/146/hovercard" href="https://github.com/reactphp/http/pull/146">#146</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="217026459" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/152" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/152/hovercard" href="https://github.com/reactphp/http/pull/152">#152</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="222915507" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/170" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/170/hovercard" href="https://github.com/reactphp/http/pull/170">#170</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/legionth/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/legionth">@legionth</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old</span></span>
+<span class="pl-s1"><span class="pl-smi">$app</span> <span class="pl-k">=</span> <span class="pl-k">function</span> (<span class="pl-c1">Request</span> <span class="pl-smi">$request</span>, <span class="pl-c1">Response</span> <span class="pl-smi">$response</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$response</span><span class="pl-k">-&gt;</span>writeHead(<span class="pl-c1">200</span>, <span class="pl-c1">array</span>(<span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>text/plain<span class="pl-pds">'</span></span>));</span>
+<span class="pl-s1">    <span class="pl-smi">$response</span><span class="pl-k">-&gt;</span>end(<span class="pl-s"><span class="pl-pds">"</span>Hello world!<span class="pl-cce">\n</span><span class="pl-pds">"</span></span>);</span>
+<span class="pl-s1">};</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new</span></span>
+<span class="pl-s1"><span class="pl-smi">$app</span> <span class="pl-k">=</span> <span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) {</span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(</span>
+<span class="pl-s1">        <span class="pl-c1">200</span>,</span>
+<span class="pl-s1">        <span class="pl-c1">array</span>(<span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>text/plain<span class="pl-pds">'</span></span>),</span>
+<span class="pl-s1">        <span class="pl-s"><span class="pl-pds">"</span>Hello world!<span class="pl-cce">\n</span><span class="pl-pds">"</span></span></span>
+<span class="pl-s1">    );</span>
+<span class="pl-s1">};</span></pre></div>
+<p>A <code>Content-Length</code> header will automatically be included if the size can be<br>
+determined from the response body.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="220269422" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/164" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/164/hovercard" href="https://github.com/reactphp/http/pull/164">#164</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/maciejmrozinski/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/maciejmrozinski">@maciejmrozinski</a>)</p>
+<p>The request handler callback will automatically make sure that responses to<br>
+HEAD requests and certain status codes, such as <code>204</code> (No Content), never<br>
+contain a response body.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="218356880" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/156" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/156/hovercard" href="https://github.com/reactphp/http/pull/156">#156</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>The intermediary <code>100 Continue</code> response will automatically be sent if<br>
+demanded by a HTTP/1.1 client.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="213033632" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/144" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/144/hovercard" href="https://github.com/reactphp/http/pull/144">#144</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/legionth/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/legionth">@legionth</a>)</p>
+<p>The request handler callback can now return a standard <code>Promise</code> if<br>
+processing the request needs some time, such as when querying a database.<br>
+Similarly, the request handler may return a streaming response if the<br>
+response body comes from a <code>ReadableStreamInterface</code> or its size is<br>
+unknown in advance.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old</span></span>
+<span class="pl-s1"><span class="pl-smi">$app</span> <span class="pl-k">=</span> <span class="pl-k">function</span> (<span class="pl-c1">Request</span> <span class="pl-smi">$request</span>, <span class="pl-c1">Response</span> <span class="pl-smi">$response</span>) <span class="pl-k">use</span> (<span class="pl-smi">$db</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$db</span><span class="pl-k">-&gt;</span>query()<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$result</span>) <span class="pl-k">use</span> (<span class="pl-smi">$response</span>) {</span>
+<span class="pl-s1">        <span class="pl-smi">$response</span><span class="pl-k">-&gt;</span>writeHead(<span class="pl-c1">200</span>, <span class="pl-c1">array</span>(<span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>text/plain<span class="pl-pds">'</span></span>));</span>
+<span class="pl-s1">        <span class="pl-smi">$response</span><span class="pl-k">-&gt;</span>end(<span class="pl-smi">$result</span>);</span>
+<span class="pl-s1">    });</span>
+<span class="pl-s1">};</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new</span></span>
+<span class="pl-s1"><span class="pl-smi">$app</span> <span class="pl-k">=</span> <span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) <span class="pl-k">use</span> (<span class="pl-smi">$db</span>) {</span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-smi">$db</span><span class="pl-k">-&gt;</span>query()<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$result</span>) {</span>
+<span class="pl-s1">        <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(</span>
+<span class="pl-s1">            <span class="pl-c1">200</span>,</span>
+<span class="pl-s1">            <span class="pl-c1">array</span>(<span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>text/plain<span class="pl-pds">'</span></span>),</span>
+<span class="pl-s1">            <span class="pl-smi">$result</span></span>
+<span class="pl-s1">        );</span>
+<span class="pl-s1">    });</span>
+<span class="pl-s1">};</span></pre></div>
+<p>Pending promies and response streams will automatically be canceled once the<br>
+client connection closes.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="230244362" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/187" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/187/hovercard" href="https://github.com/reactphp/http/pull/187">#187</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="230671651" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/188" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/188/hovercard" href="https://github.com/reactphp/http/pull/188">#188</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>The <code>ServerRequestInterface</code> contains the full effective request URI,<br>
+server-side parameters, query parameters and parsed cookies values as<br>
+defined in PSR-7.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="221799562" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/167" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/167/hovercard" href="https://github.com/reactphp/http/pull/167">#167</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="223610699" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/174" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/174/hovercard" href="https://github.com/reactphp/http/pull/174">#174</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="223610861" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/175" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/175/hovercard" href="https://github.com/reactphp/http/pull/175">#175</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="224599574" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/180" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/180/hovercard" href="https://github.com/reactphp/http/pull/180">#180</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/legionth/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/legionth">@legionth</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$app</span> <span class="pl-k">=</span> <span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) {</span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(</span>
+<span class="pl-s1">        <span class="pl-c1">200</span>,</span>
+<span class="pl-s1">        <span class="pl-c1">array</span>(<span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>text/plain<span class="pl-pds">'</span></span>),</span>
+<span class="pl-s1">        <span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>getUri()<span class="pl-k">-&gt;</span>getScheme()</span>
+<span class="pl-s1">    );</span>
+<span class="pl-s1">};</span></pre></div>
+<p>Advanced: Support duplex stream response for <code>Upgrade</code> requests such as<br>
+<code>Upgrade: WebSocket</code> or custom protocols and <code>CONNECT</code> requests<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="230949551" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/189" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/189/hovercard" href="https://github.com/reactphp/http/pull/189">#189</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="231333351" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/190" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/190/hovercard" href="https://github.com/reactphp/http/pull/190">#190</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<blockquote>
+<p>Note that the request body will currently not be buffered and parsed by<br>
+default, which depending on your particilar use-case, may limit<br>
+interoperability with the PSR-7 (http-message) ecosystem.<br>
+The provided streaming request body interfaces allow you to perform<br>
+buffering and parsing as needed in the request handler callback.<br>
+See also the README and examples for more details.</p>
+</blockquote>
+</li>
+<li>
+<p>Feature / BC break: Replace <code>request</code> listener with callback function and<br>
+use <code>listen()</code> method to support multiple listening sockets<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206161976" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/97" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/97/hovercard" href="https://github.com/reactphp/http/pull/97">#97</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/legionth/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/legionth">@legionth</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="231876511" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/193" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/193/hovercard" href="https://github.com/reactphp/http/pull/193">#193</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-smi">$socket</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>request<span class="pl-pds">'</span></span>, <span class="pl-smi">$app</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-smi">$app</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>listen(<span class="pl-smi">$socket</span>);</span></pre></div>
+</li>
+<li>
+<p>Feature: Support the more advanced HTTP requests, such as<br>
+<code>OPTIONS * HTTP/1.1</code> (<code>OPTIONS</code> method in asterisk-form),<br>
+<code>GET http://example.com/path HTTP/1.1</code> (plain proxy requests in absolute-form),<br>
+<code>CONNECT example.com:443 HTTP/1.1</code> (<code>CONNECT</code> proxy requests in authority-form)<br>
+and sanitize <code>Host</code> header value across all requests.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="218363832" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/157" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/157/hovercard" href="https://github.com/reactphp/http/pull/157">#157</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="218456601" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/158" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/158/hovercard" href="https://github.com/reactphp/http/pull/158">#158</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="218974256" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/161" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/161/hovercard" href="https://github.com/reactphp/http/pull/161">#161</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="220665434" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/165" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/165/hovercard" href="https://github.com/reactphp/http/pull/165">#165</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="222474879" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/169" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/169/hovercard" href="https://github.com/reactphp/http/pull/169">#169</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="223517004" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/173" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/173/hovercard" href="https://github.com/reactphp/http/pull/173">#173</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Forward compatibility with Socket v1.0, v0.8, v0.7 and v0.6 and<br>
+forward compatibility with Stream v1.0 and v0.7<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="218201458" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/154" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/154/hovercard" href="https://github.com/reactphp/http/pull/154">#154</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="220031156" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/163" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/163/hovercard" href="https://github.com/reactphp/http/pull/163">#163</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="228459182" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/183" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/183/hovercard" href="https://github.com/reactphp/http/pull/183">#183</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="228491007" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/184" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/184/hovercard" href="https://github.com/reactphp/http/pull/184">#184</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="231620998" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/191" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/191/hovercard" href="https://github.com/reactphp/http/pull/191">#191</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Simplify examples to ease getting started and<br>
+add benchmarking example<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="216745046" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/151" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/151/hovercard" href="https://github.com/reactphp/http/pull/151">#151</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="220016609" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/162" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/162/hovercard" href="https://github.com/reactphp/http/pull/162">#162</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by adding tests for case insensitive chunked transfer<br>
+encoding and ignoring HHVM test failures until Travis tests work again.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="215422488" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/150" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/150/hovercard" href="https://github.com/reactphp/http/pull/150">#150</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/legionth/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/legionth">@legionth</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="228868611" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/185" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/185/hovercard" href="https://github.com/reactphp/http/pull/185">#185</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-050-2017-05-22" class="anchor" href="#httpclient-050-2017-05-22" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.5.0
+
+        <small>
+            (2017-05-22)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.5.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature / BC break: Replace <code>Factory</code> with simple <code>Client</code> constructor<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="223729891" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/85" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/85/hovercard" href="https://github.com/reactphp/http-client/pull/85">#85</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>The <code>Client</code> now accepts a required <code>LoopInterface</code> and an optional<br>
+<code>ConnectorInterface</code>. It will now create a default <code>Connector</code> if none<br>
+has been given.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old</span></span>
+<span class="pl-s1"><span class="pl-smi">$dnsResolverFactory</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Dns\Resolver\</span><span class="pl-c1">Factory</span>();</span>
+<span class="pl-s1"><span class="pl-smi">$dnsResolver</span> <span class="pl-k">=</span> <span class="pl-smi">$dnsResolverFactory</span><span class="pl-k">-&gt;</span>createCached(<span class="pl-s"><span class="pl-pds">'</span>8.8.8.8<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$factory</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\HttpClient\</span><span class="pl-c1">Factory</span>();</span>
+<span class="pl-s1"><span class="pl-smi">$client</span> <span class="pl-k">=</span> <span class="pl-smi">$factory</span><span class="pl-k">-&gt;</span>create(<span class="pl-smi">$loop</span>, <span class="pl-smi">$dnsResolver</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new</span></span>
+<span class="pl-s1"><span class="pl-smi">$client</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\HttpClient\</span><span class="pl-c1">Client</span>(<span class="pl-smi">$loop</span>);</span></pre></div>
+</li>
+<li>
+<p>Feature: <code>Request::close()</code> now cancels pending connection attempt<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="229973854" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/91" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/91/hovercard" href="https://github.com/reactphp/http-client/pull/91">#91</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature / BC break: Replace deprecated SocketClient with new Socket component<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="212950109" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/74" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/74/hovercard" href="https://github.com/reactphp/http-client/pull/74">#74</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="223596848" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/84" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/84/hovercard" href="https://github.com/reactphp/http-client/pull/84">#84</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="229669330" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/88" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/88/hovercard" href="https://github.com/reactphp/http-client/pull/88">#88</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature / BC break: Consistent stream semantics and forward compatibility with upcoming Stream v1.0<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="229961716" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/90" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/90/hovercard" href="https://github.com/reactphp/http-client/pull/90">#90</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Forward compatibility with upcoming EventLoop v1.0 and v0.5<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="229670915" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/89" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/89/hovercard" href="https://github.com/reactphp/http-client/pull/89">#89</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Catch Guzzle parser exception<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="221963228" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/82" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/82/hovercard" href="https://github.com/reactphp/http-client/pull/82">#82</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/djagya/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/djagya">@djagya</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-071-2017-05-20" class="anchor" href="#stream-071-2017-05-20" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 0.7.1
+
+        <small>
+            (2017-05-20)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.7.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Add optional <code>$writeChunkSize</code> parameter to limit maximum number of<br>
+bytes to write at once.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="230037606" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/105" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/105/hovercard" href="https://github.com/reactphp/stream/pull/105">#105</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">WritableResourceStream</span>(<span class="pl-c1">STDOUT</span>, <span class="pl-smi">$loop</span>, <span class="pl-c1">null</span>, <span class="pl-c1">8192</span>);</span></pre></div>
+</li>
+<li>
+<p>Ignore HHVM test failures for now until Travis tests work again<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="230042502" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/106" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/106/hovercard" href="https://github.com/reactphp/stream/pull/106">#106</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promisestream-011-2017-05-15" class="anchor" href="#promisestream-011-2017-05-15" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        PromiseStream 0.1.1
+
+        <small>
+            (2017-05-15)
+            <a href="https://github.com/reactphp/promise-stream/releases/tag/v0.1.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: Forward compatibility with stream 1.0, 0.7, 0.6, and 0.5 (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="228503163" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-stream/issues/2" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-stream/pull/2/hovercard" href="https://github.com/reactphp/promise-stream/pull/2">#2</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promisestream-010-2017-05-10" class="anchor" href="#promisestream-010-2017-05-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        PromiseStream 0.1.0
+
+        <small>
+            (2017-05-10)
+            <a href="https://github.com/reactphp/promise-stream/releases/tag/v0.1.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Initial release, adapted from <a href="https://github.com/clue/php-promise-stream-react"><code>clue/promise-stream-react</code></a></li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-080-2017-05-09" class="anchor" href="#socket-080-2017-05-09" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.8.0
+
+        <small>
+            (2017-05-09)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.8.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: New <code>Server</code> class now acts as a facade for existing server classes<br>
+and renamed old <code>Server</code> to <code>TcpServer</code> for advanced usage.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="223777520" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/96" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/96/hovercard" href="https://github.com/reactphp/socket/pull/96">#96</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="225122944" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/97" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/97/hovercard" href="https://github.com/reactphp/socket/pull/97">#97</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>The <code>Server</code> class is now the main class in this package that implements the<br>
+<code>ServerInterface</code> and allows you to accept incoming streaming connections,<br>
+such as plaintext TCP/IP or secure TLS connection streams.</p>
+<blockquote>
+<p>This is not a BC break and consumer code does not have to be updated.</p>
+</blockquote>
+</li>
+<li>
+<p>Feature / BC break: All addresses are now URIs that include the URI scheme<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="225141367" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/98" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/98/hovercard" href="https://github.com/reactphp/socket/pull/98">#98</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-source-diff"><pre><span class="pl-md"><span class="pl-md">-</span> $parts = parse_url('tcp://' . $conn-&gt;getRemoteAddress());</span>
+<span class="pl-mi1"><span class="pl-mi1">+</span> $parts = parse_url($conn-&gt;getRemoteAddress());</span></pre></div>
+</li>
+<li>
+<p>Fix: Fix <code>unix://</code> addresses for Unix domain socket (UDS) paths<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="227005937" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/100" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/100/hovercard" href="https://github.com/reactphp/socket/pull/100">#100</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Forward compatibility with Stream v1.0 and v0.7<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="226647809" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/99" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/99/hovercard" href="https://github.com/reactphp/socket/pull/99">#99</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-070-2017-05-04" class="anchor" href="#stream-070-2017-05-04" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 0.7.0
+
+        <small>
+            (2017-05-04)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.7.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Removed / BC break: Remove deprecated and unneeded functionality<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="156061344" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/45" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/45/hovercard" href="https://github.com/reactphp/stream/pull/45">#45</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="223630853" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/87" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/87/hovercard" href="https://github.com/reactphp/stream/pull/87">#87</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="224692249" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/90" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/90/hovercard" href="https://github.com/reactphp/stream/pull/90">#90</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="224725722" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/91" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/91/hovercard" href="https://github.com/reactphp/stream/pull/91">#91</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="224814479" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/93" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/93/hovercard" href="https://github.com/reactphp/stream/pull/93">#93</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<ul>
+<li>
+<p>Remove deprecated <code>Stream</code> class, use <code>DuplexResourceStream</code> instead<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="223630853" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/87" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/87/hovercard" href="https://github.com/reactphp/stream/pull/87">#87</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Remove public <code>$buffer</code> property, use new constructor parameters instead<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="224725722" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/91" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/91/hovercard" href="https://github.com/reactphp/stream/pull/91">#91</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Remove public <code>$stream</code> property from all resource streams<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="224692249" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/90" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/90/hovercard" href="https://github.com/reactphp/stream/pull/90">#90</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Remove undocumented and now unused <code>ReadableStream</code> and <code>WritableStream</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="224814479" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/93" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/93/hovercard" href="https://github.com/reactphp/stream/pull/93">#93</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Remove <code>BufferedSink</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="156061344" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/45" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/45/hovercard" href="https://github.com/reactphp/stream/pull/45">#45</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+</li>
+<li>
+<p>Feature / BC break: Simplify <code>ThroughStream</code> by using data callback instead of<br>
+inheritance. It is now a direct implementation of <code>DuplexStreamInterface</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="223724023" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/88" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/88/hovercard" href="https://github.com/reactphp/stream/pull/88">#88</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="223771834" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/89" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/89/hovercard" href="https://github.com/reactphp/stream/pull/89">#89</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$through</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">ThroughStream</span>(<span class="pl-k">function</span> (<span class="pl-smi">$data</span>) {</span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-c1">json_encode</span>(<span class="pl-smi">$data</span>) <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"><span class="pl-smi">$through</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>data<span class="pl-pds">'</span></span>, <span class="pl-smi">$this</span><span class="pl-k">-&gt;</span>expectCallableOnceWith(<span class="pl-s"><span class="pl-pds">"</span>[2, true]<span class="pl-cce">\n</span><span class="pl-pds">"</span></span>));</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$through</span><span class="pl-k">-&gt;</span>write(<span class="pl-c1">array</span>(<span class="pl-c1">2</span>, <span class="pl-c1">true</span>));</span></pre></div>
+</li>
+<li>
+<p>Feature / BC break: The <code>CompositeStream</code> starts closed if either side is<br>
+already closed and forwards pause to pipe source on first write attempt.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="225736993" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/96" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/96/hovercard" href="https://github.com/reactphp/stream/pull/96">#96</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="226223986" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/103" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/103/hovercard" href="https://github.com/reactphp/stream/pull/103">#103</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>If either side of the composite stream closes, it will also close the other<br>
+side. We now also ensure that if either side is already closed during<br>
+instantiation, it will also close the other side.</p>
+</li>
+<li>
+<p>BC break: Mark all classes as <code>final</code> and<br>
+mark internal API as <code>private</code> to discourage inheritance<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="225213911" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/95" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/95/hovercard" href="https://github.com/reactphp/stream/pull/95">#95</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="225897746" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/99" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/99/hovercard" href="https://github.com/reactphp/stream/pull/99">#99</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature / BC break: Only emit <code>error</code> event for fatal errors<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="224740621" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/92" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/92/hovercard" href="https://github.com/reactphp/stream/pull/92">#92</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<blockquote>
+<p>The <code>error</code> event was previously also allowed to be emitted for non-fatal<br>
+errors, but our implementations actually only ever emitted this as a fatal<br>
+error and then closed the stream.</p>
+</blockquote>
+</li>
+<li>
+<p>Feature: Explicitly allow custom events and exclude any semantics<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="225748501" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/97" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/97/hovercard" href="https://github.com/reactphp/stream/pull/97">#97</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Support legacy PHP 5.3 through PHP 7.1 and HHVM and improve usage documentation<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="225912432" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/100" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/100/hovercard" href="https://github.com/reactphp/stream/pull/100">#100</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="226073183" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/102" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/102/hovercard" href="https://github.com/reactphp/stream/pull/102">#102</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Actually require all dependencies so this is self-contained and improve<br>
+forward compatibility with EventLoop v1.0 and v0.5<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="225209246" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/94" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/94/hovercard" href="https://github.com/reactphp/stream/pull/94">#94</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="225752190" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/98" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/98/hovercard" href="https://github.com/reactphp/stream/pull/98">#98</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="dns-049-2017-05-01" class="anchor" href="#dns-049-2017-05-01" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        DNS 0.4.9
+
+        <small>
+            (2017-05-01)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.9" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Forward compatibility with upcoming Socket v1.0 and v0.8<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="225206498" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/61" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/61/hovercard" href="https://github.com/reactphp/dns/pull/61">#61</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="eventloop-043-2017-04-27" class="anchor" href="#eventloop-043-2017-04-27" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        EventLoop 0.4.3
+
+        <small>
+            (2017-04-27)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.4.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <p>This is a bug fix and improvement release:</p>
+<ul>
+<li>Bug fix: Bugfix in the usage sample code <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="185652338" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/57" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/57/hovercard" href="https://github.com/reactphp/event-loop/pull/57">#57</a> (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/dandelionred/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dandelionred">@dandelionred</a>)</li>
+<li>Improvement: Remove branch-alias definition <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="164108508" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/53" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/53/hovercard" href="https://github.com/reactphp/event-loop/pull/53">#53</a> (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</li>
+<li>Improvement: StreamSelectLoop: Use fresh time so Timers added during stream events are accurate <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="155989330" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/51" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/51/hovercard" href="https://github.com/reactphp/event-loop/pull/51">#51</a> (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/andrewminerd/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/andrewminerd">@andrewminerd</a>)</li>
+<li>Improvement: Avoid deprecation warnings in test suite due to deprecation of getMock() in PHPUnit <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="200036131" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/68" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/68/hovercard" href="https://github.com/reactphp/event-loop/pull/68">#68</a> (@martinschroeder)</li>
+<li>Improvement: Add PHPUnit 4.8 to require-dev <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="200829117" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/69" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/69/hovercard" href="https://github.com/reactphp/event-loop/pull/69">#69</a> (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/shaunbramley/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/shaunbramley">@shaunbramley</a>)</li>
+<li>Improvement: Increase test timeouts for HHVM and unify timeout handling <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="200949308" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/70" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/70/hovercard" href="https://github.com/reactphp/event-loop/pull/70">#70</a> (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Improvement: Travis improvements (backported from <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="205542977" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/74" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/74/hovercard" href="https://github.com/reactphp/event-loop/pull/74">#74</a>) <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206282793" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/75" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/75/hovercard" href="https://github.com/reactphp/event-loop/pull/75">#75</a> (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Improvement: Test suite now uses socket pairs instead of memory streams <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="199529591" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/66" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/66/hovercard" href="https://github.com/reactphp/event-loop/pull/66">#66</a> (@martinschroeder)</li>
+<li>Improvement: StreamSelectLoop: Test suite uses signal constant names in data provider <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="200029677" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/67" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/67/hovercard" href="https://github.com/reactphp/event-loop/pull/67">#67</a> (@martinschroeder)</li>
+<li>Improvement: ExtEventLoop: No longer suppress all errors <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="199512405" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/65" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/65/hovercard" href="https://github.com/reactphp/event-loop/pull/65">#65</a> (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/mamciek/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mamciek">@mamciek</a>)</li>
+<li>Improvement: Readme cleanup <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="217153774" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/89" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/89/hovercard" href="https://github.com/reactphp/event-loop/pull/89">#89</a> (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</li>
+<li>Improvement: Restructure and improve README <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="217177063" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/90" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/90/hovercard" href="https://github.com/reactphp/event-loop/pull/90">#90</a> (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</li>
+<li>Bug fix: StreamSelectLoop: Fix erroneous zero-time sleep (backport to 0.4) <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="219146470" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/94" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/94/hovercard" href="https://github.com/reactphp/event-loop/pull/94">#94</a> (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-072-2017-04-24" class="anchor" href="#socket-072-2017-04-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.7.2
+
+        <small>
+            (2017-04-24)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.7.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix: Work around latest PHP 7.0.18 and 7.1.4 no longer accepting full URIs<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="223574812" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/94" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/94/hovercard" href="https://github.com/reactphp/socket/pull/94">#94</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="dns-048-2017-04-16" class="anchor" href="#dns-048-2017-04-16" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        DNS 0.4.8
+
+        <small>
+            (2017-04-16)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.8" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Add support for the AAAA record type to the protocol parser<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="220659734" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/58" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/58/hovercard" href="https://github.com/reactphp/dns/pull/58">#58</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/othillo/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/othillo">@othillo</a>)</li>
+<li>Feature: Add support for the PTR record type to the protocol parser<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="220734850" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/59" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/59/hovercard" href="https://github.com/reactphp/dns/pull/59">#59</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/othillo/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/othillo">@othillo</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-071-2017-04-10" class="anchor" href="#socket-071-2017-04-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.7.1
+
+        <small>
+            (2017-04-10)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.7.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix: Ignore HHVM errors when closing connection that is already closing<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="220691001" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/91" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/91/hovercard" href="https://github.com/reactphp/socket/pull/91">#91</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-070-2017-04-10" class="anchor" href="#socket-070-2017-04-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.7.0
+
+        <small>
+            (2017-04-10)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.7.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Merge SocketClient component into this component<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="219318125" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/87" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/87/hovercard" href="https://github.com/reactphp/socket/pull/87">#87</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>This means that this package now provides async, streaming plaintext TCP/IP<br>
+and secure TLS socket server and client connections for ReactPHP.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$connector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Connector</span>(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$connector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>google.com:80<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$conn</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>…<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1">});</span></pre></div>
+<p>Accordingly, the <code>ConnectionInterface</code> is now used to represent both incoming<br>
+server side connections as well as outgoing client side connections.</p>
+<p>If you've previously used the SocketClient component to establish outgoing<br>
+client connections, upgrading should take no longer than a few minutes.<br>
+All classes have been merged as-is from the latest <code>v0.7.0</code> release with no<br>
+other changes, so you can simply update your code to use the updated namespace<br>
+like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old from SocketClient component and namespace</span></span>
+<span class="pl-s1"><span class="pl-smi">$connector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\SocketClient\</span><span class="pl-c1">Connector</span>(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$connector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>google.com:80<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$conn</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>…<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new</span></span>
+<span class="pl-s1"><span class="pl-smi">$connector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Connector</span>(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$connector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>google.com:80<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$conn</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>…<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1">});</span></pre></div>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-060-2017-04-04" class="anchor" href="#socket-060-2017-04-04" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.6.0
+
+        <small>
+            (2017-04-04)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.6.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Add <code>LimitingServer</code> to limit and keep track of open connections<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="218795441" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/86" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/86/hovercard" href="https://github.com/reactphp/socket/pull/86">#86</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-c1">0</span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">LimitingServer</span>(<span class="pl-smi">$server</span>, <span class="pl-c1">100</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>connection<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>hello there!<span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>);</span>
+<span class="pl-s1">    …</span>
+<span class="pl-s1">});</span></pre></div>
+</li>
+<li>
+<p>Feature / BC break: Add <code>pause()</code> and <code>resume()</code> methods to limit active<br>
+connections<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="217096848" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/84" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/84/hovercard" href="https://github.com/reactphp/socket/pull/84">#84</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-c1">0</span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>pause();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addTimer(<span class="pl-c1">1.0</span>, <span class="pl-k">function</span>() <span class="pl-k">use</span> (<span class="pl-smi">$server</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>resume();</span>
+<span class="pl-s1">});</span></pre></div>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="dns-047-2017-03-31" class="anchor" href="#dns-047-2017-03-31" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        DNS 0.4.7
+
+        <small>
+            (2017-03-31)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.7" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Forward compatibility with upcoming Socket v0.6 and v0.7 component<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="218202152" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/57" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/57/hovercard" href="https://github.com/reactphp/dns/pull/57">#57</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-060-2017-03-26" class="anchor" href="#stream-060-2017-03-26" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 0.6.0
+
+        <small>
+            (2017-03-26)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.6.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature / Fix / BC break: Add <code>DuplexResourceStream</code> and deprecate <code>Stream</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="216772737" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/85" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/85/hovercard" href="https://github.com/reactphp/stream/pull/85">#85</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old (does still work for BC reasons)</span></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Stream</span>(<span class="pl-smi">$connection</span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new</span></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">DuplexResourceStream</span>(<span class="pl-smi">$connection</span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+<p>Note that the <code>DuplexResourceStream</code> now rejects read-only or write-only<br>
+streams, so this may affect BC. If you want a read-only or write-only<br>
+resource, use <code>ReadableResourceStream</code> or <code>WritableResourceStream</code> instead of<br>
+<code>DuplexResourceStream</code>.</p>
+<blockquote>
+<p>BC note: This class was previously called <code>Stream</code>. The <code>Stream</code> class still<br>
+exists for BC reasons and will be removed in future versions of this package.</p>
+</blockquote>
+</li>
+<li>
+<p>Feature / BC break: Add <code>WritableResourceStream</code> (previously called <code>Buffer</code>)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="215384123" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/84" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/84/hovercard" href="https://github.com/reactphp/stream/pull/84">#84</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old</span></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Buffer</span>(<span class="pl-c1">STDOUT</span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new</span></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">WritableResourceStream</span>(<span class="pl-c1">STDOUT</span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+</li>
+<li>
+<p>Feature: Add <code>ReadableResourceStream</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="215212874" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/83" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/83/hovercard" href="https://github.com/reactphp/stream/pull/83">#83</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">ReadableResourceStream</span>(<span class="pl-c1">STDIN</span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+</li>
+<li>
+<p>Fix / BC Break: Enforce using non-blocking I/O<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="164077700" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/46" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/46/hovercard" href="https://github.com/reactphp/stream/pull/46">#46</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<blockquote>
+<p>BC note: This is known to affect process pipes on Windows which do not<br>
+support non-blocking I/O and could thus block the whole EventLoop previously.</p>
+</blockquote>
+</li>
+<li>
+<p>Feature / Fix / BC break: Consistent semantics for<br>
+<code>DuplexStreamInterface::end()</code> to ensure it SHOULD also end readable side<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="216844641" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/86" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/86/hovercard" href="https://github.com/reactphp/stream/pull/86">#86</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Do not use unbuffered reads on pipe streams for legacy PHP &lt; 5.4<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="213626959" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/80" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/80/hovercard" href="https://github.com/reactphp/stream/pull/80">#80</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promise-251-2017-03-25" class="anchor" href="#promise-251-2017-03-25" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Promise 2.5.1
+
+        <small>
+            (2017-03-25)
+            <a href="https://github.com/reactphp/promise/releases/tag/v2.5.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix circular references when resolving with a promise which follows itself (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="214984171" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/94" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/94/hovercard" href="https://github.com/reactphp/promise/pull/94">#94</a>).</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-0417-2017-03-20" class="anchor" href="#httpclient-0417-2017-03-20" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.4.17
+
+        <small>
+            (2017-03-20)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.17" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: Add PHPUnit to require-dev <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="213152427" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/75" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/75/hovercard" href="https://github.com/reactphp/http-client/pull/75">#75</a> <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a></li>
+<li>Fix: Fix chunk header to be case-insensitive and allow leading zeros for end chunk <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="215234817" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/77" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/77/hovercard" href="https://github.com/reactphp/http-client/pull/77">#77</a> <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/mdrost/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mdrost">@mdrost</a></li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="childprocess-043-2017-03-14" class="anchor" href="#childprocess-043-2017-03-14" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        ChildProcess 0.4.3
+
+        <small>
+            (2017-03-14)
+            <a href="https://github.com/reactphp/child-process/releases/tag/v0.4.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Ease getting started by improving documentation and adding examples<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="213597687" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/33" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/33/hovercard" href="https://github.com/reactphp/child-process/pull/33">#33</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="213617503" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/34" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/34/hovercard" href="https://github.com/reactphp/child-process/pull/34">#34</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>First class support for PHP 5.3 through PHP 7.1 and HHVM<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="213316546" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/29" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/29/hovercard" href="https://github.com/reactphp/child-process/pull/29">#29</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="213568542" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/32" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/32/hovercard" href="https://github.com/reactphp/child-process/pull/32">#32</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="dns-046-2017-03-11" class="anchor" href="#dns-046-2017-03-11" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        DNS 0.4.6
+
+        <small>
+            (2017-03-11)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.6" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix: Fix DNS timeout issues for Windows users and add forward compatibility<br>
+with Stream v0.5 and upcoming v0.6<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="212768844" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/53" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/53/hovercard" href="https://github.com/reactphp/dns/pull/53">#53</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Improve test suite by adding PHPUnit to <code>require-dev</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="213293090" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/54" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/54/hovercard" href="https://github.com/reactphp/dns/pull/54">#54</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="childprocess-042-2017-03-10" class="anchor" href="#childprocess-042-2017-03-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        ChildProcess 0.4.2
+
+        <small>
+            (2017-03-10)
+            <a href="https://github.com/reactphp/child-process/releases/tag/v0.4.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Forward compatibility with Stream v0.5<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="212772558" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/26" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/26/hovercard" href="https://github.com/reactphp/child-process/pull/26">#26</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by removing AppVeyor and adding PHPUnit to <code>require-dev</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="213297447" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/27" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/27/hovercard" href="https://github.com/reactphp/child-process/pull/27">#27</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="213315401" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/28" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/28/hovercard" href="https://github.com/reactphp/child-process/pull/28">#28</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="http-060-2017-03-09" class="anchor" href="#http-060-2017-03-09" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTP 0.6.0
+
+        <small>
+            (2017-03-09)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.6.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature / BC break: The <code>Request</code> and <code>Response</code> objects now follow strict<br>
+stream semantics and their respective methods and events.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="207239007" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/116" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/116/hovercard" href="https://github.com/reactphp/http/pull/116">#116</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="208724675" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/129" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/129/hovercard" href="https://github.com/reactphp/http/pull/129">#129</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="209625936" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/133" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/133/hovercard" href="https://github.com/reactphp/http/pull/133">#133</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="210935826" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/135" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/135/hovercard" href="https://github.com/reactphp/http/pull/135">#135</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="211263684" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/136" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/136/hovercard" href="https://github.com/reactphp/http/pull/136">#136</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="211716146" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/137" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/137/hovercard" href="https://github.com/reactphp/http/pull/137">#137</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="211731585" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/138" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/138/hovercard" href="https://github.com/reactphp/http/pull/138">#138</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="212087702" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/140" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/140/hovercard" href="https://github.com/reactphp/http/pull/140">#140</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="212137195" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/141" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/141/hovercard" href="https://github.com/reactphp/http/pull/141">#141</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/legionth/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/legionth">@legionth</a><br>
+and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="208419267" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/122" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/122/hovercard" href="https://github.com/reactphp/http/pull/122">#122</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="208423792" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/123" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/123/hovercard" href="https://github.com/reactphp/http/pull/123">#123</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="208880989" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/130" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/130/hovercard" href="https://github.com/reactphp/http/pull/130">#130</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="209072039" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/131" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/131/hovercard" href="https://github.com/reactphp/http/pull/131">#131</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="209106037" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/132" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/132/hovercard" href="https://github.com/reactphp/http/pull/132">#132</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="212765376" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/142" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/142/hovercard" href="https://github.com/reactphp/http/pull/142">#142</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>This implies that the <code>Server</code> now supports proper detection of the request<br>
+message body stream, such as supporting decoding chunked transfer encoding,<br>
+delimiting requests with an explicit <code>Content-Length</code> header<br>
+and those with an empty request message body.</p>
+<p>These streaming semantics are compatible with previous Stream v0.5, future<br>
+compatible with v0.5 and upcoming v0.6 versions and can be used like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$http</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>request<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-c1">Request</span> <span class="pl-smi">$request</span>, <span class="pl-c1">Response</span> <span class="pl-smi">$response</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$contentLength</span> <span class="pl-k">=</span> <span class="pl-c1">0</span>;</span>
+<span class="pl-s1">    <span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>data<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-smi">$data</span>) <span class="pl-k">use</span> (<span class="pl-k">&amp;</span><span class="pl-smi">$contentLength</span>) {</span>
+<span class="pl-s1">        <span class="pl-smi">$contentLength</span> <span class="pl-k">+</span><span class="pl-k">=</span> <span class="pl-c1">strlen</span>(<span class="pl-smi">$data</span>);</span>
+<span class="pl-s1">    });</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>end<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> () <span class="pl-k">use</span> (<span class="pl-smi">$response</span>, <span class="pl-k">&amp;</span><span class="pl-smi">$contentLength</span>){</span>
+<span class="pl-s1">        <span class="pl-smi">$response</span><span class="pl-k">-&gt;</span>writeHead(<span class="pl-c1">200</span>, <span class="pl-c1">array</span>(<span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>text/plain<span class="pl-pds">'</span></span>));</span>
+<span class="pl-s1">        <span class="pl-smi">$response</span><span class="pl-k">-&gt;</span>end(<span class="pl-s"><span class="pl-pds">"</span>The length of the submitted request body is: <span class="pl-pds">"</span></span> <span class="pl-k">.</span> <span class="pl-smi">$contentLength</span>);</span>
+<span class="pl-s1">    });</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> an error occured</span></span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> e.g. on invalid chunked encoded data or an unexpected 'end' event </span></span>
+<span class="pl-s1">    <span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>error<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-c1">\Exception</span> <span class="pl-smi">$exception</span>) <span class="pl-k">use</span> (<span class="pl-smi">$response</span>, <span class="pl-k">&amp;</span><span class="pl-smi">$contentLength</span>) {</span>
+<span class="pl-s1">        <span class="pl-smi">$response</span><span class="pl-k">-&gt;</span>writeHead(<span class="pl-c1">400</span>, <span class="pl-c1">array</span>(<span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>text/plain<span class="pl-pds">'</span></span>));</span>
+<span class="pl-s1">        <span class="pl-smi">$response</span><span class="pl-k">-&gt;</span>end(<span class="pl-s"><span class="pl-pds">"</span>An error occured while reading at length: <span class="pl-pds">"</span></span> <span class="pl-k">.</span> <span class="pl-smi">$contentLength</span>);</span>
+<span class="pl-s1">    });</span>
+<span class="pl-s1">});</span></pre></div>
+<p>Similarly, the <code>Request</code> and <code>Response</code> now strictly follow the<br>
+<code>close()</code> method and <code>close</code> event semantics.<br>
+Closing the <code>Request</code> does not interrupt the underlying TCP/IP in<br>
+order to allow still sending back a valid response message.<br>
+Closing the <code>Response</code> does terminate the underlying TCP/IP<br>
+connection in order to clean up resources.</p>
+<p>You should make sure to always attach a <code>request</code> event listener<br>
+like above. The <code>Server</code> will not respond to an incoming HTTP<br>
+request otherwise and keep the TCP/IP connection pending until the<br>
+other side chooses to close the connection.</p>
+</li>
+<li>
+<p>Feature: Support <code>HTTP/1.1</code> and <code>HTTP/1.0</code> for <code>Request</code> and <code>Response</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="208556363" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/124" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/124/hovercard" href="https://github.com/reactphp/http/pull/124">#124</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="208720503" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/125" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/125/hovercard" href="https://github.com/reactphp/http/pull/125">#125</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="208721647" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/126" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/126/hovercard" href="https://github.com/reactphp/http/pull/126">#126</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="208722894" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/127" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/127/hovercard" href="https://github.com/reactphp/http/pull/127">#127</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="208723975" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/128" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/128/hovercard" href="https://github.com/reactphp/http/pull/128">#128</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="212002539" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/139" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/139/hovercard" href="https://github.com/reactphp/http/pull/139">#139</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/legionth/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/legionth">@legionth</a>)</p>
+<p>The outgoing <code>Response</code> will automatically use the same HTTP version as the<br>
+incoming <code>Request</code> message and will only apply <code>HTTP/1.1</code> semantics if<br>
+applicable. This includes that the <code>Response</code> will automatically attach a<br>
+<code>Date</code> and <code>Connection: close</code> header if applicable.</p>
+<p>This implies that the <code>Server</code> now automatically responds with HTTP error<br>
+messages for invalid requests (status 400) and those exceeding internal<br>
+request header limits (status 431).</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-051-2017-03-09" class="anchor" href="#socket-051-2017-03-09" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.5.1
+
+        <small>
+            (2017-03-09)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.5.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Forward compatibility with Stream v0.5 and upcoming v0.6<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="212760724" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/79" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/79/hovercard" href="https://github.com/reactphp/socket/pull/79">#79</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-050-2017-03-08" class="anchor" href="#stream-050-2017-03-08" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 0.5.0
+
+        <small>
+            (2017-03-08)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.5.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature / BC break: Consistent <code>end</code> event semantics (EOF)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="211713580" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/70" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/70/hovercard" href="https://github.com/reactphp/stream/pull/70">#70</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>The <code>end</code> event will now only be emitted for a <em>successful</em> end, not if the<br>
+stream closes due to an unrecoverable <code>error</code> event or if you call <code>close()</code><br>
+explicitly.<br>
+If you want to detect when the stream closes (terminates), use the <code>close</code><br>
+event instead.</p>
+</li>
+<li>
+<p>BC break: Remove custom (undocumented) <code>full-drain</code> event from <code>Buffer</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="188990819" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/63" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/63/hovercard" href="https://github.com/reactphp/stream/pull/63">#63</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="211677985" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/68" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/68/hovercard" href="https://github.com/reactphp/stream/pull/68">#68</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<blockquote>
+<p>The <code>full-drain</code> event was undocumented and mostly used internally.<br>
+Relying on this event has attracted some low-quality code in the past, so<br>
+we've removed this from the public API in order to work out a better<br>
+solution instead.<br>
+If you want to detect when the buffer finishes flushing data to the stream,<br>
+you may want to look into its <code>end()</code> method or the <code>close</code> event instead.</p>
+</blockquote>
+</li>
+<li>
+<p>Feature / BC break: Consistent event semantics and documentation,<br>
+explicitly state <em>when</em> events will be emitted and <em>which</em> arguments they<br>
+receive.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="212385051" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/73" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/73/hovercard" href="https://github.com/reactphp/stream/pull/73">#73</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="211682442" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/69" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/69/hovercard" href="https://github.com/reactphp/stream/pull/69">#69</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>The documentation now explicitly defines each event and its arguments.<br>
+Custom events and event arguments are still supported.<br>
+Most notably, all defined events only receive inherently required event<br>
+arguments and no longer transmit the instance they are emitted on for<br>
+consistency and performance reasons.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old (inconsistent and not supported by all implementations)</span></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>data<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-smi">$data</span>, <span class="pl-smi">$stream</span>) {</span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> process $data</span></span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new (consistent throughout the whole ecosystem)</span></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>data<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-smi">$data</span>) <span class="pl-k">use</span> (<span class="pl-smi">$stream</span>) {</span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> process $data</span></span>
+<span class="pl-s1">});</span></pre></div>
+<blockquote>
+<p>This mostly adds documentation (and thus some stricter, consistent<br>
+definitions) for the existing behavior, it does NOT define any major<br>
+changes otherwise.<br>
+Most existing code should be compatible with these changes, unless<br>
+it relied on some undocumented/unintended semantics.</p>
+</blockquote>
+</li>
+<li>
+<p>Feature / BC break: Consistent method semantics and documentation<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="212223280" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/72" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/72/hovercard" href="https://github.com/reactphp/stream/pull/72">#72</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<blockquote>
+<p>This mostly adds documentation (and thus some stricter, consistent<br>
+definitions) for the existing behavior, it does NOT define any major<br>
+changes otherwise.<br>
+Most existing code should be compatible with these changes, unless<br>
+it relied on some undocumented/unintended semantics.</p>
+</blockquote>
+</li>
+<li>
+<p>Feature: Consistent <code>pipe()</code> semantics for closed and closing streams<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="211951382" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/71" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/71/hovercard" href="https://github.com/reactphp/stream/pull/71">#71</a> from <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>The source stream will now always be paused via <code>pause()</code> when the<br>
+destination stream closes. Also, properly stop piping if the source<br>
+stream closes and remove all event forwarding.</p>
+</li>
+<li>
+<p>Improve test suite by adding PHPUnit to <code>require-dev</code> and improving coverage.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="212393784" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/74" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/74/hovercard" href="https://github.com/reactphp/stream/pull/74">#74</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="212408478" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/75" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/75/hovercard" href="https://github.com/reactphp/stream/pull/75">#75</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="207684806" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/66" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/66/hovercard" href="https://github.com/reactphp/stream/pull/66">#66</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/nawarian/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nawarian">@nawarian</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="dns-045-2017-03-02" class="anchor" href="#dns-045-2017-03-02" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        DNS 0.4.5
+
+        <small>
+            (2017-03-02)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.5" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix: Ensure we ignore the case of the answer<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="209582940" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/51" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/51/hovercard" href="https://github.com/reactphp/dns/pull/51">#51</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</li>
+<li>Feature: Add <code>TimeoutExecutor</code> and simplify internal APIs to allow internal<br>
+code re-use for upcoming versions.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="207147695" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/48" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/48/hovercard" href="https://github.com/reactphp/dns/pull/48">#48</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="207153598" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/49" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/49/hovercard" href="https://github.com/reactphp/dns/pull/49">#49</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-0416-2017-03-01" class="anchor" href="#httpclient-0416-2017-03-01" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.4.16
+
+        <small>
+            (2017-03-01)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.16" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix: Trim leading zeros from chunk size <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="210721736" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/73" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/73/hovercard" href="https://github.com/reactphp/http-client/pull/73">#73</a> <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/maciejmrozinski/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/maciejmrozinski">@maciejmrozinski</a></li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="http-050-2017-02-16" class="anchor" href="#http-050-2017-02-16" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTP 0.5.0
+
+        <small>
+            (2017-02-16)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.5.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature / BC break: Change <code>Request</code> methods to be in line with PSR-7<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="207728274" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/117" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/117/hovercard" href="https://github.com/reactphp/http/pull/117">#117</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<ul>
+<li>Rename <code>getQuery()</code> to <code>getQueryParams()</code></li>
+<li>Rename <code>getHttpVersion()</code> to <code>getProtocolVersion()</code></li>
+<li>Change <code>getHeaders()</code> to always return an array of string values<br>
+for each header</li>
+</ul>
+</li>
+<li>
+<p>Feature / BC break: Update Socket component to v0.5 and<br>
+add secure HTTPS server support<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="205507446" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/90" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/90/hovercard" href="https://github.com/reactphp/http/pull/90">#90</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="208097779" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/119" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/119/hovercard" href="https://github.com/reactphp/http/pull/119">#119</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old plaintext HTTP server</span></span>
+<span class="pl-s1"><span class="pl-smi">$socket</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Server</span>(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$socket</span><span class="pl-k">-&gt;</span>listen(<span class="pl-c1">8080</span>, <span class="pl-s"><span class="pl-pds">'</span>127.0.0.1<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"><span class="pl-smi">$http</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Http\</span><span class="pl-c1">Server</span>(<span class="pl-smi">$socket</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new plaintext HTTP server</span></span>
+<span class="pl-s1"><span class="pl-smi">$socket</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Server</span>(<span class="pl-s"><span class="pl-pds">'</span>127.0.0.1:8080<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$http</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Http\</span><span class="pl-c1">Server</span>(<span class="pl-smi">$socket</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new secure HTTPS server</span></span>
+<span class="pl-s1"><span class="pl-smi">$socket</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Server</span>(<span class="pl-s"><span class="pl-pds">'</span>127.0.0.1:8080<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$socket</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">SecureServer</span>(<span class="pl-smi">$socket</span>, <span class="pl-smi">$loop</span>, <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>local_cert<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">__DIR__</span> <span class="pl-k">.</span> <span class="pl-s"><span class="pl-pds">'</span>/localhost.pem<span class="pl-pds">'</span></span></span>
+<span class="pl-s1">));</span>
+<span class="pl-s1"><span class="pl-smi">$http</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Http\</span><span class="pl-c1">Server</span>(<span class="pl-smi">$socket</span>);</span></pre></div>
+</li>
+<li>
+<p>BC break: Mark internal APIs as internal or private and<br>
+remove unneeded <code>ServerInterface</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="207736752" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/118" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/118/hovercard" href="https://github.com/reactphp/http/pull/118">#118</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="205866427" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/95" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/95/hovercard" href="https://github.com/reactphp/http/pull/95">#95</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/legionth/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/legionth">@legionth</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-050-2017-02-14" class="anchor" href="#socket-050-2017-02-14" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.5.0
+
+        <small>
+            (2017-02-14)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.5.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature / BC break: Replace <code>listen()</code> call with URIs passed to constructor<br>
+and reject listening on hostnames with <code>InvalidArgumentException</code><br>
+and replace <code>ConnectionException</code> with <code>RuntimeException</code> for consistency<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="201196498" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/61" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/61/hovercard" href="https://github.com/reactphp/socket/pull/61">#61</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="203649238" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/66" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/66/hovercard" href="https://github.com/reactphp/socket/pull/66">#66</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206189853" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/72" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/72/hovercard" href="https://github.com/reactphp/socket/pull/72">#72</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>listen(<span class="pl-c1">8080</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-c1">8080</span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+<p>Similarly, you can now pass a full listening URI to the constructor to change<br>
+the listening host:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>listen(<span class="pl-c1">8080</span>, <span class="pl-s"><span class="pl-pds">'</span>127.0.0.1<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-s"><span class="pl-pds">'</span>127.0.0.1:8080<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+<p>Trying to start listening on (DNS) host names will now throw an<br>
+<code>InvalidArgumentException</code>, use IP addresses instead:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>listen(<span class="pl-c1">8080</span>, <span class="pl-s"><span class="pl-pds">'</span>localhost<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-s"><span class="pl-pds">'</span>127.0.0.1:8080<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+<p>If trying to listen fails (such as if port is already in use or port below<br>
+1024 may require root access etc.), it will now throw a <code>RuntimeException</code>,<br>
+the <code>ConnectionException</code> class has been removed:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old: throws React\Socket\ConnectionException</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>listen(<span class="pl-c1">80</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new: throws RuntimeException</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-c1">80</span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+</li>
+<li>
+<p>Feature / BC break: Rename <code>shutdown()</code> to <code>close()</code> for consistency throughout React<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="201220570" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/62" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/62/hovercard" href="https://github.com/reactphp/socket/pull/62">#62</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>shutdown();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>close();</span></pre></div>
+</li>
+<li>
+<p>Feature / BC break: Replace <code>getPort()</code> with <code>getAddress()</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="205420718" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/67" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/67/hovercard" href="https://github.com/reactphp/socket/pull/67">#67</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old</span></span>
+<span class="pl-s1"><span class="pl-c1">echo</span> <span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>getPort(); <span class="pl-c"><span class="pl-c">//</span> 8080</span></span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new</span></span>
+<span class="pl-s1"><span class="pl-c1">echo</span> <span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>getAddress(); <span class="pl-c"><span class="pl-c">//</span> 127.0.0.1:8080</span></span></pre></div>
+</li>
+<li>
+<p>Feature / BC break: <code>getRemoteAddress()</code> returns full address instead of only IP<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="203327734" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/65" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/65/hovercard" href="https://github.com/reactphp/socket/pull/65">#65</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old</span></span>
+<span class="pl-s1"><span class="pl-c1">echo</span> <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>getRemoteAddress(); <span class="pl-c"><span class="pl-c">//</span> 192.168.0.1</span></span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new</span></span>
+<span class="pl-s1"><span class="pl-c1">echo</span> <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>getRemoteAddress(); <span class="pl-c"><span class="pl-c">//</span> 192.168.0.1:51743</span></span></pre></div>
+</li>
+<li>
+<p>Feature / BC break: Add <code>getLocalAddress()</code> method<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="205428178" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/68" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/68/hovercard" href="https://github.com/reactphp/socket/pull/68">#68</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c1">echo</span> <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>getLocalAddress(); <span class="pl-c"><span class="pl-c">//</span> 127.0.0.1:8080</span></span></pre></div>
+</li>
+<li>
+<p>BC break: The <code>Server</code> and <code>SecureServer</code> class are now marked <code>final</code><br>
+and you can no longer <code>extend</code> them<br>
+(which was never documented or recommended anyway).<br>
+Public properties and event handlers are now internal only.<br>
+Please use composition instead of extension.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206188067" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/71" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/71/hovercard" href="https://github.com/reactphp/socket/pull/71">#71</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206165079" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/70" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/70/hovercard" href="https://github.com/reactphp/socket/pull/70">#70</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206140559" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/69" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/69/hovercard" href="https://github.com/reactphp/socket/pull/69">#69</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="http-044-2017-02-13" class="anchor" href="#http-044-2017-02-13" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTP 0.4.4
+
+        <small>
+            (2017-02-13)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.4.4" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Add request header accessors (à la PSR-7)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206525234" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/103" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/103/hovercard" href="https://github.com/reactphp/http/pull/103">#103</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> get value of host header</span></span>
+<span class="pl-s1"><span class="pl-smi">$host</span> <span class="pl-k">=</span> <span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>getHeaderLine(<span class="pl-s"><span class="pl-pds">'</span>Host<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> get list of all cookie headers</span></span>
+<span class="pl-s1"><span class="pl-smi">$cookies</span> <span class="pl-k">=</span> <span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>getHeader(<span class="pl-s"><span class="pl-pds">'</span>Cookie<span class="pl-pds">'</span></span>);</span></pre></div>
+</li>
+<li>
+<p>Feature: Forward <code>pause()</code> and <code>resume()</code> from <code>Request</code> to underlying connection<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206817301" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/110" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/110/hovercard" href="https://github.com/reactphp/http/pull/110">#110</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> support back-pressure when piping request into slower destination</span></span>
+<span class="pl-s1"><span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>pipe(<span class="pl-smi">$dest</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> manually pause/resume request</span></span>
+<span class="pl-s1"><span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>pause();</span>
+<span class="pl-s1"><span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>resume();</span></pre></div>
+</li>
+<li>
+<p>Fix: Fix <code>100-continue</code> to be handled case-insensitive and ignore it for HTTP/1.0.<br>
+Similarly, outgoing response headers are now handled case-insensitive, e.g<br>
+we no longer apply chunked transfer encoding with mixed-case <code>Content-Length</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206791192" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/107" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/107/hovercard" href="https://github.com/reactphp/http/pull/107">#107</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> now handled case-insensitive</span></span>
+<span class="pl-s1"><span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>expectsContinue();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> now works just like properly-cased header</span></span>
+<span class="pl-s1"><span class="pl-smi">$response</span><span class="pl-k">-&gt;</span>writeHead(<span class="pl-smi">$status</span>, <span class="pl-c1">array</span>(<span class="pl-s"><span class="pl-pds">'</span>content-length<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">0</span>));</span></pre></div>
+</li>
+<li>
+<p>Fix: Do not emit empty <code>data</code> events and ignore empty writes in order to<br>
+not mess up chunked transfer encoding<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206791835" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/108" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/108/hovercard" href="https://github.com/reactphp/http/pull/108">#108</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206982814" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/112" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/112/hovercard" href="https://github.com/reactphp/http/pull/112">#112</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Lock and test minimum required dependency versions and support PHPUnit v5<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206984349" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/113" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/113/hovercard" href="https://github.com/reactphp/http/pull/113">#113</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206989128" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/115" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/115/hovercard" href="https://github.com/reactphp/http/pull/115">#115</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206985941" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/114" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/114/hovercard" href="https://github.com/reactphp/http/pull/114">#114</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/andig/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/andig">@andig</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="dns-044-2017-02-13" class="anchor" href="#dns-044-2017-02-13" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        DNS 0.4.4
+
+        <small>
+            (2017-02-13)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.4" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix: Fix handling connection and stream errors<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="207041103" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/45" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/45/hovercard" href="https://github.com/reactphp/dns/pull/45">#45</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Feature: Add examples and forward compatibility with upcoming Socket v0.5 component<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="207042590" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/46" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/46/hovercard" href="https://github.com/reactphp/dns/pull/46">#46</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="207145474" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/47" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/47/hovercard" href="https://github.com/reactphp/dns/pull/47">#47</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="http-043-2017-02-10" class="anchor" href="#http-043-2017-02-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTP 0.4.3
+
+        <small>
+            (2017-02-10)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.4.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix: Do not take start of body into account when checking maximum header size<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="205440658" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/88" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/88/hovercard" href="https://github.com/reactphp/http/pull/88">#88</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/nopolabs/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nopolabs">@nopolabs</a>)</li>
+<li>Fix: Remove <code>data</code> listener if <code>HeaderParser</code> emits an error<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="189686153" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/83" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/83/hovercard" href="https://github.com/reactphp/http/pull/83">#83</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/nick4fake/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nick4fake">@nick4fake</a>)</li>
+<li>First class support for PHP 5.3 through PHP 7 and HHVM<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206488535" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/101" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/101/hovercard" href="https://github.com/reactphp/http/pull/101">#101</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206489531" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/102" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/102/hovercard" href="https://github.com/reactphp/http/pull/102">#102</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="174904804" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/66" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/66/hovercard" href="https://github.com/reactphp/http/pull/66">#66</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</li>
+<li>Improve test suite by adding PHPUnit to require-dev,<br>
+improving forward compatibility with newer PHPUnit versions<br>
+and replacing unneeded test stubs<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="205508812" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/92" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/92/hovercard" href="https://github.com/reactphp/http/pull/92">#92</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="205510801" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/93" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/93/hovercard" href="https://github.com/reactphp/http/pull/93">#93</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/nopolabs/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nopolabs">@nopolabs</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206474206" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/100" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/100/hovercard" href="https://github.com/reactphp/http/pull/100">#100</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/legionth/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/legionth">@legionth</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-046-2017-01-26" class="anchor" href="#socket-046-2017-01-26" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.4.6
+
+        <small>
+            (2017-01-26)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.4.6" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Support socket context options passed to <code>Server</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="202817509" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/64" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/64/hovercard" href="https://github.com/reactphp/socket/pull/64">#64</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Fix: Properly return <code>null</code> for unknown addresses<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="202649771" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/63" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/63/hovercard" href="https://github.com/reactphp/socket/pull/63">#63</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Improve documentation for <code>ServerInterface</code> and lock test suite requirements<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="200869964" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/60" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/60/hovercard" href="https://github.com/reactphp/socket/pull/60">#60</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="199442321" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/57" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/57/hovercard" href="https://github.com/reactphp/socket/pull/57">#57</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/shaunbramley/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/shaunbramley">@shaunbramley</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-046-2017-01-25" class="anchor" href="#stream-046-2017-01-25" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 0.4.6
+
+        <small>
+            (2017-01-25)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.4.6" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: The <code>Buffer</code> can now be injected into the <code>Stream</code> (or be used standalone)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="188990281" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/62" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/62/hovercard" href="https://github.com/reactphp/stream/pull/62">#62</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Fix: Forward <code>close</code> event only once for <code>CompositeStream</code> and <code>ThroughStream</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="188985696" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/60" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/60/hovercard" href="https://github.com/reactphp/stream/pull/60">#60</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Fix: Consistent <code>close</code> event behavior for <code>Buffer</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="188987403" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/61" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/61/hovercard" href="https://github.com/reactphp/stream/pull/61">#61</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="datagram-111-2017-01-23" class="anchor" href="#datagram-111-2017-01-23" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Datagram 1.1.1
+
+        <small>
+            (2017-01-23)
+            <a href="https://github.com/reactphp/datagram/releases/tag/v1.1.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix: Properly format IPv6 addresses and return <code>null</code> for unknown addresses<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="202401275" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/14" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/14/hovercard" href="https://github.com/reactphp/datagram/pull/14">#14</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Fix: Skip IPv6 tests if not supported by the system<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="202530538" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/15" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/15/hovercard" href="https://github.com/reactphp/datagram/pull/15">#15</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-045-2017-01-08" class="anchor" href="#socket-045-2017-01-08" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.4.5
+
+        <small>
+            (2017-01-08)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.4.5" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Add <code>SecureServer</code> for secure TLS connections<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="198240316" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/55" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/55/hovercard" href="https://github.com/reactphp/socket/pull/55">#55</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Add functional integration tests<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="197990494" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/54" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/54/hovercard" href="https://github.com/reactphp/socket/pull/54">#54</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2016" class="anchor" href="#2016" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2016
+    </h2>
+
+    
+                        <h3>
+        <a id="eventloop-035-2016-12-28" class="anchor" href="#eventloop-035-2016-12-28" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        EventLoop 0.3.5
+
+        <small>
+            (2016-12-28)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.3.5" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <p>This is a compatibility release that eases upgrading to the v0.4 release branch.<br>
+You should consider upgrading to the v0.4 release branch.</p>
+<ul>
+<li>Feature: Cap min timer interval at 1µs, thus improving compatibility with v0.4<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="140513082" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/47" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/47/hovercard" href="https://github.com/reactphp/event-loop/pull/47">#47</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promisetimer-111-2016-12-27" class="anchor" href="#promisetimer-111-2016-12-27" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        PromiseTimer 1.1.1
+
+        <small>
+            (2016-12-27)
+            <a href="https://github.com/reactphp/promise-timer/releases/tag/v1.1.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improve test suite to use PSR-4 autoloader and proper namespaces.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="197518148" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-timer/issues/21" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-timer/pull/21/hovercard" href="https://github.com/reactphp/promise-timer/pull/21">#21</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promise-250-2016-12-22" class="anchor" href="#promise-250-2016-12-22" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Promise 2.5.0
+
+        <small>
+            (2016-12-22)
+            <a href="https://github.com/reactphp/promise/releases/tag/v2.5.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Revert automatic cancellation of pending collection promises once the output promise resolves. This was introduced in <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/reactphp/promise/commit/42d86b729204fe498688b1f4b47b4ec03482f152/hovercard" href="https://github.com/reactphp/promise/commit/42d86b729204fe498688b1f4b47b4ec03482f152"><tt>42d86b7</tt></a> (PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="93280218" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/36" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/36/hovercard" href="https://github.com/reactphp/promise/pull/36">#36</a>, released in <a href="https://github.com/reactphp/promise/releases/tag/v2.3.0">v2.3.0</a>) and was both unintended and backward incompatible.</p>
+<p>If you need automatic cancellation, you can use something like:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-k">function</span> <span class="pl-en">allAndCancel</span>(<span class="pl-k">array</span> <span class="pl-smi">$promises</span>)</span>
+<span class="pl-s1">{</span>
+<span class="pl-s1">     <span class="pl-k">return</span> <span class="pl-c1">\React\Promise\</span>all(<span class="pl-smi">$promises</span>)</span>
+<span class="pl-s1">         <span class="pl-k">-&gt;</span>always(<span class="pl-k">function</span>() <span class="pl-k">use</span> (<span class="pl-smi">$promises</span>) {</span>
+<span class="pl-s1">             <span class="pl-k">foreach</span> (<span class="pl-smi">$promises</span> <span class="pl-k">as</span> <span class="pl-smi">$promise</span>) {</span>
+<span class="pl-s1">                 <span class="pl-k">if</span> (<span class="pl-smi">$promise</span> <span class="pl-k">instanceof</span> <span class="pl-c1">\React\Promise\</span><span class="pl-c1">CancellablePromiseInterface</span>) {</span>
+<span class="pl-s1">                     <span class="pl-smi">$promise</span><span class="pl-k">-&gt;</span>cancel();</span>
+<span class="pl-s1">                 }</span>
+<span class="pl-s1">             }</span>
+<span class="pl-s1">        });</span>
+<span class="pl-s1">}</span></pre></div>
+</li>
+<li>
+<p><code>all()</code> and <code>map()</code> functions now preserve the order of the array (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="197142181" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/77" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/77/hovercard" href="https://github.com/reactphp/promise/pull/77">#77</a>).</p>
+</li>
+<li>
+<p>Fix circular references when resolving a promise with itself (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="189175515" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/71" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/71/hovercard" href="https://github.com/reactphp/promise/pull/71">#71</a>).</p>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-044-2016-12-19" class="anchor" href="#socket-044-2016-12-19" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.4.4
+
+        <small>
+            (2016-12-19)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.4.4" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature / Fix: <code>ConnectionInterface</code> should extend <code>DuplexStreamInterface</code> + documentation<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="188979236" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/50" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/50/hovercard" href="https://github.com/reactphp/socket/pull/50">#50</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Feature / Fix: Improve test suite and switch to normal stream handler<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="189327106" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/51" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/51/hovercard" href="https://github.com/reactphp/socket/pull/51">#51</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Feature: Add examples<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="188333298" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/49" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/49/hovercard" href="https://github.com/reactphp/socket/pull/49">#49</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-0415-2016-12-02" class="anchor" href="#httpclient-0415-2016-12-02" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.4.15
+
+        <small>
+            (2016-12-02)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.15" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: Add examples <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="186643776" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/69" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/69/hovercard" href="https://github.com/reactphp/http-client/pull/69">#69</a> <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a></li>
+<li>Fix: Ensure checking for 0 length chunk, when we should check for it <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="191326473" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/71" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/71/hovercard" href="https://github.com/reactphp/http-client/pull/71">#71</a> <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a></li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-045-2016-11-13" class="anchor" href="#stream-045-2016-11-13" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 0.4.5
+
+        <small>
+            (2016-11-13)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.4.5" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Support setting read buffer size to <code>null</code> (infinite)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="140515904" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/42" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/42/hovercard" href="https://github.com/reactphp/stream/pull/42">#42</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Fix: Do not emit <code>full-drain</code> event if <code>Buffer</code> is closed during <code>drain</code> event<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="172324369" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/55" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/55/hovercard" href="https://github.com/reactphp/stream/pull/55">#55</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Vastly improved performance by factor of 10x to 20x.<br>
+Raise default buffer sizes to 64 KiB and simplify and improve error handling<br>
+and unneeded function calls.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="172272805" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/53" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/53/hovercard" href="https://github.com/reactphp/stream/pull/53">#53</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="172324369" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/55" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/55/hovercard" href="https://github.com/reactphp/stream/pull/55">#55</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="172327657" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/56" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/56/hovercard" href="https://github.com/reactphp/stream/pull/56">#56</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="http-042-2016-11-09" class="anchor" href="#http-042-2016-11-09" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTP 0.4.2
+
+        <small>
+            (2016-11-09)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.4.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Remove all listeners after emitting error in RequestHeaderParser <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="175987283" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/68" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/68/hovercard" href="https://github.com/reactphp/http/pull/68">#68</a> <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a></li>
+<li>Catch Guzzle parse request errors <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="174901089" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/65" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/65/hovercard" href="https://github.com/reactphp/http/pull/65">#65</a> <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a></li>
+<li>Remove branch-alias definition as per <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="137404090" data-permission-text="Title is private" data-url="https://github.com/reactphp/reactphp/issues/343" data-hovercard-type="issue" data-hovercard-url="/reactphp/reactphp/issues/343/hovercard" href="https://github.com/reactphp/reactphp/issues/343">reactphp/reactphp#343</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="164108691" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/58" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/58/hovercard" href="https://github.com/reactphp/http/pull/58">#58</a> <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a></li>
+<li>Add functional example to ease getting started <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="174846779" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/64" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/64/hovercard" href="https://github.com/reactphp/http/pull/64">#64</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a></li>
+<li>Naming, immutable array manipulation <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="102646873" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/37" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/37/hovercard" href="https://github.com/reactphp/http/pull/37">#37</a> <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/cboden/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cboden">@cboden</a></li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-0414-2016-10-28" class="anchor" href="#httpclient-0414-2016-10-28" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.4.14
+
+        <small>
+            (2016-10-28)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.14" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix: Ensure the first bit of body directly after the headers is emitted into the stream <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="185845038" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/68" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/68/hovercard" href="https://github.com/reactphp/http-client/pull/68">#68</a> <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a></li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-0413-2016-10-19" class="anchor" href="#httpclient-0413-2016-10-19" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.4.13
+
+        <small>
+            (2016-10-19)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.13" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix: Ensure Request emits initial Response data as string <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="183818439" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/66" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/66/hovercard" href="https://github.com/reactphp/http-client/pull/66">#66</a> <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/mmelvin0/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mmelvin0">@mmelvin0</a></li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-0412-2016-10-06" class="anchor" href="#httpclient-0412-2016-10-06" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.4.12
+
+        <small>
+            (2016-10-06)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.12" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix: Changed $stream from DuplexStreamInterface to ReadableStreamInterface in Response constructor <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="178946525" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/63" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/63/hovercard" href="https://github.com/reactphp/http-client/pull/63">#63</a> <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a></li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-0411-2016-09-15" class="anchor" href="#httpclient-0411-2016-09-15" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.4.11
+
+        <small>
+            (2016-09-15)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.11" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Chunked encoding <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a></li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-044-2016-08-22" class="anchor" href="#stream-044-2016-08-22" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 0.4.4
+
+        <small>
+            (2016-08-22)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.4.4" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: Emit <code>error</code> event and close <code>Stream</code> when accessing the underlying<br>
+stream resource fails with a permanent error.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="172138800" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/52" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/52/hovercard" href="https://github.com/reactphp/stream/pull/52">#52</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="138684703" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/40" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/40/hovercard" href="https://github.com/reactphp/stream/pull/40">#40</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="92505502" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/25" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/25/hovercard" href="https://github.com/reactphp/stream/pull/25">#25</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/lysenkobv/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/lysenkobv">@lysenkobv</a>)</li>
+<li>Bug fix: Do not emit empty <code>data</code> event if nothing has been read (stream reached EOF)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="138682317" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/39" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/39/hovercard" href="https://github.com/reactphp/stream/pull/39">#39</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Bug fix: Ignore empty writes to <code>Buffer</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="172136407" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/51" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/51/hovercard" href="https://github.com/reactphp/stream/pull/51">#51</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Add benchmarking script to measure throughput in CI<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="138823476" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/41" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/41/hovercard" href="https://github.com/reactphp/stream/pull/41">#41</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="childprocess-041-2016-08-01" class="anchor" href="#childprocess-041-2016-08-01" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        ChildProcess 0.4.1
+
+        <small>
+            (2016-08-01)
+            <a href="https://github.com/reactphp/child-process/releases/tag/v0.4.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Standalone component</li>
+<li>Test against PHP 7 and HHVM, report test coverage, AppVeyor tests</li>
+<li>Fix: Wait for stdout and stderr to close before watching for process exit<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="111802559" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/18" data-hovercard-type="issue" data-hovercard-url="/reactphp/child-process/issues/18/hovercard" href="https://github.com/reactphp/child-process/issues/18">#18</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/mbonneau/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mbonneau">@mbonneau</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="dns-043-2016-08-01" class="anchor" href="#dns-043-2016-08-01" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        DNS 0.4.3
+
+        <small>
+            (2016-08-01)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Allow for cache adapter injection (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="157938185" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/38" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/38/hovercard" href="https://github.com/reactphp/dns/pull/38">#38</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$factory</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Dns\Resolver\</span><span class="pl-c1">Factory</span>();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$cache</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">MyCustomCacheInstance</span>();</span>
+<span class="pl-s1"><span class="pl-smi">$resolver</span> <span class="pl-k">=</span> <span class="pl-smi">$factory</span><span class="pl-k">-&gt;</span>createCached(<span class="pl-s"><span class="pl-pds">'</span>8.8.8.8<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>, <span class="pl-smi">$cache</span>);</span></pre></div>
+</li>
+<li>
+<p>Feature: Support Promise cancellation (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="137350421" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/35" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/35/hovercard" href="https://github.com/reactphp/dns/pull/35">#35</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> <span class="pl-smi">$resolver</span><span class="pl-k">-&gt;</span>resolve(<span class="pl-s"><span class="pl-pds">'</span>reactphp.org<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$promise</span><span class="pl-k">-&gt;</span>cancel();</span></pre></div>
+</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promise-241-2016-05-03" class="anchor" href="#promise-241-2016-05-03" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Promise 2.4.1
+
+        <small>
+            (2016-05-03)
+            <a href="https://github.com/reactphp/promise/releases/tag/v2.4.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix <code>some()</code> not cancelling pending promises when too much input promises reject (<a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/reactphp/promise/commit/16ff799a3a749dd79faff36c5f3cfc11825daa8b/hovercard" href="https://github.com/reactphp/promise/commit/16ff799a3a749dd79faff36c5f3cfc11825daa8b"><tt>16ff799</tt></a>).</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promise-240-2016-03-31" class="anchor" href="#promise-240-2016-03-31" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Promise 2.4.0
+
+        <small>
+            (2016-03-31)
+            <a href="https://github.com/reactphp/promise/releases/tag/v2.4.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Support foreign thenables in <code>resolve()</code>.<br>
+Any object that provides a <code>then()</code> method is now assimilated to a trusted promise that follows the state of this thenable (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="143505001" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/52" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/52/hovercard" href="https://github.com/reactphp/promise/pull/52">#52</a>).</li>
+<li>Fix <code>some()</code> and <code>any()</code> for input arrays containing not enough items (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="93222181" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/34" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/34/hovercard" href="https://github.com/reactphp/promise/pull/34">#34</a>).</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promise-230-2016-03-24" class="anchor" href="#promise-230-2016-03-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Promise 2.3.0
+
+        <small>
+            (2016-03-24)
+            <a href="https://github.com/reactphp/promise/releases/tag/v2.3.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Allow cancellation of promises returned by functions working on promise collections (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="93280218" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/36" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/36/hovercard" href="https://github.com/reactphp/promise/pull/36">#36</a>).</li>
+<li>Handle <code>\Throwable</code> in the same way as <code>\Exception</code> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="143319091" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/51" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/51/hovercard" href="https://github.com/reactphp/promise/pull/51">#51</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/joshdifabio/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/joshdifabio">@joshdifabio</a>).</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-032-2016-03-24" class="anchor" href="#httpclient-032-2016-03-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.3.2
+
+        <small>
+            (2016-03-24)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.3.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: Broader guzzle/parser version req <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/cboden/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cboden">@cboden</a></li>
+<li>Improvement: Improve forwards compatibility with all supported versions <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a></li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-0410-2016-03-21" class="anchor" href="#httpclient-0410-2016-03-21" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.4.10
+
+        <small>
+            (2016-03-21)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.10" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: Update react/socket-client dependency to all supported versions <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a></li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="datagram-110-2016-03-19" class="anchor" href="#datagram-110-2016-03-19" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Datagram 1.1.0
+
+        <small>
+            (2016-03-19)
+            <a href="https://github.com/reactphp/datagram/releases/tag/v1.1.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Support promise cancellation (cancellation of underlying DNS lookup)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="138159643" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/12" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/12/hovercard" href="https://github.com/reactphp/datagram/pull/12">#12</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Fix: Fix error reporting when trying to create invalid sockets<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="138159383" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/11" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/11/hovercard" href="https://github.com/reactphp/datagram/pull/11">#11</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Improve test suite and update dependencies<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="116929736" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/7" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/7/hovercard" href="https://github.com/reactphp/datagram/pull/7">#7</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="117009593" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/8" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/8/hovercard" href="https://github.com/reactphp/datagram/pull/8">#8</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-049-2016-03-08" class="anchor" href="#httpclient-049-2016-03-08" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.4.9
+
+        <small>
+            (2016-03-08)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.9" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: PHP 7 memory leak, related to PHP bug <a href="https://bugs.php.net/bug.php?id=71737" rel="nofollow">71737</a> <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jmalloc/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmalloc">@jmalloc</a></li>
+<li>Improvement: Clean up all listeners when closing request <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/weichenlin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/weichenlin">@weichenlin</a></li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="eventloop-042-2016-03-08" class="anchor" href="#eventloop-042-2016-03-08" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        EventLoop 0.4.2
+
+        <small>
+            (2016-03-08)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.4.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: No longer error when signals sent to StreamSelectLoop</li>
+<li>Support HHVM and PHP7 (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/ondrejmirtes/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ondrejmirtes">@ondrejmirtes</a>, <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/cebe/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cebe">@cebe</a>)</li>
+<li>Feature: Added support for EventConfig for ExtEventLoop (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/steverhoades/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/steverhoades">@steverhoades</a>)</li>
+<li>Bug fix: Fixed an issue loading loop extension libs via autoloader (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/czarpino/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/czarpino">@czarpino</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promise-121-2016-03-07" class="anchor" href="#promise-121-2016-03-07" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Promise 1.2.1
+
+        <small>
+            (2016-03-07)
+            <a href="https://github.com/reactphp/promise/releases/tag/v1.2.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix <code>DeferredPromise</code> to also implement the <code>CancellablePromiseInterface</code>.</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-043-2016-03-01" class="anchor" href="#socket-043-2016-03-01" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.4.3
+
+        <small>
+            (2016-03-01)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.4.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Suppress errors on stream_socket_accept to prevent PHP from crashing</li>
+<li>Support for PHP7 and HHVM</li>
+<li>Support PHP 5.3 again</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promisetimer-110-2016-02-29" class="anchor" href="#promisetimer-110-2016-02-29" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        PromiseTimer 1.1.0
+
+        <small>
+            (2016-02-29)
+            <a href="https://github.com/reactphp/promise-timer/releases/tag/v1.1.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Support promise cancellation for all timer primitives<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="134415257" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-timer/issues/18" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-timer/pull/18/hovercard" href="https://github.com/reactphp/promise-timer/pull/18">#18</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promise-120-2016-02-27" class="anchor" href="#promise-120-2016-02-27" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Promise 1.2.0
+
+        <small>
+            (2016-02-27)
+            <a href="https://github.com/reactphp/promise/releases/tag/v1.2.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <p>This release makes the API more compatible with 2.0 while preserving full backward compatibility.</p>
+<ul>
+<li>Introduce new CancellablePromiseInterface implemented by all promises.</li>
+<li>Add new .cancel() method (part of the CancellablePromiseInterface).</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promise-222-2016-02-26" class="anchor" href="#promise-222-2016-02-26" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Promise 2.2.2
+
+        <small>
+            (2016-02-26)
+            <a href="https://github.com/reactphp/promise/releases/tag/v2.2.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix cancellation handlers called multiple times (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="136235470" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/47" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/47/hovercard" href="https://github.com/reactphp/promise/pull/47">#47</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>).</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="cache-041-2016-02-25" class="anchor" href="#cache-041-2016-02-25" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Cache 0.4.1
+
+        <small>
+            (2016-02-25)
+            <a href="https://github.com/reactphp/cache/releases/tag/v0.4.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Repository maintenance, split off from main repo, improve test suite and documentation</li>
+<li>First class support for PHP7 and HHVM (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="114936228" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/9" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/9/hovercard" href="https://github.com/reactphp/cache/pull/9">#9</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Adjust compatibility to 5.3 (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="114708360" data-permission-text="Title is private" data-url="https://github.com/reactphp/cache/issues/7" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/cache/pull/7/hovercard" href="https://github.com/reactphp/cache/pull/7">#7</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="dns-042-2016-02-24" class="anchor" href="#dns-042-2016-02-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        DNS 0.4.2
+
+        <small>
+            (2016-02-24)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Repository maintenance, split off from main repo, improve test suite and documentation</li>
+<li>First class support for PHP7 and HHVM (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="118217915" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/34" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/34/hovercard" href="https://github.com/reactphp/dns/pull/34">#34</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Adjust compatibility to 5.3 (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="108736802" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/30" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/30/hovercard" href="https://github.com/reactphp/dns/pull/30">#30</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2015" class="anchor" href="#2015" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2015
+    </h2>
+
+    
+                        <h3>
+        <a id="datagram-101-2015-11-13" class="anchor" href="#datagram-101-2015-11-13" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Datagram 1.0.1
+
+        <small>
+            (2015-11-13)
+            <a href="https://github.com/reactphp/datagram/releases/tag/v1.0.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix: Correct formatting for remote peer address of incoming datagrams when using IPv6<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="116048726" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/6" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/6/hovercard" href="https://github.com/reactphp/datagram/pull/6">#6</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</li>
+<li>Improve test suite for different PHP versions</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-043-2015-10-07" class="anchor" href="#stream-043-2015-10-07" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 0.4.3
+
+        <small>
+            (2015-10-07)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.4.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: Read buffer to 0 fixes error with libevent and large quantity of I/O (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/mbonneau/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mbonneau">@mbonneau</a>)</li>
+<li>Bug fix: No double-write during drain call (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/arnaud-lb/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/arnaud-lb">@arnaud-lb</a>)</li>
+<li>Bug fix: Support HHVM (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Adjust compatibility to 5.3 (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-048-2015-10-05" class="anchor" href="#httpclient-048-2015-10-05" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.4.8
+
+        <small>
+            (2015-10-05)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.8" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: Avoid hiding exceptions thrown in HttpClient\Request error handlers <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/arnaud-lb/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/arnaud-lb">@arnaud-lb</a></li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promisetimer-100-2015-09-29" class="anchor" href="#promisetimer-100-2015-09-29" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        PromiseTimer 1.0.0
+
+        <small>
+            (2015-09-29)
+            <a href="https://github.com/reactphp/promise-timer/releases/tag/v1.0.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>First tagged release</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-047-2015-09-24" class="anchor" href="#httpclient-047-2015-09-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.4.7
+
+        <small>
+            (2015-09-24)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.7" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: Set protocol version on request creation <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a></li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-046-2015-09-20" class="anchor" href="#httpclient-046-2015-09-20" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.4.6
+
+        <small>
+            (2015-09-20)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.6" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: Support explicitly using HTTP/1.1 protocol version <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a></li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-045-2015-08-31" class="anchor" href="#httpclient-045-2015-08-31" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.4.5
+
+        <small>
+            (2015-08-31)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.5" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: Replaced the abandoned guzzle/parser with guzzlehttp/psr7 <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a></li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promise-221-2015-07-03" class="anchor" href="#promise-221-2015-07-03" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Promise 2.2.1
+
+        <small>
+            (2015-07-03)
+            <a href="https://github.com/reactphp/promise/releases/tag/v2.2.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix stack error when resolving a promise in its own fulfillment or rejection handlers.</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promise-110-2015-07-01" class="anchor" href="#promise-110-2015-07-01" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Promise 1.1.0
+
+        <small>
+            (2015-07-01)
+            <a href="https://github.com/reactphp/promise/releases/tag/v1.1.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <p>This release makes the API more compatible with 2.0 while preserving full backward compatibility.</p>
+<ul>
+<li>Add <code>React\Promise\Promise</code> class.</li>
+<li>Move methods of <code>React\Promise\When</code> and <code>React\Promise\Util</code> to functions while keeping the classes as a proxy for BC.</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-044-2015-06-16" class="anchor" href="#httpclient-044-2015-06-16" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.4.4
+
+        <small>
+            (2015-06-16)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.4" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: Emit drain event when the request is ready to receive more data by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/arnaud-lb/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/arnaud-lb">@arnaud-lb</a></li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-043-2015-06-15" class="anchor" href="#httpclient-043-2015-06-15" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.4.3
+
+        <small>
+            (2015-06-15)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: Added support for using auth informations from URL by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/arnaud-lb/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/arnaud-lb">@arnaud-lb</a></li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="http-041-2015-05-21" class="anchor" href="#http-041-2015-05-21" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTP 0.4.1
+
+        <small>
+            (2015-05-21)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.4.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Replaced guzzle/parser with guzzlehttp/psr7 by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/cboden/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cboden">@cboden</a></li>
+<li>FIX Continue Header by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/iannsp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/iannsp">@iannsp</a></li>
+<li>Missing type hint by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/marenzo/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/marenzo">@marenzo</a></li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-042-2015-05-14" class="anchor" href="#httpclient-042-2015-05-14" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.4.2
+
+        <small>
+            (2015-05-14)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: Pass Response object on with data emit by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/dpovshed/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dpovshed">@dpovshed</a></li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2014" class="anchor" href="#2014" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2014
+    </h2>
+
+    
+                        <h3>
+        <a id="promise-220-2014-12-30" class="anchor" href="#promise-220-2014-12-30" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Promise 2.2.0
+
+        <small>
+            (2014-12-30)
+            <a href="https://github.com/reactphp/promise/releases/tag/v2.2.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <p>This release introduces the <a href="https://github.com/reactphp/promise/tree/v2.2.0#extendedpromiseinterface">ExtendedPromiseInterface</a>.</p>
+<p>The ExtendedPromiseInterface extends the PromiseInterface with useful shortcut<br>
+and utility methods which are not part of the Promises/A specification.</p>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-041-2014-11-23" class="anchor" href="#httpclient-041-2014-11-23" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.4.1
+
+        <small>
+            (2014-11-23)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: Use EventEmitterTrait instead of base class by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/cursedcoder/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cursedcoder">@cursedcoder</a></li>
+<li>Improvement: Changed Stream to DuplexStreamInterface in Response::__construct by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/mbonneau/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mbonneau">@mbonneau</a></li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="datagram-100-2014-10-23" class="anchor" href="#datagram-100-2014-10-23" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Datagram 1.0.0
+
+        <small>
+            (2014-10-23)
+            <a href="https://github.com/reactphp/datagram/releases/tag/v1.0.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Initial tagged release</li>
+</ul>
+<blockquote>
+<p>This project has been migrated over from <a href="https://github.com/clue/php-datagram">clue/datagram</a><br>
+which has originally been released in January 2013.<br>
+Upgrading from clue/datagram v0.5.0? Use namespace <code>React\Datagram</code> instead of <code>Datagram</code> and you're ready to go!</p>
+</blockquote>
+
+    <hr>
+    
+                        <h3>
+        <a id="promise-210-2014-10-15" class="anchor" href="#promise-210-2014-10-15" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Promise 2.1.0
+
+        <small>
+            (2014-10-15)
+            <a href="https://github.com/reactphp/promise/releases/tag/v2.1.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <p>Introduce new <a href="https://github.com/reactphp/promise/tree/v2.1.0#cancellablepromiseinterface">CancellablePromiseInterface</a> implemented by all promises.</p>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-042-2014-09-10" class="anchor" href="#stream-042-2014-09-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 0.4.2
+
+        <small>
+            (2014-09-10)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.4.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Added DuplexStreamInterface</li>
+<li>Stream sets stream resources to non-blocking</li>
+<li>Fixed potential race condition in pipe</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="childprocess-030-2014-07-31" class="anchor" href="#childprocess-030-2014-07-31" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        ChildProcess 0.3.0
+
+        <small>
+            (2014-07-31)
+            <a href="https://github.com/reactphp/child-process/releases/tag/v0.3.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <p>Backwards compatibility release for Reach 0.3.x and PHP 5.3 (see <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="35535212" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/4" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/4/hovercard" href="https://github.com/reactphp/child-process/pull/4">#4</a>).</p>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-042-2014-05-25" class="anchor" href="#socket-042-2014-05-25" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.4.2
+
+        <small>
+            (2014-05-25)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.4.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>[Connection] Verify stream is valid resource</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-041-2014-04-13" class="anchor" href="#socket-041-2014-04-13" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.4.1
+
+        <small>
+            (2014-04-13)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.4.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: Check read buffer for data before shutdown signal and end emit (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/artydev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/artydev">@artydev</a>)</li>
+<li>Bug fix: v0.3.4 changes merged for v0.4.1</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="dns-041-2014-04-12" class="anchor" href="#dns-041-2014-04-12" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        DNS 0.4.1
+
+        <small>
+            (2014-04-12)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: Fixed PSR-4 autoload path (@marcj/WyriHaximus)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-041-2014-03-30" class="anchor" href="#stream-041-2014-03-30" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 0.4.1
+
+        <small>
+            (2014-03-30)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.4.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: v0.3.4 changes merged for v0.4.1</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="eventloop-041-2014-02-26" class="anchor" href="#eventloop-041-2014-02-26" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        EventLoop 0.4.1
+
+        <small>
+            (2014-02-26)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.4.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: null timeout in StreamSelectLoop causing 100% CPU usage (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Bug fix: v0.3.4 changes merged for v0.4.1</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-034-2014-02-17" class="anchor" href="#socket-034-2014-02-17" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.3.4
+
+        <small>
+            (2014-02-17)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.3.4" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: Reset socket to non-blocking after shutting down (PHP bug)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-034-2014-02-16" class="anchor" href="#stream-034-2014-02-16" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 0.3.4
+
+        <small>
+            (2014-02-16)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.3.4" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: [Stream] Fixed 100% CPU spike from non-empty write buffer on closed stream</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="eventloop-040-2014-02-02" class="anchor" href="#eventloop-040-2014-02-02" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        EventLoop 0.4.0
+
+        <small>
+            (2014-02-02)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.4.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Added <code>EventLoopInterface::nextTick()</code>, implemented in all event loops (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jmalloc/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmalloc">@jmalloc</a>)</li>
+<li>Feature: Added <code>EventLoopInterface::futureTick()</code>, implemented in all event loops (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jmalloc/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmalloc">@jmalloc</a>)</li>
+<li>Feature: Added <code>ExtEventLoop</code> implementation using pecl/event (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jmalloc/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmalloc">@jmalloc</a>)</li>
+<li>BC break: Bump minimum PHP version to PHP 5.4, remove 5.3 specific hacks</li>
+<li>BC break: New method: <code>EventLoopInterface::nextTick()</code></li>
+<li>BC break: New method: <code>EventLoopInterface::futureTick()</code></li>
+<li>Dependency: Autoloading and filesystem structure now PSR-4 instead of PSR-0</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-040-2014-02-02" class="anchor" href="#stream-040-2014-02-02" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 0.4.0
+
+        <small>
+            (2014-02-02)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.4.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>BC break: Bump minimum PHP version to PHP 5.4, remove 5.3 specific hacks</li>
+<li>BC break: Update to Evenement 2.0</li>
+<li>Dependency: Autoloading and filesystem structure now PSR-4 instead of PSR-0</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-040-2014-02-02" class="anchor" href="#socket-040-2014-02-02" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.4.0
+
+        <small>
+            (2014-02-02)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.4.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>BC break: Bump minimum PHP version to PHP 5.4, remove 5.3 specific hacks</li>
+<li>BC break: Update to React/Promise 2.0</li>
+<li>BC break: Update to Evenement 2.0</li>
+<li>Dependency: Autoloading and filesystem structure now PSR-4 instead of PSR-0</li>
+<li>Bump React dependencies to v0.4</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-040-2014-02-02" class="anchor" href="#httpclient-040-2014-02-02" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.4.0
+
+        <small>
+            (2014-02-02)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>BC break: Drop unused <code>Response::getBody()</code></li>
+<li>BC break: Bump minimum PHP version to PHP 5.4, remove 5.3 specific hacks</li>
+<li>BC break: Remove <code>$loop</code> argument from <code>HttpClient</code>: <code>Client</code>, <code>Request</code>, <code>Response</code></li>
+<li>BC break: Update to React/Promise 2.0</li>
+<li>Dependency: Autoloading and filesystem structure now PSR-4 instead of PSR-0</li>
+<li>Bump React dependencies to v0.4</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="http-040-2014-02-02" class="anchor" href="#http-040-2014-02-02" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTP 0.4.0
+
+        <small>
+            (2014-02-02)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.4.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>BC break: Bump minimum PHP version to PHP 5.4, remove 5.3 specific hacks</li>
+<li>BC break: Update to React/Promise 2.0</li>
+<li>BC break: Update to Evenement 2.0</li>
+<li>Dependency: Autoloading and filesystem structure now PSR-4 instead of PSR-0</li>
+<li>Bump React dependencies to v0.4</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="dns-040-2014-02-02" class="anchor" href="#dns-040-2014-02-02" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        DNS 0.4.0
+
+        <small>
+            (2014-02-02)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>BC break: Bump minimum PHP version to PHP 5.4, remove 5.3 specific hacks</li>
+<li>BC break: Update to React/Promise 2.0</li>
+<li>Bug fix: Properly resolve CNAME aliases</li>
+<li>Dependency: Autoloading and filesystem structure now PSR-4 instead of PSR-0</li>
+<li>Bump React dependencies to v0.4</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="childprocess-040-2014-02-02" class="anchor" href="#childprocess-040-2014-02-02" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        ChildProcess 0.4.0
+
+        <small>
+            (2014-02-02)
+            <a href="https://github.com/reactphp/child-process/releases/tag/v0.4.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Added ChildProcess to run async child processes within the event loop (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jmikola/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmikola">@jmikola</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="cache-040-2014-02-02" class="anchor" href="#cache-040-2014-02-02" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Cache 0.4.0
+
+        <small>
+            (2014-02-02)
+            <a href="https://github.com/reactphp/cache/releases/tag/v0.4.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>BC break: Bump minimum PHP version to PHP 5.4, remove 5.3 specific hacks</li>
+<li>BC break: Update to React/Promise 2.0</li>
+<li>Dependency: Autoloading and filesystem structure now PSR-4 instead of PSR-0</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2013" class="anchor" href="#2013" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2013
+    </h2>
+
+    
+                        <h3>
+        <a id="promise-200-2013-12-10" class="anchor" href="#promise-200-2013-12-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Promise 2.0.0
+
+        <small>
+            (2013-12-10)
+            <a href="https://github.com/reactphp/promise/releases/tag/v2.0.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <p>New major release. The goal was to streamline the API and to make it more compliant with other promise libraries and especially with the new upcoming <a href="https://github.com/domenic/promises-unwrapping/">ES6 promises specification</a>.</p>
+<ul>
+<li>Add standalone Promise class.</li>
+<li>Add new React\Promise\race() function.</li>
+<li>BC break: Bump minimum PHP version to PHP 5.4.</li>
+<li>BC break: Remove ResolverInterface and PromiseInterface from Deferred.</li>
+<li>BC break: Change signature of PromiseInterface.</li>
+<li>BC break: Remove When and Util classes and move static methods to functions.</li>
+<li>BC break: FulfilledPromise and RejectedPromise now throw an exception when initialized with a promise instead of a value/reason.</li>
+<li>BC break: React\Promise\Deferred::resolve() and React\Promise\Deferred::reject() no longer return a promise.</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="eventloop-034-2013-07-21" class="anchor" href="#eventloop-034-2013-07-21" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        EventLoop 0.3.4
+
+        <small>
+            (2013-07-21)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.3.4" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: Changed StreamSelectLoop to use non-blocking behavior on tick() (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/astephens25/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/astephens25">@astephens25</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-033-2013-07-09" class="anchor" href="#stream-033-2013-07-09" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 0.3.3
+
+        <small>
+            (2013-07-09)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.3.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: [Stream] Correctly detect closed connections</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-033-2013-07-08" class="anchor" href="#socket-033-2013-07-08" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.3.3
+
+        <small>
+            (2013-07-08)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.3.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="eventloop-033-2013-07-08" class="anchor" href="#eventloop-033-2013-07-08" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        EventLoop 0.3.3
+
+        <small>
+            (2013-07-08)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.3.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: No error on removing non-existent streams (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Bug fix: Do not silently remove feof listeners in <code>LibEvLoop</code></li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-032-2013-05-10" class="anchor" href="#stream-032-2013-05-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 0.3.2
+
+        <small>
+            (2013-05-10)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.3.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: [Stream] Make sure CompositeStream is closed properly</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="dns-032-2013-04-27" class="anchor" href="#dns-032-2013-04-27" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        DNS 0.3.2
+
+        <small>
+            (2013-04-27)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.3.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Support default port for IPv6 addresses (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-032-2013-04-26" class="anchor" href="#socket-032-2013-04-26" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.3.2
+
+        <small>
+            (2013-04-26)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.3.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="cache-032-2013-04-24" class="anchor" href="#cache-032-2013-04-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Cache 0.3.2
+
+        <small>
+            (2013-04-24)
+            <a href="https://github.com/reactphp/cache/releases/tag/v0.3.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-031-2013-04-21" class="anchor" href="#stream-031-2013-04-21" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 0.3.1
+
+        <small>
+            (2013-04-21)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.3.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: [Stream] Allow any <code>ReadableStreamInterface</code> on <code>BufferedSink::createPromise()</code></li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-031-2013-04-21" class="anchor" href="#httpclient-031-2013-04-21" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.3.1
+
+        <small>
+            (2013-04-21)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.3.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: Correct requirement for socket-client</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-031-2013-04-20" class="anchor" href="#socket-031-2013-04-20" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.3.1
+
+        <small>
+            (2013-04-20)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.3.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Support binding to IPv6 addresses (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-030-2013-04-14" class="anchor" href="#httpclient-030-2013-04-14" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.3.0
+
+        <small>
+            (2013-04-14)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.3.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>BC break: Socket connection handling moved to new SocketClient component</li>
+<li>Bump React dependencies to v0.3</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-030-2013-04-14" class="anchor" href="#stream-030-2013-04-14" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 0.3.0
+
+        <small>
+            (2013-04-14)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.3.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: [Stream] Factory method for BufferedSink</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promise-104-2013-04-03" class="anchor" href="#promise-104-2013-04-03" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Promise 1.0.4
+
+        <small>
+            (2013-04-03)
+            <a href="https://github.com/reactphp/promise/releases/tag/v1.0.4" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Trigger PHP errors when invalid callback is passed.</li>
+<li>Fully resolve rejection value before calling rejection handler.</li>
+<li>Add <code>When::lazy()</code> to create lazy promises which will be initialized once a consumer calls the <code>then()</code> method.</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="http-030-2013-02-24" class="anchor" href="#http-030-2013-02-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTP 0.3.0
+
+        <small>
+            (2013-02-24)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.3.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bump React dependencies to v0.3</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-030-2013-01-21" class="anchor" href="#socket-030-2013-01-21" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.3.0
+
+        <small>
+            (2013-01-21)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.3.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bump React dependencies to v0.3</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="dns-030-2013-01-20" class="anchor" href="#dns-030-2013-01-20" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        DNS 0.3.0
+
+        <small>
+            (2013-01-20)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.3.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bump React dependencies to v0.3</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="cache-030-2013-01-20" class="anchor" href="#cache-030-2013-01-20" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Cache 0.3.0
+
+        <small>
+            (2013-01-20)
+            <a href="https://github.com/reactphp/cache/releases/tag/v0.3.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="eventloop-030-2013-01-14" class="anchor" href="#eventloop-030-2013-01-14" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        EventLoop 0.3.0
+
+        <small>
+            (2013-01-14)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.3.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>BC break: New timers API (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/nrk/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nrk">@nrk</a>)</li>
+<li>BC break: Remove check on return value from stream callbacks (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/nrk/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nrk">@nrk</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="eventloop-027-2013-01-05" class="anchor" href="#eventloop-027-2013-01-05" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        EventLoop 0.2.7
+
+        <small>
+            (2013-01-05)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.2.7" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: Fix libevent timers with PHP 5.3</li>
+<li>Bug fix: Fix libevent timer cancellation (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/nrk/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nrk">@nrk</a>)</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2012" class="anchor" href="#2012" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2012
+    </h2>
+
+    
+                        <h3>
+        <a id="httpclient-026-2012-12-26" class="anchor" href="#httpclient-026-2012-12-26" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.2.6
+
+        <small>
+            (2012-12-26)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.2.6" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="dns-026-2012-12-26" class="anchor" href="#dns-026-2012-12-26" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        DNS 0.2.6
+
+        <small>
+            (2012-12-26)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.2.6" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: New cache component, used by DNS</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="eventloop-026-2012-12-26" class="anchor" href="#eventloop-026-2012-12-26" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        EventLoop 0.2.6
+
+        <small>
+            (2012-12-26)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.2.6" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: Plug memory issue in libevent timers (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/cameronjacobson/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cameronjacobson">@cameronjacobson</a>)</li>
+<li>Bug fix: Correctly pause LibEvLoop on stop()</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="http-026-2012-12-26" class="anchor" href="#http-026-2012-12-26" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTP 0.2.6
+
+        <small>
+            (2012-12-26)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.2.6" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: Emit end event when Response closes (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/beaucollins/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/beaucollins">@beaucollins</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="cache-026-2012-12-24" class="anchor" href="#cache-026-2012-12-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Cache 0.2.6
+
+        <small>
+            (2012-12-24)
+            <a href="https://github.com/reactphp/cache/releases/tag/v0.2.6" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: New cache component, used by DNS</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-026-2012-12-14" class="anchor" href="#stream-026-2012-12-14" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 0.2.6
+
+        <small>
+            (2012-12-14)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.2.6" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-026-2012-12-14" class="anchor" href="#socket-026-2012-12-14" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.2.6
+
+        <small>
+            (2012-12-14)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.2.6" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-025-2012-11-26" class="anchor" href="#httpclient-025-2012-11-26" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.2.5
+
+        <small>
+            (2012-11-26)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.2.5" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Use a promise-based API internally</li>
+<li>Bug fix: Use DNS resolver correctly</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="dns-025-2012-11-19" class="anchor" href="#dns-025-2012-11-19" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        DNS 0.2.5
+
+        <small>
+            (2012-11-19)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.2.5" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-025-2012-11-19" class="anchor" href="#stream-025-2012-11-19" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 0.2.5
+
+        <small>
+            (2012-11-19)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.2.5" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Make BufferedSink trigger progress events on the promise (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-024-2012-11-18" class="anchor" href="#stream-024-2012-11-18" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 0.2.4
+
+        <small>
+            (2012-11-18)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.2.4" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Added ThroughStream, CompositeStream, ReadableStream and WritableStream</li>
+<li>Feature: Added BufferedSink</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promise-103-2012-11-17" class="anchor" href="#promise-103-2012-11-17" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Promise 1.0.3
+
+        <small>
+            (2012-11-17)
+            <a href="https://github.com/reactphp/promise/releases/tag/v1.0.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Add <code>PromisorInterface</code> for objects that have a <code>promise()</code> method.</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="dns-024-2012-11-17" class="anchor" href="#dns-024-2012-11-17" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        DNS 0.2.4
+
+        <small>
+            (2012-11-17)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.2.4" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Change to promise-based API (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promise-102-2012-11-14" class="anchor" href="#promise-102-2012-11-14" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Promise 1.0.2
+
+        <small>
+            (2012-11-14)
+            <a href="https://github.com/reactphp/promise/releases/tag/v1.0.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix bug in <code>When::any()</code> not correctly unwrapping to a single result value</li>
+<li><code>$promiseOrValue</code> argument of <code>When::resolve()</code> and <code>When::reject()</code> is now optional</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promise-101-2012-11-13" class="anchor" href="#promise-101-2012-11-13" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Promise 1.0.1
+
+        <small>
+            (2012-11-13)
+            <a href="https://github.com/reactphp/promise/releases/tag/v1.0.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Prevent deep recursion which was reaching xdebug.max_nesting_level default of 100</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="eventloop-023-2012-11-12" class="anchor" href="#eventloop-023-2012-11-12" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        EventLoop 0.2.3
+
+        <small>
+            (2012-11-12)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.2.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: LibEvLoop, integration of <code>php-libev</code></li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="http-023-2012-11-10" class="anchor" href="#http-023-2012-11-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTP 0.2.3
+
+        <small>
+            (2012-11-10)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.2.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: Forward drain events from HTTP response (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/cs278/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cs278">@cs278</a>)</li>
+<li>Dependency: Updated guzzle deps to <code>3.0.*</code></li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="promise-100-2012-11-07" class="anchor" href="#promise-100-2012-11-07" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Promise 1.0.0
+
+        <small>
+            (2012-11-07)
+            <a href="https://github.com/reactphp/promise/releases/tag/v1.0.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>First tagged release</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-023-2012-11-05" class="anchor" href="#stream-023-2012-11-05" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 0.2.3
+
+        <small>
+            (2012-11-05)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.2.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-023-2012-11-05" class="anchor" href="#socket-023-2012-11-05" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.2.3
+
+        <small>
+            (2012-11-05)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.2.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-023-2012-11-05" class="anchor" href="#httpclient-023-2012-11-05" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.2.3
+
+        <small>
+            (2012-11-05)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.2.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="httpclient-022-2012-10-28" class="anchor" href="#httpclient-022-2012-10-28" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTPClient 0.2.2
+
+        <small>
+            (2012-10-28)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.2.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: HTTP client (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/arnaud-lb/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/arnaud-lb">@arnaud-lb</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="http-022-2012-10-28" class="anchor" href="#http-022-2012-10-28" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTP 0.2.2
+
+        <small>
+            (2012-10-28)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.2.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-022-2012-10-28" class="anchor" href="#stream-022-2012-10-28" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 0.2.2
+
+        <small>
+            (2012-10-28)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.2.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="dns-023-2012-10-24" class="anchor" href="#dns-023-2012-10-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        DNS 0.2.3
+
+        <small>
+            (2012-10-24)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.2.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="dns-022-2012-10-24" class="anchor" href="#dns-022-2012-10-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        DNS 0.2.2
+
+        <small>
+            (2012-10-24)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.2.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: DNS executor timeout handling (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/arnaud-lb/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/arnaud-lb">@arnaud-lb</a>)</li>
+<li>Feature: DNS retry executor (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/arnaud-lb/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/arnaud-lb">@arnaud-lb</a>)</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-021-2012-10-13" class="anchor" href="#stream-021-2012-10-13" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 0.2.1
+
+        <small>
+            (2012-10-13)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.2.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: Check for EOF in <code>Buffer::write()</code></li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="http-021-2012-10-02" class="anchor" href="#http-021-2012-10-02" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTP 0.2.1
+
+        <small>
+            (2012-10-02)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.2.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Support HTTP 1.1 continue</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="dns-021-2012-09-24" class="anchor" href="#dns-021-2012-09-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        DNS 0.2.1
+
+        <small>
+            (2012-09-24)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.2.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Minor adjustments to DNS parser</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-020-2012-09-10" class="anchor" href="#stream-020-2012-09-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 0.2.0
+
+        <small>
+            (2012-09-10)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.2.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="dns-020-2012-09-10" class="anchor" href="#dns-020-2012-09-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        DNS 0.2.0
+
+        <small>
+            (2012-09-10)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.2.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: DNS resolver</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-020-2012-09-10" class="anchor" href="#socket-020-2012-09-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.2.0
+
+        <small>
+            (2012-09-10)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.2.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bump React dependencies to v0.2</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="http-020-2012-09-10" class="anchor" href="#http-020-2012-09-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTP 0.2.0
+
+        <small>
+            (2012-09-10)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.2.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bump React dependencies to v0.2</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="eventloop-020-2012-09-10" class="anchor" href="#eventloop-020-2012-09-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        EventLoop 0.2.0
+
+        <small>
+            (2012-09-10)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.2.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-011-2012-07-12" class="anchor" href="#stream-011-2012-07-12" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 0.1.1
+
+        <small>
+            (2012-07-12)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.1.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: Testing and functional against PHP &gt;= 5.3.3 and &lt;= 5.3.8</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-011-2012-07-12" class="anchor" href="#socket-011-2012-07-12" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.1.1
+
+        <small>
+            (2012-07-12)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.1.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="http-011-2012-07-12" class="anchor" href="#http-011-2012-07-12" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTP 0.1.1
+
+        <small>
+            (2012-07-12)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.1.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="eventloop-011-2012-07-12" class="anchor" href="#eventloop-011-2012-07-12" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        EventLoop 0.1.1
+
+        <small>
+            (2012-07-12)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.1.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="eventloop-010-2012-07-11" class="anchor" href="#eventloop-010-2012-07-11" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        EventLoop 0.1.0
+
+        <small>
+            (2012-07-11)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.1.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>First tagged release</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="stream-010-2012-07-11" class="anchor" href="#stream-010-2012-07-11" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Stream 0.1.0
+
+        <small>
+            (2012-07-11)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.1.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>First tagged release</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="socket-010-2012-07-11" class="anchor" href="#socket-010-2012-07-11" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        Socket 0.1.0
+
+        <small>
+            (2012-07-11)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.1.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>First tagged release</li>
+</ul>
+
+    <hr>
+    
+                        <h3>
+        <a id="http-010-2012-07-11" class="anchor" href="#http-010-2012-07-11" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        HTTP 0.1.0
+
+        <small>
+            (2012-07-11)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.1.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>First tagged release</li>
+</ul>
+
+    <hr>
+    
+            <ul class="links">
+                <li>
+                    <a href="https://reactphp.org/changelog.atom">
+                        <i class="icon-feed" aria-hidden="true"></i>
+                        Subscribe to the Changelog feed
+                    </a>
+                </li>
+            </ul>
+        </div>
+    </div>
+
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/child-process/changelog.html b/child-process/changelog.html
new file mode 100644
index 000000000..af7008ba7
--- /dev/null
+++ b/child-process/changelog.html
@@ -0,0 +1,739 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>ChildProcess: Changelog - ReactPHP</title>
+
+        <meta name="description" content="Event-driven library for executing child processes with ReactPHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+        <link href="https://github.com/reactphp/child-process/releases.atom" type="application/atom+xml" rel="alternate" title="ChildProcess Changelog">
+    </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                    <h1>ChildProcess Changelog</h1>
+
+    <ul class="toc">
+            <li><a href="#2019" title="Jump to year 2019 (2 releases)">2019</a></li>
+            <li><a href="#2018" title="Jump to year 2018 (1 release)">2018</a></li>
+            <li><a href="#2017" title="Jump to year 2017 (4 releases)">2017</a></li>
+            <li><a href="#2016" title="Jump to year 2016 (1 release)">2016</a></li>
+            <li><a href="#2014" title="Jump to year 2014 (2 releases)">2014</a></li>
+        </ul>
+
+    <h2>
+        <a id="2019" class="anchor" href="#2019" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2019
+    </h2>
+
+    
+            <h3>
+        <a id="061-2019-02-15" class="anchor" href="#061-2019-02-15" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.6.1
+
+        <small>
+            (2019-02-15)
+            <a href="https://github.com/reactphp/child-process/releases/tag/v0.6.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature / Fix: Improve error reporting when spawning child process fails.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="409917419" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/73" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/73/hovercard" href="https://github.com/reactphp/child-process/pull/73">#73</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="060-2019-01-14" class="anchor" href="#060-2019-01-14" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.6.0
+
+        <small>
+            (2019-01-14)
+            <a href="https://github.com/reactphp/child-process/releases/tag/v0.6.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <p>A major feature release with some minor API improvements!<br>
+This project now has limited Windows support and supports passing custom pipes<br>
+and file descriptors to the child process.</p>
+<p>This update involves a few minor BC breaks. We've tried hard to avoid BC breaks<br>
+where possible and minimize impact otherwise. We expect that most consumers of<br>
+this package will actually not be affected by any BC breaks, see below for more<br>
+details.</p>
+<ul>
+<li>
+<p>Feature / BC break: Support passing custom pipes and file descriptors to child process,<br>
+expose all standard I/O pipes in an array and remove unused Windows-only options.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="383999912" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/62" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/62/hovercard" href="https://github.com/reactphp/child-process/pull/62">#62</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="386159810" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/64" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/64/hovercard" href="https://github.com/reactphp/child-process/pull/64">#64</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="386584758" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/65" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/65/hovercard" href="https://github.com/reactphp/child-process/pull/65">#65</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<blockquote>
+<p>BC note: The optional <code>$options</code> parameter in the <code>Process</code> constructor<br>
+has been removed and a new <code>$fds</code> parameter has been added instead. The<br>
+previous <code>$options</code> parameter was Windows-only, available options were not<br>
+documented or referenced anywhere else in this library, so its actual<br>
+impact is expected to be relatively small. See the documentation and the<br>
+following changelog entry if you're looking for Windows support.</p>
+</blockquote>
+</li>
+<li>
+<p>Feature: Support spawning child process on Windows without process I/O pipes.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="397884467" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/67" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/67/hovercard" href="https://github.com/reactphp/child-process/pull/67">#67</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature / BC break: Improve sigchild compatibility and support explicit configuration.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="384374501" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/63" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/63/hovercard" href="https://github.com/reactphp/child-process/pull/63">#63</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> advanced: not recommended by default</span></span>
+<span class="pl-s1"><span class="pl-c1">Process</span><span class="pl-k">::</span>setSigchildEnabled(<span class="pl-c1">true</span>);</span></pre></div>
+<blockquote>
+<p>BC note: The old public sigchild methods have been removed, but its<br>
+practical impact is believed to be relatively small due to the automatic detection.</p>
+</blockquote>
+</li>
+<li>
+<p>Improve performance by prefixing all global functions calls with \ to skip<br>
+the look up and resolve process and go straight to the global function.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="398402393" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/68" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/68/hovercard" href="https://github.com/reactphp/child-process/pull/68">#68</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+<li>
+<p>Minor documentation improvements and docblock updates.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="331323060" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/59" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/59/hovercard" href="https://github.com/reactphp/child-process/pull/59">#59</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/iamluc/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/iamluc">@iamluc</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="398553768" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/69" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/69/hovercard" href="https://github.com/reactphp/child-process/pull/69">#69</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/CharlotteDunois/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/CharlotteDunois">@CharlotteDunois</a>)</p>
+</li>
+<li>
+<p>Improve test suite to test against PHP7.2 and PHP 7.3, improve HHVM compatibility,<br>
+add forward compatibility with PHPUnit 7 and run tests on Windows via Travis CI.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="397396699" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/66" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/66/hovercard" href="https://github.com/reactphp/child-process/pull/66">#66</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="398659551" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/71" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/71/hovercard" href="https://github.com/reactphp/child-process/pull/71">#71</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2018" class="anchor" href="#2018" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2018
+    </h2>
+
+    
+            <h3>
+        <a id="052-2018-01-18" class="anchor" href="#052-2018-01-18" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.5.2
+
+        <small>
+            (2018-01-18)
+            <a href="https://github.com/reactphp/child-process/releases/tag/v0.5.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Detect "exit" immediately if last process pipe is closed<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="288330568" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/58" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/58/hovercard" href="https://github.com/reactphp/child-process/pull/58">#58</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>This introduces a simple check to see if the program is already known to be<br>
+closed when the last process pipe is closed instead of relying on a periodic<br>
+timer. This simple change improves "exit" detection significantly for most<br>
+programs and does not cause a noticeable penalty for more advanced use cases.</p>
+</li>
+<li>
+<p>Fix forward compatibility with upcoming EventLoop releases<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="284172026" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/56" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/56/hovercard" href="https://github.com/reactphp/child-process/pull/56">#56</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2017" class="anchor" href="#2017" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2017
+    </h2>
+
+    
+            <h3>
+        <a id="051-2017-12-22" class="anchor" href="#051-2017-12-22" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.5.1
+
+        <small>
+            (2017-12-22)
+            <a href="https://github.com/reactphp/child-process/releases/tag/v0.5.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Fix: Update Stream dependency to work around SEGFAULT in legacy PHP &lt; 5.4.28<br>
+and PHP &lt; 5.5.12<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="251245170" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/50" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/50/hovercard" href="https://github.com/reactphp/child-process/pull/50">#50</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="283899379" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/52" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/52/hovercard" href="https://github.com/reactphp/child-process/pull/52">#52</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by simplifying test bootstrapping logic via Composer and<br>
+adding forward compatibility with PHPUnit 6<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="283907689" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/53" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/53/hovercard" href="https://github.com/reactphp/child-process/pull/53">#53</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="283910315" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/54" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/54/hovercard" href="https://github.com/reactphp/child-process/pull/54">#54</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="283921030" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/55" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/55/hovercard" href="https://github.com/reactphp/child-process/pull/55">#55</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="050-2017-08-15" class="anchor" href="#050-2017-08-15" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.5.0
+
+        <small>
+            (2017-08-15)
+            <a href="https://github.com/reactphp/child-process/releases/tag/v0.5.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Forward compatibility: react/event-loop 1.0 and 0.5, react/stream 0.7.2 and 1.0, and Événement 3.0<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="235132429" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/38" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/38/hovercard" href="https://github.com/reactphp/child-process/pull/38">#38</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248199759" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/44" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/44/hovercard" href="https://github.com/reactphp/child-process/pull/44">#44</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>, and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248655903" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/46" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/46/hovercard" href="https://github.com/reactphp/child-process/pull/46">#46</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Windows compatibility: Documentate that windows isn't supported in 0.5 unless used from within WSL<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="241482597" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/41" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/41/hovercard" href="https://github.com/reactphp/child-process/pull/41">#41</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="249126978" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/47" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/47/hovercard" href="https://github.com/reactphp/child-process/pull/47">#47</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</li>
+<li>Documentation: Termination examples<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="246529657" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/42" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/42/hovercard" href="https://github.com/reactphp/child-process/pull/42">#42</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>BC: Throw LogicException in Process instanciating when on Windows or when proc_open is missing (was <code>RuntimeException</code>)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="249820539" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/49" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/49/hovercard" href="https://github.com/reactphp/child-process/pull/49">#49</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/mdrost/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mdrost">@mdrost</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="043-2017-03-14" class="anchor" href="#043-2017-03-14" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.3
+
+        <small>
+            (2017-03-14)
+            <a href="https://github.com/reactphp/child-process/releases/tag/v0.4.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Ease getting started by improving documentation and adding examples<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="213597687" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/33" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/33/hovercard" href="https://github.com/reactphp/child-process/pull/33">#33</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="213617503" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/34" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/34/hovercard" href="https://github.com/reactphp/child-process/pull/34">#34</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>First class support for PHP 5.3 through PHP 7.1 and HHVM<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="213316546" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/29" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/29/hovercard" href="https://github.com/reactphp/child-process/pull/29">#29</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="213568542" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/32" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/32/hovercard" href="https://github.com/reactphp/child-process/pull/32">#32</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="042-2017-03-10" class="anchor" href="#042-2017-03-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.2
+
+        <small>
+            (2017-03-10)
+            <a href="https://github.com/reactphp/child-process/releases/tag/v0.4.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Forward compatibility with Stream v0.5<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="212772558" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/26" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/26/hovercard" href="https://github.com/reactphp/child-process/pull/26">#26</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by removing AppVeyor and adding PHPUnit to <code>require-dev</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="213297447" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/27" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/27/hovercard" href="https://github.com/reactphp/child-process/pull/27">#27</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="213315401" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/28" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/28/hovercard" href="https://github.com/reactphp/child-process/pull/28">#28</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2016" class="anchor" href="#2016" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2016
+    </h2>
+
+    
+            <h3>
+        <a id="041-2016-08-01" class="anchor" href="#041-2016-08-01" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.1
+
+        <small>
+            (2016-08-01)
+            <a href="https://github.com/reactphp/child-process/releases/tag/v0.4.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Standalone component</li>
+<li>Test against PHP 7 and HHVM, report test coverage, AppVeyor tests</li>
+<li>Fix: Wait for stdout and stderr to close before watching for process exit<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="111802559" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/18" data-hovercard-type="issue" data-hovercard-url="/reactphp/child-process/issues/18/hovercard" href="https://github.com/reactphp/child-process/issues/18">#18</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/mbonneau/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mbonneau">@mbonneau</a>)</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2014" class="anchor" href="#2014" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2014
+    </h2>
+
+    
+            <h3>
+        <a id="030-2014-07-31" class="anchor" href="#030-2014-07-31" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.3.0
+
+        <small>
+            (2014-07-31)
+            <a href="https://github.com/reactphp/child-process/releases/tag/v0.3.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <p>Backwards compatibility release for Reach 0.3.x and PHP 5.3 (see <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="35535212" data-permission-text="Title is private" data-url="https://github.com/reactphp/child-process/issues/4" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/child-process/pull/4/hovercard" href="https://github.com/reactphp/child-process/pull/4">#4</a>).</p>
+
+    <hr>
+    
+            <h3>
+        <a id="040-2014-02-02" class="anchor" href="#040-2014-02-02" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.0
+
+        <small>
+            (2014-02-02)
+            <a href="https://github.com/reactphp/child-process/releases/tag/v0.4.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Added ChildProcess to run async child processes within the event loop (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jmikola/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmikola">@jmikola</a>)</li>
+</ul>
+
+    <hr>
+    
+    <ul class="links">
+        <li>
+            <a href="https://github.com/reactphp/child-process/releases.atom">
+                <i class="icon-feed" aria-hidden="true"></i>
+                Subscribe to the Changelog feed
+            </a>
+        </li>
+    </ul>
+                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../child-process/">ChildProcess</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v0.6.1
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/child-process#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/child-process/tree/v0.6.0#readme" class="version-selector__version">
+                                                    v0.6.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/child-process/tree/v0.5.2#readme" class="version-selector__version">
+                                                    v0.5.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/child-process/tree/v0.5.1#readme" class="version-selector__version">
+                                                    v0.5.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/child-process/tree/v0.5.0#readme" class="version-selector__version">
+                                                    v0.5.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/child-process/tree/v0.4.3#readme" class="version-selector__version">
+                                                    v0.4.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/child-process/tree/v0.4.2#readme" class="version-selector__version">
+                                                    v0.4.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/child-process/tree/v0.4.1#readme" class="version-selector__version">
+                                                    v0.4.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/child-process/tree/v0.3.0#readme" class="version-selector__version">
+                                                    v0.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/child-process/tree/v0.4.0#readme" class="version-selector__version">
+                                                    v0.4.0
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/child-process">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../child-process/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../child-process/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/child-process:^0.6.1</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (55 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (39 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jmikola">
+                                    <img src="https://avatars3.githubusercontent.com/u/244663?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/244663?v=4&amp;s=80 2x" alt="jmikola" title="jmikola (20 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cboden">
+                                    <img src="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=80 2x" alt="cboden" title="cboden (17 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (8 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/igorw">
+                                    <img src="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=80 2x" alt="igorw" title="igorw (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/staabm">
+                                    <img src="https://avatars2.githubusercontent.com/u/120441?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/120441?v=4&amp;s=80 2x" alt="staabm" title="staabm (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/CharlotteDunois">
+                                    <img src="https://avatars0.githubusercontent.com/u/4529744?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/4529744?v=4&amp;s=80 2x" alt="CharlotteDunois" title="CharlotteDunois (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/iamluc">
+                                    <img src="https://avatars1.githubusercontent.com/u/1539731?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/1539731?v=4&amp;s=80 2x" alt="iamluc" title="iamluc (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/mdrost">
+                                    <img src="https://avatars1.githubusercontent.com/u/4083346?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/4083346?v=4&amp;s=80 2x" alt="mdrost" title="mdrost (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/e3betht">
+                                    <img src="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=80 2x" alt="e3betht" title="e3betht (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/mbonneau">
+                                    <img src="https://avatars3.githubusercontent.com/u/748287?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/748287?v=4&amp;s=80 2x" alt="mbonneau" title="mbonneau (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-child-process-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-child-process-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,1 6,1 12,1 18,1 24,1 30,1 36,1 42,1 48,1 54,1 60,1 66,1 72,1 78,1 84,1 90,1 96,1 102,1 108,1 114,1 120,1 126,1 132,1 138,1 144,1 150,1 156,2 162,2 168,1 174,1 180,1 186,1 192,1 198,1 204,1 210,1 216,1 222,1 228,1 234,1 240,1 246,1 252,1 258,1 264,1 270,1 276,1 282,1 288,1 294,1 300,1 306,1" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-child-process-participation-gradient);mask:url(#reactphp-child-process-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/child-process/index.html b/child-process/index.html
new file mode 100644
index 000000000..acb93472f
--- /dev/null
+++ b/child-process/index.html
@@ -0,0 +1,890 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>ChildProcess: 
+Child Process - ReactPHP</title>
+
+        <meta name="description" content="Event-driven library for executing child processes with ReactPHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+            </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                                    <h1>ChildProcess</h1>
+
+                    
+<p><a href="https://travis-ci.org/reactphp/child-process" rel="nofollow"><img src="https://camo.githubusercontent.com/f0570001fa948997b207f7ed0e4418b5f861d500/68747470733a2f2f7472617669732d63692e6f72672f72656163747068702f6368696c642d70726f636573732e7376673f6272616e63683d6d6173746572" alt="Build Status" data-canonical-src="https://travis-ci.org/reactphp/child-process.svg?branch=master" style="max-width:100%;"></a></p>
+<p>Event-driven library for executing child processes with
+<a href="https://reactphp.org/" rel="nofollow">ReactPHP</a>.</p>
+<p>This library integrates <a href="http://php.net/manual/en/book.exec.php" rel="nofollow">Program Execution</a>
+with the <a href="../event-loop/">EventLoop</a>.
+Child processes launched may be signaled and will emit an
+<code>exit</code> event upon termination.
+Additionally, process I/O streams (i.e. STDIN, STDOUT, STDERR) are exposed
+as <a href="../stream/">Streams</a>.</p>
+<p><strong>Table of contents</strong></p>
+<ul>
+<li><a href="#quickstart-example">Quickstart example</a></li>
+<li>
+<a href="#process">Process</a>
+<ul>
+<li><a href="#stream-properties">Stream Properties</a></li>
+<li><a href="#command">Command</a></li>
+<li><a href="#termination">Termination</a></li>
+<li><a href="#custom-pipes">Custom pipes</a></li>
+<li><a href="#sigchild-compatibility">Sigchild Compatibility</a></li>
+<li><a href="#windows-compatibility">Windows Compatibility</a></li>
+</ul>
+</li>
+<li><a href="#install">Install</a></li>
+<li><a href="#tests">Tests</a></li>
+<li><a href="#license">License</a></li>
+</ul>
+<h2>
+<a id="quickstart-example" class="anchor" href="#quickstart-example" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Quickstart example</h2>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$loop</span> <span class="pl-k">=</span> <span class="pl-c1">React\EventLoop\</span><span class="pl-c1">Factory</span><span class="pl-k">::</span>create();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$process</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\ChildProcess\</span><span class="pl-c1">Process</span>(<span class="pl-s"><span class="pl-pds">'</span>echo foo<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"><span class="pl-smi">$process</span><span class="pl-k">-&gt;</span>start(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$process</span><span class="pl-k">-&gt;</span><span class="pl-smi">stdout</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>data<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-smi">$chunk</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-smi">$chunk</span>;</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$process</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>exit<span class="pl-pds">'</span></span>, <span class="pl-k">function</span>(<span class="pl-smi">$exitCode</span>, <span class="pl-smi">$termSignal</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>Process exited with code <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$exitCode</span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>run();</span></pre></div>
+<p>See also the <a href="https://github.com/reactphp/child-process/blob/v0.6.1/examples">examples</a>.</p>
+<h2>
+<a id="process" class="anchor" href="#process" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Process</h2>
+<h3>
+<a id="stream-properties" class="anchor" href="#stream-properties" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Stream Properties</h3>
+<p>Once a process is started, its I/O streams will be constructed as instances of
+<code>React\Stream\ReadableStreamInterface</code> and <code>React\Stream\WritableStreamInterface</code>.
+Before <code>start()</code> is called, these properties are not set. Once a process terminates,
+the streams will become closed but not unset.</p>
+<p>Following common Unix conventions, this library will start each child process
+with the three pipes matching the standard I/O streams as given below by default.
+You can use the named references for common use cases or access these as an
+array with all three pipes.</p>
+<ul>
+<li>
+<code>$stdin</code>  or <code>$pipes[0]</code> is a <code>WritableStreamInterface</code>
+</li>
+<li>
+<code>$stdout</code> or <code>$pipes[1]</code> is a <code>ReadableStreamInterface</code>
+</li>
+<li>
+<code>$stderr</code> or <code>$pipes[2]</code> is a <code>ReadableStreamInterface</code>
+</li>
+</ul>
+<p>Note that this default configuration may be overridden by explicitly passing
+<a href="#custom-pipes">custom pipes</a>, in which case they may not be set or be assigned
+different values. In particular, note that <a href="#windows-compatibility">Windows support</a>
+is limited in that it doesn't support non-blocking STDIO pipes. The <code>$pipes</code>
+array will always contain references to all pipes as configured and the standard
+I/O references will always be set to reference the pipes matching the above
+conventions. See <a href="#custom-pipes">custom pipes</a> for more details.</p>
+<p>Because each of these implement the underlying
+<a href="../stream/#readablestreaminterface"><code>ReadableStreamInterface</code></a> or
+<a href="../stream/#writablestreaminterface"><code>WritableStreamInterface</code></a>,
+you can use any of their events and methods as usual:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$process</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Process</span>(<span class="pl-smi">$command</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$process</span><span class="pl-k">-&gt;</span>start(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$process</span><span class="pl-k">-&gt;</span><span class="pl-smi">stdout</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>data<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-smi">$chunk</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-smi">$chunk</span>;</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$process</span><span class="pl-k">-&gt;</span><span class="pl-smi">stdout</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>end<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> () {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>ended<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$process</span><span class="pl-k">-&gt;</span><span class="pl-smi">stdout</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>error<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-c1">Exception</span> <span class="pl-smi">$e</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>error: <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$e</span><span class="pl-k">-&gt;</span>getMessage();</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$process</span><span class="pl-k">-&gt;</span><span class="pl-smi">stdout</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>close<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> () {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>closed<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$process</span><span class="pl-k">-&gt;</span><span class="pl-smi">stdin</span><span class="pl-k">-&gt;</span>write(<span class="pl-smi">$data</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$process</span><span class="pl-k">-&gt;</span><span class="pl-smi">stdin</span><span class="pl-k">-&gt;</span>end(<span class="pl-smi">$data</span> <span class="pl-k">=</span> <span class="pl-c1">null</span>);</span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> …</span></span></pre></div>
+<p>For more details, see the
+<a href="../stream/#readablestreaminterface"><code>ReadableStreamInterface</code></a> and
+<a href="../stream/#writablestreaminterface"><code>WritableStreamInterface</code></a>.</p>
+<h3>
+<a id="command" class="anchor" href="#command" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Command</h3>
+<p>The <code>Process</code> class allows you to pass any kind of command line string:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$process</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Process</span>(<span class="pl-s"><span class="pl-pds">'</span>echo test<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"><span class="pl-smi">$process</span><span class="pl-k">-&gt;</span>start(<span class="pl-smi">$loop</span>);</span></pre></div>
+<p>The command line string usually consists of a whitespace-separated list with
+your main executable bin and any number of arguments. Special care should be
+taken to escape or quote any arguments, escpecially if you pass any user input
+along. Likewise, keep in mind that especially on Windows, it is rather common to
+have path names containing spaces and other special characters. If you want to
+run a binary like this, you will have to ensure this is quoted as a single
+argument using <code>escapeshellarg()</code> like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$bin</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>C:<span class="pl-cce">\\</span>Program files (x86)<span class="pl-cce">\\</span>PHP<span class="pl-cce">\\</span>php.exe<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1"><span class="pl-smi">$file</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>C:<span class="pl-cce">\\</span>Users<span class="pl-cce">\\</span>me<span class="pl-cce">\\</span>Desktop<span class="pl-cce">\\</span>Application<span class="pl-cce">\\</span>main.php<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$process</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Process</span>(<span class="pl-c1">escapeshellarg</span>(<span class="pl-smi">$bin</span>) <span class="pl-k">.</span> <span class="pl-s"><span class="pl-pds">'</span> <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-c1">escapeshellarg</span>(<span class="pl-smi">$file</span>));</span>
+<span class="pl-s1"><span class="pl-smi">$process</span><span class="pl-k">-&gt;</span>start(<span class="pl-smi">$loop</span>);</span></pre></div>
+<p>By default, PHP will launch processes by wrapping the given command line string
+in a <code>sh</code> command on Unix, so that the first example will actually execute
+<code>sh -c echo test</code> under the hood on Unix. On Windows, it will not launch
+processes by wrapping them in a shell.</p>
+<p>This is a very useful feature because it does not only allow you to pass single
+commands, but actually allows you to pass any kind of shell command line and
+launch multiple sub-commands using command chains (with <code>&amp;&amp;</code>, <code>||</code>, <code>;</code> and
+others) and allows you to redirect STDIO streams (with <code>2&gt;&amp;1</code> and family).
+This can be used to pass complete command lines and receive the resulting STDIO
+streams from the wrapping shell command like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$process</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Process</span>(<span class="pl-s"><span class="pl-pds">'</span>echo run &amp;&amp; demo || echo failed<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"><span class="pl-smi">$process</span><span class="pl-k">-&gt;</span>start(<span class="pl-smi">$loop</span>);</span></pre></div>
+<blockquote>
+<p>Note that <a href="#windows-compatibility">Windows support</a> is limited in that it
+doesn't support STDIO streams at all and also that processes will not be run
+in a wrapping shell by default. If you want to run a shell built-in function
+such as <code>echo hello</code> or <code>sleep 10</code>, you may have to prefix your command line
+with an explicit shell like <code>cmd /c echo hello</code>.</p>
+</blockquote>
+<p>In other words, the underlying shell is responsible for managing this command
+line and launching the individual sub-commands and connecting their STDIO
+streams as appropriate.
+This implies that the <code>Process</code> class will only receive the resulting STDIO
+streams from the wrapping shell, which will thus contain the complete
+input/output with no way to discern the input/output of single sub-commands.</p>
+<p>If you want to discern the output of single sub-commands, you may want to
+implement some higher-level protocol logic, such as printing an explicit
+boundary between each sub-command like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$process</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Process</span>(<span class="pl-s"><span class="pl-pds">'</span>cat first &amp;&amp; echo --- &amp;&amp; cat second<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"><span class="pl-smi">$process</span><span class="pl-k">-&gt;</span>start(<span class="pl-smi">$loop</span>);</span></pre></div>
+<p>As an alternative, considering launching one process at a time and listening on
+its <code>exit</code> event to conditionally start the next process in the chain.
+This will give you an opportunity to configure the subsequent process I/O streams:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$first</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Process</span>(<span class="pl-s"><span class="pl-pds">'</span>cat first<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"><span class="pl-smi">$first</span><span class="pl-k">-&gt;</span>start(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$first</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>exit<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> () <span class="pl-k">use</span> (<span class="pl-smi">$loop</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$second</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Process</span>(<span class="pl-s"><span class="pl-pds">'</span>cat second<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1">    <span class="pl-smi">$second</span><span class="pl-k">-&gt;</span>start(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1">});</span></pre></div>
+<p>Keep in mind that PHP uses the shell wrapper for ALL command lines on Unix.
+While this may seem reasonable for more complex command lines, this actually
+also applies to running the most simple single command:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$process</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Process</span>(<span class="pl-s"><span class="pl-pds">'</span>yes<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"><span class="pl-smi">$process</span><span class="pl-k">-&gt;</span>start(<span class="pl-smi">$loop</span>);</span></pre></div>
+<p>This will actually spawn a command hierarchy similar to this on Unix:</p>
+<pre><code>5480 … \_ php example.php
+5481 …    \_ sh -c yes
+5482 …        \_ yes
+</code></pre>
+<p>This means that trying to get the underlying process PID or sending signals
+will actually target the wrapping shell, which may not be the desired result
+in many cases.</p>
+<p>If you do not want this wrapping shell process to show up, you can simply
+prepend the command string with <code>exec</code> on Unix platforms, which will cause the
+wrapping shell process to be replaced by our process:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$process</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Process</span>(<span class="pl-s"><span class="pl-pds">'</span>exec yes<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"><span class="pl-smi">$process</span><span class="pl-k">-&gt;</span>start(<span class="pl-smi">$loop</span>);</span></pre></div>
+<p>This will show a resulting command hierarchy similar to this:</p>
+<pre><code>5480 … \_ php example.php
+5481 …    \_ yes
+</code></pre>
+<p>This means that trying to get the underlying process PID and sending signals
+will now target the actual command as expected.</p>
+<p>Note that in this case, the command line will not be run in a wrapping shell.
+This implies that when using <code>exec</code>, there's no way to pass command lines such
+as those containing command chains or redirected STDIO streams.</p>
+<p>As a rule of thumb, most commands will likely run just fine with the wrapping
+shell.
+If you pass a complete command line (or are unsure), you SHOULD most likely keep
+the wrapping shell.
+If you're running on Unix and you want to pass an invidual command only, you MAY
+want to consider prepending the command string with <code>exec</code> to avoid the wrapping shell.</p>
+<h3>
+<a id="termination" class="anchor" href="#termination" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Termination</h3>
+<p>The <code>exit</code> event will be emitted whenever the process is no longer running.
+Event listeners will receive the exit code and termination signal as two
+arguments:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$process</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Process</span>(<span class="pl-s"><span class="pl-pds">'</span>sleep 10<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"><span class="pl-smi">$process</span><span class="pl-k">-&gt;</span>start(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$process</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>exit<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-smi">$code</span>, <span class="pl-smi">$term</span>) {</span>
+<span class="pl-s1">    <span class="pl-k">if</span> (<span class="pl-smi">$term</span> <span class="pl-k">===</span> <span class="pl-c1">null</span>) {</span>
+<span class="pl-s1">        <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>exit with code <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$code</span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">    } <span class="pl-k">else</span> {</span>
+<span class="pl-s1">        <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>terminated with signal <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$term</span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">    }</span>
+<span class="pl-s1">});</span></pre></div>
+<p>Note that <code>$code</code> is <code>null</code> if the process has terminated, but the exit
+code could not be determined (for example
+<a href="#sigchild-compatibility">sigchild compatibility</a> was disabled).
+Similarly, <code>$term</code> is <code>null</code> unless the process has terminated in response to
+an uncaught signal sent to it.
+This is not a limitation of this project, but actual how exit codes and signals
+are exposed on POSIX systems, for more details see also
+<a href="https://unix.stackexchange.com/questions/99112/default-exit-code-when-process-is-terminated" rel="nofollow">here</a>.</p>
+<p>It's also worth noting that process termination depends on all file descriptors
+being closed beforehand.
+This means that all <a href="#stream-properties">process pipes</a> will emit a <code>close</code>
+event before the <code>exit</code> event and that no more <code>data</code> events will arrive after
+the <code>exit</code> event.
+Accordingly, if either of these pipes is in a paused state (<code>pause()</code> method
+or internally due to a <code>pipe()</code> call), this detection may not trigger.</p>
+<p>The <code>terminate(?int $signal = null): bool</code> method can be used to send the
+process a signal (SIGTERM by default).
+Depending on which signal you send to the process and whether it has a signal
+handler registered, this can be used to either merely signal a process or even
+forcefully terminate it.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$process</span><span class="pl-k">-&gt;</span>terminate(<span class="pl-c1">SIGUSR1</span>);</span></pre></div>
+<p>Keep the above section in mind if you want to forcefully terminate a process.
+If your process spawn sub-processes or implicitly uses the
+<a href="#command">wrapping shell mentioned above</a>, its file descriptors may be
+inherited to child processes and terminating the main process may not
+necessarily terminate the whole process tree.
+It is highly suggested that you explicitly <code>close()</code> all process pipes
+accordingly when terminating a process:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$process</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Process</span>(<span class="pl-s"><span class="pl-pds">'</span>sleep 10<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"><span class="pl-smi">$process</span><span class="pl-k">-&gt;</span>start(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addTimer(<span class="pl-c1">2.0</span>, <span class="pl-k">function</span> () <span class="pl-k">use</span> (<span class="pl-smi">$process</span>) {</span>
+<span class="pl-s1">    <span class="pl-k">foreach</span> (<span class="pl-smi">$process</span><span class="pl-k">-&gt;</span><span class="pl-smi">pipes</span> <span class="pl-k">as</span> <span class="pl-smi">$pipe</span>) {</span>
+<span class="pl-s1">        <span class="pl-smi">$pipe</span><span class="pl-k">-&gt;</span>close();</span>
+<span class="pl-s1">    }</span>
+<span class="pl-s1">    <span class="pl-smi">$process</span><span class="pl-k">-&gt;</span>terminate();</span>
+<span class="pl-s1">});</span></pre></div>
+<p>For many simple programs these seamingly complicated steps can also be avoided
+by prefixing the command line with <code>exec</code> to avoid the wrapping shell and its
+inherited process pipes as <a href="#command">mentioned above</a>.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$process</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Process</span>(<span class="pl-s"><span class="pl-pds">'</span>exec sleep 10<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"><span class="pl-smi">$process</span><span class="pl-k">-&gt;</span>start(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addTimer(<span class="pl-c1">2.0</span>, <span class="pl-k">function</span> () <span class="pl-k">use</span> (<span class="pl-smi">$process</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$process</span><span class="pl-k">-&gt;</span>terminate();</span>
+<span class="pl-s1">});</span></pre></div>
+<p>Many command line programs also wait for data on <code>STDIN</code> and terminate cleanly
+when this pipe is closed.
+For example, the following can be used to "soft-close" a <code>cat</code> process:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$process</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Process</span>(<span class="pl-s"><span class="pl-pds">'</span>cat<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"><span class="pl-smi">$process</span><span class="pl-k">-&gt;</span>start(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addTimer(<span class="pl-c1">2.0</span>, <span class="pl-k">function</span> () <span class="pl-k">use</span> (<span class="pl-smi">$process</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$process</span><span class="pl-k">-&gt;</span><span class="pl-smi">stdin</span><span class="pl-k">-&gt;</span>end();</span>
+<span class="pl-s1">});</span></pre></div>
+<p>While process pipes and termination may seem confusing to newcomers, the above
+properties actually allow some fine grained control over process termination,
+such as first trying a soft-close and then applying a force-close after a
+timeout.</p>
+<h3>
+<a id="custom-pipes" class="anchor" href="#custom-pipes" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Custom pipes</h3>
+<p>Following common Unix conventions, this library will start each child process
+with the three pipes matching the standard I/O streams by default. For more
+advanced use cases it may be useful to pass in custom pipes, such as explicitly
+passing additional file descriptors (FDs) or overriding default process pipes.</p>
+<p>Note that passing custom pipes is considered advanced usage and requires a
+more in-depth understanding of Unix file descriptors and how they are inherited
+to child processes and shared in multi-processing applications.</p>
+<p>If you do not want to use the default standard I/O pipes, you can explicitly
+pass an array containing the file descriptor specification to the constructor
+like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$fds</span> <span class="pl-k">=</span> <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> standard I/O pipes for stdin/stdout/stderr</span></span>
+<span class="pl-s1">    <span class="pl-c1">0</span> <span class="pl-k">=&gt;</span> <span class="pl-c1">array</span>(<span class="pl-s"><span class="pl-pds">'</span>pipe<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>r<span class="pl-pds">'</span></span>),</span>
+<span class="pl-s1">    <span class="pl-c1">1</span> <span class="pl-k">=&gt;</span> <span class="pl-c1">array</span>(<span class="pl-s"><span class="pl-pds">'</span>pipe<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>w<span class="pl-pds">'</span></span>),</span>
+<span class="pl-s1">    <span class="pl-c1">2</span> <span class="pl-k">=&gt;</span> <span class="pl-c1">array</span>(<span class="pl-s"><span class="pl-pds">'</span>pipe<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>w<span class="pl-pds">'</span></span>),</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> example FDs for files or open resources</span></span>
+<span class="pl-s1">    <span class="pl-c1">4</span> <span class="pl-k">=&gt;</span> <span class="pl-c1">array</span>(<span class="pl-s"><span class="pl-pds">'</span>file<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>/dev/null<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>r<span class="pl-pds">'</span></span>),</span>
+<span class="pl-s1">    <span class="pl-c1">6</span> <span class="pl-k">=&gt;</span> <span class="pl-c1">fopen</span>(<span class="pl-s"><span class="pl-pds">'</span>log.txt<span class="pl-pds">'</span></span>,<span class="pl-s"><span class="pl-pds">'</span>a<span class="pl-pds">'</span></span>),</span>
+<span class="pl-s1">    <span class="pl-c1">8</span> <span class="pl-k">=&gt;</span> <span class="pl-c1">STDERR</span>,</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> example FDs for sockets</span></span>
+<span class="pl-s1">    <span class="pl-c1">10</span> <span class="pl-k">=&gt;</span> <span class="pl-c1">fsockopen</span>(<span class="pl-s"><span class="pl-pds">'</span>localhost<span class="pl-pds">'</span></span>, <span class="pl-c1">8080</span>),</span>
+<span class="pl-s1">    <span class="pl-c1">12</span> <span class="pl-k">=&gt;</span> <span class="pl-c1">stream_socket_server</span>(<span class="pl-s"><span class="pl-pds">'</span>tcp://0.0.0.0:4711<span class="pl-pds">'</span></span>)</span>
+<span class="pl-s1">);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$process</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Process</span>(<span class="pl-smi">$cmd</span>, <span class="pl-c1">null</span>, <span class="pl-c1">null</span>, <span class="pl-smi">$fds</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$process</span><span class="pl-k">-&gt;</span>start(<span class="pl-smi">$loop</span>);</span></pre></div>
+<p>Unless your use case has special requirements that demand otherwise, you're
+highly recommended to (at least) pass in the standard I/O pipes as given above.
+The file descriptor specification accepts arguments in the exact same format
+as the underlying <a href="http://php.net/proc_open" rel="nofollow"><code>proc_open()</code></a> function.</p>
+<p>Once the process is started, the <code>$pipes</code> array will always contain references to
+all pipes as configured and the standard I/O references will always be set to
+reference the pipes matching common Unix conventions. This library supports any
+number of pipes and additional file descriptors, but many common applications
+being run as a child process will expect that the parent process properly
+assigns these file descriptors.</p>
+<h3>
+<a id="sigchild-compatibility" class="anchor" href="#sigchild-compatibility" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Sigchild Compatibility</h3>
+<p>Internally, this project uses a work-around to improve compatibility when PHP
+has been compiled with the <code>--enable-sigchild</code> option. This should not affect most
+installations as this configure option is not used by default and many
+distributions (such as Debian and Ubuntu) are known to not use this by default.
+Some installations that use <a href="http://php.net/manual/en/book.oci8.php" rel="nofollow">Oracle OCI8</a>
+may use this configure option to circumvent <code>defunct</code> processes.</p>
+<p>When PHP has been compiled with the <code>--enable-sigchild</code> option, a child process'
+exit code cannot be reliably determined via <code>proc_close()</code> or <code>proc_get_status()</code>.
+To work around this, we execute the child process with an additional pipe and
+use that to retrieve its exit code.</p>
+<p>This work-around incurs some overhead, so we only trigger this when necessary
+and when we detect that PHP has been compiled with the <code>--enable-sigchild</code> option.
+Because PHP does not provide a way to reliably detect this option, we try to
+inspect output of PHP's configure options from the <code>phpinfo()</code> function.</p>
+<p>The static <code>setSigchildEnabled(bool $sigchild): void</code> method can be used to
+explicitly enable or disable this behavior like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> advanced: not recommended by default</span></span>
+<span class="pl-s1"><span class="pl-c1">Process</span><span class="pl-k">::</span>setSigchildEnabled(<span class="pl-c1">true</span>);</span></pre></div>
+<p>Note that all processes instantiated after this method call will be affected.
+If this work-around is disabled on an affected PHP installation, the <code>exit</code>
+event may receive <code>null</code> instead of the actual exit code as described above.
+Similarly, some distributions are known to omit the configure options from
+<code>phpinfo()</code>, so automatic detection may fail to enable this work-around in some
+cases. You may then enable this  explicitly as given above.</p>
+<p><strong>Note:</strong> The original functionality was taken from Symfony's
+<a href="https://github.com/symfony/process">Process</a> compoment.</p>
+<h3>
+<a id="windows-compatibility" class="anchor" href="#windows-compatibility" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Windows Compatibility</h3>
+<p>Due to platform constraints, this library provides only limited support for
+spawning child processes on Windows. In particular, PHP does not allow accessing
+standard I/O pipes without blocking. As such, this project will not allow
+constructing a child process with the default process pipes and will instead
+throw a <code>LogicException</code> on Windows by default:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> throws LogicException on Windows</span></span>
+<span class="pl-s1"><span class="pl-smi">$process</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Process</span>(<span class="pl-s"><span class="pl-pds">'</span>ping example.com<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"><span class="pl-smi">$process</span><span class="pl-k">-&gt;</span>start(<span class="pl-smi">$loop</span>);</span></pre></div>
+<p>There are a number of alternatives and workarounds as detailed below if you want
+to run a child process on Windows, each with its own set of pros and cons:</p>
+<ul>
+<li>
+<p>This package does work on
+<a href="https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux" rel="nofollow"><code>Windows Subsystem for Linux</code></a>
+(or WSL) without issues. When you are in control over how your application is
+deployed, we recommend <a href="https://msdn.microsoft.com/en-us/commandline/wsl/install_guide" rel="nofollow">installing WSL</a>
+when you want to run this package on Windows.</p>
+</li>
+<li>
+<p>If you only care about the exit code of a child process to check if its
+execution was successful, you can use <a href="#custom-pipes">custom pipes</a> to omit
+any standard I/O pipes like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$process</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Process</span>(<span class="pl-s"><span class="pl-pds">'</span>ping example.com<span class="pl-pds">'</span></span>, <span class="pl-c1">null</span>, <span class="pl-c1">null</span>, <span class="pl-c1">array</span>());</span>
+<span class="pl-s1"><span class="pl-smi">$process</span><span class="pl-k">-&gt;</span>start(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$process</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>exit<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-smi">$exitcode</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>exit with <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$exitcode</span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">});</span></pre></div>
+<p>Similarly, this is also useful if your child process communicates over
+sockets with remote servers or even your parent process using the
+<a href="../socket/">Socket component</a>. This is usually
+considered the best alternative if you have control over how your child
+process communicates with the parent process.</p>
+</li>
+<li>
+<p>If you only care about command output after the child process has been
+executed, you can use <a href="#custom-pipes">custom pipes</a> to configure file
+handles to be passed to the child process instead of pipes like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$process</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Process</span>(<span class="pl-s"><span class="pl-pds">'</span>ping example.com<span class="pl-pds">'</span></span>, <span class="pl-c1">null</span>, <span class="pl-c1">null</span>, <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-c1">array</span>(<span class="pl-s"><span class="pl-pds">'</span>file<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>nul<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>r<span class="pl-pds">'</span></span>),</span>
+<span class="pl-s1">    <span class="pl-smi">$stdout</span> <span class="pl-k">=</span> <span class="pl-c1">tmpfile</span>(),</span>
+<span class="pl-s1">    <span class="pl-c1">array</span>(<span class="pl-s"><span class="pl-pds">'</span>file<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>nul<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>w<span class="pl-pds">'</span></span>)</span>
+<span class="pl-s1">));</span>
+<span class="pl-s1"><span class="pl-smi">$process</span><span class="pl-k">-&gt;</span>start(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$process</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>exit<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-smi">$exitcode</span>) <span class="pl-k">use</span> (<span class="pl-smi">$stdout</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>exit with <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$exitcode</span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> rewind to start and then read full file (demo only, this is blocking).</span></span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> reading from shared file is only safe if you have some synchronization in place</span></span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> or after the child process has terminated.</span></span>
+<span class="pl-s1">    <span class="pl-c1">rewind</span>(<span class="pl-smi">$stdout</span>);</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-c1">stream_get_contents</span>(<span class="pl-smi">$stdout</span>);</span>
+<span class="pl-s1">    <span class="pl-c1">fclose</span>(<span class="pl-smi">$stdout</span>);</span>
+<span class="pl-s1">});</span></pre></div>
+<p>Note that this example uses <code>tmpfile()</code>/<code>fopen()</code> for illustration purposes only.
+This should not be used in a truly async program because the filesystem is
+inherently blocking and each call could potentially take several seconds.
+See also the <a href="https://github.com/reactphp/filesystem">Filesystem component</a> as an
+alternative.</p>
+</li>
+<li>
+<p>If you want to access command output as it happens in a streaming fashion,
+you can use redirection to spawn an additional process to forward your
+standard I/O streams to a socket and use <a href="#custom-pipes">custom pipes</a> to
+omit any actual standard I/O pipes like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Server</span>(<span class="pl-s"><span class="pl-pds">'</span>127.0.0.1:0<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>connection<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-c1">React\Socket\</span><span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>data<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-smi">$chunk</span>) {</span>
+<span class="pl-s1">        <span class="pl-c1">echo</span> <span class="pl-smi">$chunk</span>;</span>
+<span class="pl-s1">    });</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$command</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>ping example.com | foobar <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-c1">escapeshellarg</span>(<span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>getAddress());</span>
+<span class="pl-s1"><span class="pl-smi">$process</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Process</span>(<span class="pl-smi">$command</span>, <span class="pl-c1">null</span>, <span class="pl-c1">null</span>, <span class="pl-c1">array</span>());</span>
+<span class="pl-s1"><span class="pl-smi">$process</span><span class="pl-k">-&gt;</span>start(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$process</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>exit<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-smi">$exitcode</span>) <span class="pl-k">use</span> (<span class="pl-smi">$server</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>close();</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>exit with <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$exitcode</span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">});</span></pre></div>
+<p>Note how this will spawn another fictional <code>foobar</code> helper program to consume
+the standard output from the actual child process. This is in fact similar
+to the above recommendation of using socket connections in the child process,
+but in this case does not require modification of the actual child process.</p>
+<p>In this example, the fictional <code>foobar</code> helper program can be implemented by
+simply consuming all data from standard input and forwarding it to a socket
+connection like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$socket</span> <span class="pl-k">=</span> <span class="pl-c1">stream_socket_client</span>(<span class="pl-smi">$argv</span>[<span class="pl-c1">1</span>]);</span>
+<span class="pl-s1"><span class="pl-k">do</span> {</span>
+<span class="pl-s1">    <span class="pl-c1">fwrite</span>(<span class="pl-smi">$socket</span>, <span class="pl-smi">$data</span> <span class="pl-k">=</span> <span class="pl-c1">fread</span>(<span class="pl-c1">STDIN</span>, <span class="pl-c1">8192</span>));</span>
+<span class="pl-s1">} <span class="pl-k">while</span> (<span class="pl-c1">isset</span>(<span class="pl-smi">$data</span>[<span class="pl-c1">0</span>]));</span></pre></div>
+<p>Accordingly, this example can also be run with plain PHP without having to
+rely on any external helper program like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$code</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>$s=stream_socket_client($argv[1]);do{fwrite($s,$d=fread(STDIN, 8192));}while(isset($d[0]));<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1"><span class="pl-smi">$command</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>ping example.com | php -r <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-c1">escapeshellarg</span>(<span class="pl-smi">$code</span>) <span class="pl-k">.</span> <span class="pl-s"><span class="pl-pds">'</span> <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-c1">escapeshellarg</span>(<span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>getAddress());</span>
+<span class="pl-s1"><span class="pl-smi">$process</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Process</span>(<span class="pl-smi">$command</span>, <span class="pl-c1">null</span>, <span class="pl-c1">null</span>, <span class="pl-c1">array</span>());</span>
+<span class="pl-s1"><span class="pl-smi">$process</span><span class="pl-k">-&gt;</span>start(<span class="pl-smi">$loop</span>);</span></pre></div>
+<p>See also <a href="https://github.com/reactphp/child-process/blob/v0.6.1/examples/23-forward-socket.php">example #23</a>.</p>
+<p>Note that this is for illustration purposes only and you may want to implement
+some proper error checks and/or socket verification in actual production use
+if you do not want to risk other processes connecting to the server socket.
+In this case, we suggest looking at the excellent
+<a href="https://github.com/cubiclesoft/createprocess-windows">createprocess-windows</a>.</p>
+</li>
+</ul>
+<p>Additionally, note that the <a href="#command">command</a> given to the <code>Process</code> will be
+passed to the underlying Windows-API
+(<a href="https://docs.microsoft.com/en-us/windows/desktop/api/processthreadsapi/nf-processthreadsapi-createprocessa" rel="nofollow"><code>CreateProcess</code></a>)
+as-is and the process will not be launched in a wrapping shell by default. In
+particular, this means that shell built-in functions such as <code>echo hello</code> or
+<code>sleep 10</code> may have to be prefixed with an explicit shell command like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$process</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Process</span>(<span class="pl-s"><span class="pl-pds">'</span>cmd /c echo hello<span class="pl-pds">'</span></span>, <span class="pl-c1">null</span>, <span class="pl-c1">null</span>, <span class="pl-smi">$pipes</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$process</span><span class="pl-k">-&gt;</span>start(<span class="pl-smi">$loop</span>);</span></pre></div>
+<h2>
+<a id="install" class="anchor" href="#install" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Install</h2>
+<p>The recommended way to install this library is <a href="https://getcomposer.org" rel="nofollow">through Composer</a>.
+<a href="https://getcomposer.org/doc/00-intro.md" rel="nofollow">New to Composer?</a></p>
+<p>This will install the latest supported version:</p>
+<div class="highlight highlight-source-shell"><pre>$ composer require react/child-process:^0.6.1</pre></div>
+<p>See also the <a href="changelog.html">CHANGELOG</a> for details about version upgrades.</p>
+<p>This project aims to run on any platform and thus does not require any PHP
+extensions and supports running on legacy PHP 5.3 through current PHP 7+ and HHVM.
+It's <em>highly recommended to use PHP 7+</em> for this project.</p>
+<p>See above note for limited <a href="#windows-compatibility">Windows Compatibility</a>.</p>
+<h2>
+<a id="tests" class="anchor" href="#tests" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Tests</h2>
+<p>To run the test suite, you first need to clone this repo and then install all
+dependencies <a href="https://getcomposer.org" rel="nofollow">through Composer</a>:</p>
+<div class="highlight highlight-source-shell"><pre>$ composer install</pre></div>
+<p>To run the test suite, go to the project root and run:</p>
+<div class="highlight highlight-source-shell"><pre>$ php vendor/bin/phpunit</pre></div>
+<h2>
+<a id="license" class="anchor" href="#license" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>License</h2>
+<p>MIT, see <a href="license.html">LICENSE file</a>.</p>
+                                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../child-process/">ChildProcess</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v0.6.1
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/child-process#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/child-process/tree/v0.6.0#readme" class="version-selector__version">
+                                                    v0.6.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/child-process/tree/v0.5.2#readme" class="version-selector__version">
+                                                    v0.5.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/child-process/tree/v0.5.1#readme" class="version-selector__version">
+                                                    v0.5.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/child-process/tree/v0.5.0#readme" class="version-selector__version">
+                                                    v0.5.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/child-process/tree/v0.4.3#readme" class="version-selector__version">
+                                                    v0.4.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/child-process/tree/v0.4.2#readme" class="version-selector__version">
+                                                    v0.4.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/child-process/tree/v0.4.1#readme" class="version-selector__version">
+                                                    v0.4.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/child-process/tree/v0.3.0#readme" class="version-selector__version">
+                                                    v0.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/child-process/tree/v0.4.0#readme" class="version-selector__version">
+                                                    v0.4.0
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/child-process">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../child-process/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../child-process/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/child-process:^0.6.1</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (55 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (39 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jmikola">
+                                    <img src="https://avatars3.githubusercontent.com/u/244663?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/244663?v=4&amp;s=80 2x" alt="jmikola" title="jmikola (20 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cboden">
+                                    <img src="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=80 2x" alt="cboden" title="cboden (17 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (8 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/igorw">
+                                    <img src="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=80 2x" alt="igorw" title="igorw (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/staabm">
+                                    <img src="https://avatars2.githubusercontent.com/u/120441?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/120441?v=4&amp;s=80 2x" alt="staabm" title="staabm (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/CharlotteDunois">
+                                    <img src="https://avatars0.githubusercontent.com/u/4529744?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/4529744?v=4&amp;s=80 2x" alt="CharlotteDunois" title="CharlotteDunois (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/iamluc">
+                                    <img src="https://avatars1.githubusercontent.com/u/1539731?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/1539731?v=4&amp;s=80 2x" alt="iamluc" title="iamluc (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/mdrost">
+                                    <img src="https://avatars1.githubusercontent.com/u/4083346?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/4083346?v=4&amp;s=80 2x" alt="mdrost" title="mdrost (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/e3betht">
+                                    <img src="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=80 2x" alt="e3betht" title="e3betht (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/mbonneau">
+                                    <img src="https://avatars3.githubusercontent.com/u/748287?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/748287?v=4&amp;s=80 2x" alt="mbonneau" title="mbonneau (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-child-process-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-child-process-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,1 6,1 12,1 18,1 24,1 30,1 36,1 42,1 48,1 54,1 60,1 66,1 72,1 78,1 84,1 90,1 96,1 102,1 108,1 114,1 120,1 126,1 132,1 138,1 144,1 150,1 156,2 162,2 168,1 174,1 180,1 186,1 192,1 198,1 204,1 210,1 216,1 222,1 228,1 234,1 240,1 246,1 252,1 258,1 264,1 270,1 276,1 282,1 288,1 294,1 300,1 306,1" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-child-process-participation-gradient);mask:url(#reactphp-child-process-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/child-process/license.html b/child-process/license.html
new file mode 100644
index 000000000..df5f4eba2
--- /dev/null
+++ b/child-process/license.html
@@ -0,0 +1,432 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>ChildProcess: License - ReactPHP</title>
+
+        <meta name="description" content="Event-driven library for executing child processes with ReactPHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+            </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                    <h1>ChildProcess License</h1>
+
+    <p>Copyright (c) 2012 Igor Wiedler, Chris Boden</p>
+<p>Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:</p>
+<p>The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.</p>
+<p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.</p>
+                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../child-process/">ChildProcess</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v0.6.1
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/child-process#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/child-process/tree/v0.6.0#readme" class="version-selector__version">
+                                                    v0.6.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/child-process/tree/v0.5.2#readme" class="version-selector__version">
+                                                    v0.5.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/child-process/tree/v0.5.1#readme" class="version-selector__version">
+                                                    v0.5.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/child-process/tree/v0.5.0#readme" class="version-selector__version">
+                                                    v0.5.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/child-process/tree/v0.4.3#readme" class="version-selector__version">
+                                                    v0.4.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/child-process/tree/v0.4.2#readme" class="version-selector__version">
+                                                    v0.4.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/child-process/tree/v0.4.1#readme" class="version-selector__version">
+                                                    v0.4.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/child-process/tree/v0.3.0#readme" class="version-selector__version">
+                                                    v0.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/child-process/tree/v0.4.0#readme" class="version-selector__version">
+                                                    v0.4.0
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/child-process">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../child-process/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../child-process/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/child-process:^0.6.1</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (55 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (39 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jmikola">
+                                    <img src="https://avatars3.githubusercontent.com/u/244663?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/244663?v=4&amp;s=80 2x" alt="jmikola" title="jmikola (20 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cboden">
+                                    <img src="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=80 2x" alt="cboden" title="cboden (17 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (8 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/igorw">
+                                    <img src="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=80 2x" alt="igorw" title="igorw (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/staabm">
+                                    <img src="https://avatars2.githubusercontent.com/u/120441?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/120441?v=4&amp;s=80 2x" alt="staabm" title="staabm (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/CharlotteDunois">
+                                    <img src="https://avatars0.githubusercontent.com/u/4529744?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/4529744?v=4&amp;s=80 2x" alt="CharlotteDunois" title="CharlotteDunois (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/iamluc">
+                                    <img src="https://avatars1.githubusercontent.com/u/1539731?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/1539731?v=4&amp;s=80 2x" alt="iamluc" title="iamluc (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/mdrost">
+                                    <img src="https://avatars1.githubusercontent.com/u/4083346?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/4083346?v=4&amp;s=80 2x" alt="mdrost" title="mdrost (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/e3betht">
+                                    <img src="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=80 2x" alt="e3betht" title="e3betht (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/mbonneau">
+                                    <img src="https://avatars3.githubusercontent.com/u/748287?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/748287?v=4&amp;s=80 2x" alt="mbonneau" title="mbonneau (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-child-process-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-child-process-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,1 6,1 12,1 18,1 24,1 30,1 36,1 42,1 48,1 54,1 60,1 66,1 72,1 78,1 84,1 90,1 96,1 102,1 108,1 114,1 120,1 126,1 132,1 138,1 144,1 150,1 156,2 162,2 168,1 174,1 180,1 186,1 192,1 198,1 204,1 210,1 216,1 222,1 228,1 234,1 240,1 246,1 252,1 258,1 264,1 270,1 276,1 282,1 288,1 294,1 300,1 306,1" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-child-process-participation-gradient);mask:url(#reactphp-child-process-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/datagram/changelog.html b/datagram/changelog.html
new file mode 100644
index 000000000..97fe67659
--- /dev/null
+++ b/datagram/changelog.html
@@ -0,0 +1,642 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>Datagram: Changelog - ReactPHP</title>
+
+        <meta name="description" content="Event-driven UDP client and server sockets for ReactPHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+        <link href="https://github.com/reactphp/datagram/releases.atom" type="application/atom+xml" rel="alternate" title="Datagram Changelog">
+    </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                    <h1>Datagram Changelog</h1>
+
+    <ul class="toc">
+            <li><a href="#2019" title="Jump to year 2019 (1 release)">2019</a></li>
+            <li><a href="#2018" title="Jump to year 2018 (1 release)">2018</a></li>
+            <li><a href="#2017" title="Jump to year 2017 (3 releases)">2017</a></li>
+            <li><a href="#2016" title="Jump to year 2016 (1 release)">2016</a></li>
+            <li><a href="#2015" title="Jump to year 2015 (1 release)">2015</a></li>
+            <li><a href="#2014" title="Jump to year 2014 (1 release)">2014</a></li>
+        </ul>
+
+    <h2>
+        <a id="2019" class="anchor" href="#2019" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2019
+    </h2>
+
+    
+            <h3>
+        <a id="150-2019-07-10" class="anchor" href="#150-2019-07-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.5.0
+
+        <small>
+            (2019-07-10)
+            <a href="https://github.com/reactphp/datagram/releases/tag/v1.5.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Forward compatibility with upcoming stable DNS component.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="464954089" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/29" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/29/hovercard" href="https://github.com/reactphp/datagram/pull/29">#29</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Prefix all global functions calls with <code>\</code> to skip the look up and resolve process and go straight to the global function.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="366477132" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/28" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/28/hovercard" href="https://github.com/reactphp/datagram/pull/28">#28</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+<li>
+<p>Improve test suite to also test against PHP 7.1 and 7.2.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="319487815" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/25" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/25/hovercard" href="https://github.com/reactphp/datagram/pull/25">#25</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/andreybolonin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/andreybolonin">@andreybolonin</a>)</p>
+</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2018" class="anchor" href="#2018" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2018
+    </h2>
+
+    
+            <h3>
+        <a id="140-2018-02-28" class="anchor" href="#140-2018-02-28" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.4.0
+
+        <small>
+            (2018-02-28)
+            <a href="https://github.com/reactphp/datagram/releases/tag/v1.4.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Update DNS dependency to support loading system default DNS<br>
+nameserver config on all supported platforms<br>
+(<code>/etc/resolv.conf</code> on Unix/Linux/Mac/Docker/WSL and WMIC on Windows)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="300634946" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/23" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/23/hovercard" href="https://github.com/reactphp/datagram/pull/23">#23</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>This means that connecting to hosts that are managed by a local DNS server,<br>
+such as a corporate DNS server or when using Docker containers, will now<br>
+work as expected across all platforms with no changes required:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$factory</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Factory</span>(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$factory</span><span class="pl-k">-&gt;</span>createClient(<span class="pl-s"><span class="pl-pds">'</span>intranet.example:5353<span class="pl-pds">'</span></span>);</span></pre></div>
+</li>
+<li>
+<p>Improve README<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="262178894" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/22" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/22/hovercard" href="https://github.com/reactphp/datagram/pull/22">#22</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</p>
+</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2017" class="anchor" href="#2017" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2017
+    </h2>
+
+    
+            <h3>
+        <a id="130-2017-09-25" class="anchor" href="#130-2017-09-25" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.3.0
+
+        <small>
+            (2017-09-25)
+            <a href="https://github.com/reactphp/datagram/releases/tag/v1.3.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Always use <code>Resolver</code> with default DNS to match Socket component<br>
+and update DNS dependency to support hosts file on all platforms<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="259224540" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/19" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/19/hovercard" href="https://github.com/reactphp/datagram/pull/19">#19</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="259575032" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/20" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/20/hovercard" href="https://github.com/reactphp/datagram/pull/20">#20</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>This means that connecting to hosts such as <code>localhost</code> (and for example<br>
+those used for Docker containers) will now work as expected across all<br>
+platforms with no changes required:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$factory</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Factory</span>(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$factory</span><span class="pl-k">-&gt;</span>createClient(<span class="pl-s"><span class="pl-pds">'</span>localhost:5353<span class="pl-pds">'</span></span>);</span></pre></div>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="120-2017-08-09" class="anchor" href="#120-2017-08-09" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.2.0
+
+        <small>
+            (2017-08-09)
+            <a href="https://github.com/reactphp/datagram/releases/tag/v1.2.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Target evenement 3.0 a long side 2.0 and 1.0<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248200570" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/16" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/16/hovercard" href="https://github.com/reactphp/datagram/pull/16">#16</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+<li>
+<p>Feature: Forward compatibility with EventLoop v1.0 and v0.5<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248635442" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/18" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/18/hovercard" href="https://github.com/reactphp/datagram/pull/18">#18</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by updating Travis build config so new defaults do not break the build<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248272410" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/17" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/17/hovercard" href="https://github.com/reactphp/datagram/pull/17">#17</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="111-2017-01-23" class="anchor" href="#111-2017-01-23" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.1.1
+
+        <small>
+            (2017-01-23)
+            <a href="https://github.com/reactphp/datagram/releases/tag/v1.1.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix: Properly format IPv6 addresses and return <code>null</code> for unknown addresses<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="202401275" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/14" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/14/hovercard" href="https://github.com/reactphp/datagram/pull/14">#14</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Fix: Skip IPv6 tests if not supported by the system<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="202530538" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/15" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/15/hovercard" href="https://github.com/reactphp/datagram/pull/15">#15</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2016" class="anchor" href="#2016" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2016
+    </h2>
+
+    
+            <h3>
+        <a id="110-2016-03-19" class="anchor" href="#110-2016-03-19" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.1.0
+
+        <small>
+            (2016-03-19)
+            <a href="https://github.com/reactphp/datagram/releases/tag/v1.1.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Support promise cancellation (cancellation of underlying DNS lookup)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="138159643" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/12" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/12/hovercard" href="https://github.com/reactphp/datagram/pull/12">#12</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Fix: Fix error reporting when trying to create invalid sockets<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="138159383" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/11" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/11/hovercard" href="https://github.com/reactphp/datagram/pull/11">#11</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Improve test suite and update dependencies<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="116929736" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/7" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/7/hovercard" href="https://github.com/reactphp/datagram/pull/7">#7</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="117009593" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/8" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/8/hovercard" href="https://github.com/reactphp/datagram/pull/8">#8</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2015" class="anchor" href="#2015" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2015
+    </h2>
+
+    
+            <h3>
+        <a id="101-2015-11-13" class="anchor" href="#101-2015-11-13" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.0.1
+
+        <small>
+            (2015-11-13)
+            <a href="https://github.com/reactphp/datagram/releases/tag/v1.0.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix: Correct formatting for remote peer address of incoming datagrams when using IPv6<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="116048726" data-permission-text="Title is private" data-url="https://github.com/reactphp/datagram/issues/6" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/datagram/pull/6/hovercard" href="https://github.com/reactphp/datagram/pull/6">#6</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</li>
+<li>Improve test suite for different PHP versions</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2014" class="anchor" href="#2014" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2014
+    </h2>
+
+    
+            <h3>
+        <a id="100-2014-10-23" class="anchor" href="#100-2014-10-23" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.0.0
+
+        <small>
+            (2014-10-23)
+            <a href="https://github.com/reactphp/datagram/releases/tag/v1.0.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Initial tagged release</li>
+</ul>
+<blockquote>
+<p>This project has been migrated over from <a href="https://github.com/clue/php-datagram">clue/datagram</a><br>
+which has originally been released in January 2013.<br>
+Upgrading from clue/datagram v0.5.0? Use namespace <code>React\Datagram</code> instead of <code>Datagram</code> and you're ready to go!</p>
+</blockquote>
+
+    <hr>
+    
+    <ul class="links">
+        <li>
+            <a href="https://github.com/reactphp/datagram/releases.atom">
+                <i class="icon-feed" aria-hidden="true"></i>
+                Subscribe to the Changelog feed
+            </a>
+        </li>
+    </ul>
+                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../datagram/">Datagram</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v1.5.0
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/datagram#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/datagram/tree/v1.4.0#readme" class="version-selector__version">
+                                                    v1.4.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/datagram/tree/v1.3.0#readme" class="version-selector__version">
+                                                    v1.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/datagram/tree/v1.2.0#readme" class="version-selector__version">
+                                                    v1.2.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/datagram/tree/v1.1.1#readme" class="version-selector__version">
+                                                    v1.1.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/datagram/tree/v1.1.0#readme" class="version-selector__version">
+                                                    v1.1.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/datagram/tree/v1.0.1#readme" class="version-selector__version">
+                                                    v1.0.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/datagram/tree/v1.0.0#readme" class="version-selector__version">
+                                                    v1.0.0
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/datagram">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../datagram/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../datagram/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/datagram:^1.5.0</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (161 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (15 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cboden">
+                                    <img src="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=80 2x" alt="cboden" title="cboden (5 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (4 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/andreybolonin">
+                                    <img src="https://avatars2.githubusercontent.com/u/2576509?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/2576509?v=4&amp;s=80 2x" alt="andreybolonin" title="andreybolonin (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/enumag">
+                                    <img src="https://avatars3.githubusercontent.com/u/539462?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/539462?v=4&amp;s=80 2x" alt="enumag" title="enumag (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/e3betht">
+                                    <img src="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=80 2x" alt="e3betht" title="e3betht (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-datagram-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-datagram-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,1 6,1 12,1 18,1 24,1 30,4 36,2 42,5 48,1 54,1 60,1 66,1 72,1 78,1 84,1 90,1 96,1 102,1 108,1 114,1 120,1 126,1 132,1 138,1 144,1 150,1 156,2 162,2 168,1 174,1 180,1 186,1 192,1 198,1 204,1 210,1 216,1 222,1 228,1 234,1 240,1 246,1 252,1 258,1 264,1 270,1 276,1 282,1 288,1 294,1 300,1 306,1" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-datagram-participation-gradient);mask:url(#reactphp-datagram-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/datagram/index.html b/datagram/index.html
new file mode 100644
index 000000000..9f943f2cb
--- /dev/null
+++ b/datagram/index.html
@@ -0,0 +1,428 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>Datagram: 
+Datagram - ReactPHP</title>
+
+        <meta name="description" content="Event-driven UDP client and server sockets for ReactPHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+            </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                                    <h1>Datagram</h1>
+
+                    
+<p><a href="https://travis-ci.org/reactphp/datagram" rel="nofollow"><img src="https://camo.githubusercontent.com/b9221fa9cc9a6e5641f332e3fb72916701259705/68747470733a2f2f7472617669732d63692e6f72672f72656163747068702f646174616772616d2e7376673f6272616e63683d6d6173746572" alt="Build Status" data-canonical-src="https://travis-ci.org/reactphp/datagram.svg?branch=master" style="max-width:100%;"></a></p>
+<p>Event-driven UDP datagram socket client and server for <a href="https://reactphp.org" rel="nofollow">ReactPHP</a>.</p>
+<h2>
+<a id="quickstart-example" class="anchor" href="#quickstart-example" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Quickstart example</h2>
+<p>Once <a href="#install">installed</a>, you can use the following code to connect to an UDP server listening on
+<code>localhost:1234</code> and send and receive UDP datagrams:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$loop</span> <span class="pl-k">=</span> <span class="pl-c1">React\EventLoop\</span><span class="pl-c1">Factory</span><span class="pl-k">::</span>create();</span>
+<span class="pl-s1"><span class="pl-smi">$factory</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Datagram\</span><span class="pl-c1">Factory</span>(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$factory</span><span class="pl-k">-&gt;</span>createClient(<span class="pl-s"><span class="pl-pds">'</span>localhost:1234<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-c1">React\Datagram\</span><span class="pl-c1">Socket</span> <span class="pl-smi">$client</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$client</span><span class="pl-k">-&gt;</span>send(<span class="pl-s"><span class="pl-pds">'</span>first<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-smi">$client</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>message<span class="pl-pds">'</span></span>, <span class="pl-k">function</span>(<span class="pl-smi">$message</span>, <span class="pl-smi">$serverAddress</span>, <span class="pl-smi">$client</span>) {</span>
+<span class="pl-s1">        <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>received "<span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$message</span> <span class="pl-k">.</span> <span class="pl-s"><span class="pl-pds">'</span>" from <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$serverAddress</span><span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">    });</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>run();</span></pre></div>
+<p>See also the <a href="https://github.com/reactphp/datagram/blob/v1.5.0/examples">examples</a>.</p>
+<h2>
+<a id="usage" class="anchor" href="#usage" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Usage</h2>
+<p>This library's API is modelled after node.js's API for
+<a href="https://nodejs.org/api/dgram.html" rel="nofollow">UDP / Datagram Sockets (dgram.Socket)</a>.</p>
+<h2>
+<a id="install" class="anchor" href="#install" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Install</h2>
+<p>The recommended way to install this library is <a href="https://getcomposer.org" rel="nofollow">through Composer</a>.
+<a href="https://getcomposer.org/doc/00-intro.md" rel="nofollow">New to Composer?</a></p>
+<p>This project follows <a href="https://semver.org/" rel="nofollow">SemVer</a>.
+This will install the latest supported version:</p>
+<div class="highlight highlight-source-shell"><pre>$ composer require react/datagram:^1.5</pre></div>
+<p>See also the <a href="changelog.html">CHANGELOG</a> for details about version upgrades.</p>
+<p>This project aims to run on any platform and thus does not require any PHP
+extensions and supports running on legacy PHP 5.3 through current PHP 7+ and
+HHVM.
+It's <em>highly recommended to use PHP 7+</em> for this project.</p>
+<h2>
+<a id="tests" class="anchor" href="#tests" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Tests</h2>
+<p>To run the test suite, you first need to clone this repo and then install all
+dependencies <a href="https://getcomposer.org" rel="nofollow">through Composer</a>:</p>
+<div class="highlight highlight-source-shell"><pre>$ composer install</pre></div>
+<p>To run the test suite, go to the project root and run:</p>
+<div class="highlight highlight-source-shell"><pre>$ php vendor/bin/phpunit</pre></div>
+<h2>
+<a id="license" class="anchor" href="#license" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>License</h2>
+<p>MIT, see <a href="license.html">LICENSE file</a>.</p>
+                                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../datagram/">Datagram</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v1.5.0
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/datagram#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/datagram/tree/v1.4.0#readme" class="version-selector__version">
+                                                    v1.4.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/datagram/tree/v1.3.0#readme" class="version-selector__version">
+                                                    v1.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/datagram/tree/v1.2.0#readme" class="version-selector__version">
+                                                    v1.2.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/datagram/tree/v1.1.1#readme" class="version-selector__version">
+                                                    v1.1.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/datagram/tree/v1.1.0#readme" class="version-selector__version">
+                                                    v1.1.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/datagram/tree/v1.0.1#readme" class="version-selector__version">
+                                                    v1.0.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/datagram/tree/v1.0.0#readme" class="version-selector__version">
+                                                    v1.0.0
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/datagram">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../datagram/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../datagram/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/datagram:^1.5.0</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (161 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (15 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cboden">
+                                    <img src="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=80 2x" alt="cboden" title="cboden (5 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (4 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/andreybolonin">
+                                    <img src="https://avatars2.githubusercontent.com/u/2576509?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/2576509?v=4&amp;s=80 2x" alt="andreybolonin" title="andreybolonin (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/enumag">
+                                    <img src="https://avatars3.githubusercontent.com/u/539462?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/539462?v=4&amp;s=80 2x" alt="enumag" title="enumag (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/e3betht">
+                                    <img src="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=80 2x" alt="e3betht" title="e3betht (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-datagram-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-datagram-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,1 6,1 12,1 18,1 24,1 30,4 36,2 42,5 48,1 54,1 60,1 66,1 72,1 78,1 84,1 90,1 96,1 102,1 108,1 114,1 120,1 126,1 132,1 138,1 144,1 150,1 156,2 162,2 168,1 174,1 180,1 186,1 192,1 198,1 204,1 210,1 216,1 222,1 228,1 234,1 240,1 246,1 252,1 258,1 264,1 270,1 276,1 282,1 288,1 294,1 300,1 306,1" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-datagram-participation-gradient);mask:url(#reactphp-datagram-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/datagram/license.html b/datagram/license.html
new file mode 100644
index 000000000..bdd91a399
--- /dev/null
+++ b/datagram/license.html
@@ -0,0 +1,398 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>Datagram: License - ReactPHP</title>
+
+        <meta name="description" content="Event-driven UDP client and server sockets for ReactPHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+            </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                    <h1>Datagram License</h1>
+
+    <p>The MIT License (MIT)</p>
+<p>Copyright (c) 2013 Christian Lück</p>
+<p>Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:</p>
+<p>The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.</p>
+<p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.</p>
+                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../datagram/">Datagram</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v1.5.0
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/datagram#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/datagram/tree/v1.4.0#readme" class="version-selector__version">
+                                                    v1.4.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/datagram/tree/v1.3.0#readme" class="version-selector__version">
+                                                    v1.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/datagram/tree/v1.2.0#readme" class="version-selector__version">
+                                                    v1.2.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/datagram/tree/v1.1.1#readme" class="version-selector__version">
+                                                    v1.1.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/datagram/tree/v1.1.0#readme" class="version-selector__version">
+                                                    v1.1.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/datagram/tree/v1.0.1#readme" class="version-selector__version">
+                                                    v1.0.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/datagram/tree/v1.0.0#readme" class="version-selector__version">
+                                                    v1.0.0
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/datagram">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../datagram/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../datagram/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/datagram:^1.5.0</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (161 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (15 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cboden">
+                                    <img src="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=80 2x" alt="cboden" title="cboden (5 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (4 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/andreybolonin">
+                                    <img src="https://avatars2.githubusercontent.com/u/2576509?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/2576509?v=4&amp;s=80 2x" alt="andreybolonin" title="andreybolonin (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/enumag">
+                                    <img src="https://avatars3.githubusercontent.com/u/539462?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/539462?v=4&amp;s=80 2x" alt="enumag" title="enumag (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/e3betht">
+                                    <img src="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=80 2x" alt="e3betht" title="e3betht (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-datagram-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-datagram-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,1 6,1 12,1 18,1 24,1 30,4 36,2 42,5 48,1 54,1 60,1 66,1 72,1 78,1 84,1 90,1 96,1 102,1 108,1 114,1 120,1 126,1 132,1 138,1 144,1 150,1 156,2 162,2 168,1 174,1 180,1 186,1 192,1 198,1 204,1 210,1 216,1 222,1 228,1 234,1 240,1 246,1 252,1 258,1 264,1 270,1 276,1 282,1 288,1 294,1 300,1 306,1" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-datagram-participation-gradient);mask:url(#reactphp-datagram-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/dns/changelog.html b/dns/changelog.html
new file mode 100644
index 000000000..7bfefd9da
--- /dev/null
+++ b/dns/changelog.html
@@ -0,0 +1,1394 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>DNS: Changelog - ReactPHP</title>
+
+        <meta name="description" content="Async DNS resolver for ReactPHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+        <link href="https://github.com/reactphp/dns/releases.atom" type="application/atom+xml" rel="alternate" title="DNS Changelog">
+    </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                    <h1>DNS Changelog</h1>
+
+    <ul class="toc">
+            <li><a href="#2019" title="Jump to year 2019 (6 releases)">2019</a></li>
+            <li><a href="#2018" title="Jump to year 2018 (5 releases)">2018</a></li>
+            <li><a href="#2017" title="Jump to year 2017 (8 releases)">2017</a></li>
+            <li><a href="#2016" title="Jump to year 2016 (2 releases)">2016</a></li>
+            <li><a href="#2014" title="Jump to year 2014 (2 releases)">2014</a></li>
+            <li><a href="#2013" title="Jump to year 2013 (2 releases)">2013</a></li>
+            <li><a href="#2012" title="Jump to year 2012 (7 releases)">2012</a></li>
+        </ul>
+
+    <h2>
+        <a id="2019" class="anchor" href="#2019" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2019
+    </h2>
+
+    
+            <h3>
+        <a id="120-2019-08-15" class="anchor" href="#120-2019-08-15" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.2.0
+
+        <small>
+            (2019-08-15)
+            <a href="https://github.com/reactphp/dns/releases/tag/v1.2.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Add <code>TcpTransportExecutor</code> to send DNS queries over TCP/IP connection,<br>
+add <code>SelectiveTransportExecutor</code> to retry with TCP if UDP is truncated and<br>
+automatically select transport protocol when no explicit <code>udp://</code> or <code>tcp://</code> scheme is given in <code>Factory</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="476278188" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/145" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/145/hovercard" href="https://github.com/reactphp/dns/pull/145">#145</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="478672660" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/146" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/146/hovercard" href="https://github.com/reactphp/dns/pull/146">#146</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="479002973" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/147" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/147/hovercard" href="https://github.com/reactphp/dns/pull/147">#147</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="480052064" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/148" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/148/hovercard" href="https://github.com/reactphp/dns/pull/148">#148</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Support escaping literal dots and special characters in domain names.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="475625705" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/144" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/144/hovercard" href="https://github.com/reactphp/dns/pull/144">#144</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="110-2019-07-18" class="anchor" href="#110-2019-07-18" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.1.0
+
+        <small>
+            (2019-07-18)
+            <a href="https://github.com/reactphp/dns/releases/tag/v1.1.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Support parsing <code>CAA</code> and <code>SSHFP</code> records.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="468573632" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/141" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/141/hovercard" href="https://github.com/reactphp/dns/pull/141">#141</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="468845581" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/142" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/142/hovercard" href="https://github.com/reactphp/dns/pull/142">#142</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Add <code>ResolverInterface</code> as common interface for <code>Resolver</code> class.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="468244418" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/139" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/139/hovercard" href="https://github.com/reactphp/dns/pull/139">#139</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Add missing private property definitions and<br>
+remove unneeded dependency on <code>react/stream</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="468250332" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/140" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/140/hovercard" href="https://github.com/reactphp/dns/pull/140">#140</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="469402412" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/143" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/143/hovercard" href="https://github.com/reactphp/dns/pull/143">#143</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="100-2019-07-11" class="anchor" href="#100-2019-07-11" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.0.0
+
+        <small>
+            (2019-07-11)
+            <a href="https://github.com/reactphp/dns/releases/tag/v1.0.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>First stable LTS release, now following <a href="https://semver.org/" rel="nofollow">SemVer</a>.<br>
+We'd like to emphasize that this component is production ready and battle-tested.<br>
+We plan to support all long-term support (LTS) releases for at least 24 months,<br>
+so you have a rock-solid foundation to build on top of.</li>
+</ul>
+<p>This update involves a number of BC breaks due to dropped support for<br>
+deprecated functionality and some internal API cleanup. We've tried hard to<br>
+avoid BC breaks where possible and minimize impact otherwise. We expect that<br>
+most consumers of this package will actually not be affected by any BC<br>
+breaks, see below for more details:</p>
+<ul>
+<li>
+<p>BC break: Delete all deprecated APIs, use <code>Query</code> objects for <code>Message</code> questions<br>
+instead of nested arrays and increase code coverage to 100%.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="465771042" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/130" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/130/hovercard" href="https://github.com/reactphp/dns/pull/130">#130</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>BC break: Move <code>$nameserver</code> from <code>ExecutorInterface</code> to <code>UdpTransportExecutor</code>,<br>
+remove advanced/internal <code>UdpTransportExecutor</code> args for <code>Parser</code>/<code>BinaryDumper</code> and<br>
+add API documentation for <code>ExecutorInterface</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="466759823" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/135" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/135/hovercard" href="https://github.com/reactphp/dns/pull/135">#135</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="466797146" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/137" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/137/hovercard" href="https://github.com/reactphp/dns/pull/137">#137</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="466886290" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/138" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/138/hovercard" href="https://github.com/reactphp/dns/pull/138">#138</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>BC break: Replace <code>HeaderBag</code> attributes with simple <code>Message</code> properties.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="465915799" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/132" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/132/hovercard" href="https://github.com/reactphp/dns/pull/132">#132</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>BC break: Mark all <code>Record</code> attributes as required, add documentation vs <code>Query</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="466784724" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/136" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/136/hovercard" href="https://github.com/reactphp/dns/pull/136">#136</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>BC break: Mark all classes as final to discourage inheritance<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="466693315" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/134" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/134/hovercard" href="https://github.com/reactphp/dns/pull/134">#134</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="0419-2019-07-10" class="anchor" href="#0419-2019-07-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.19
+
+        <small>
+            (2019-07-10)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.19" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Avoid garbage references when DNS resolution rejects on legacy PHP &lt;= 5.6.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="466271528" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/133" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/133/hovercard" href="https://github.com/reactphp/dns/pull/133">#133</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="0418-2019-07-09" class="anchor" href="#0418-2019-07-09" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.18
+
+        <small>
+            (2019-07-09)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.18" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature / Fix: Implement <code>CachingExecutor</code> using cache TTL, deprecate old <code>CachedExecutor</code>,<br>
+respect TTL from response records when caching and do not cache truncated responses.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="465179457" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/129" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/129/hovercard" href="https://github.com/reactphp/dns/pull/129">#129</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Limit cache size to 256 last responses by default.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="464855970" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/127" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/127/hovercard" href="https://github.com/reactphp/dns/pull/127">#127</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Cooperatively resolve hosts to avoid running same query concurrently.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="427568088" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/125" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/125/hovercard" href="https://github.com/reactphp/dns/pull/125">#125</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="0417-2019-04-01" class="anchor" href="#0417-2019-04-01" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.17
+
+        <small>
+            (2019-04-01)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.17" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Support parsing <code>authority</code> and <code>additional</code> records from DNS response.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="404751562" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/123" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/123/hovercard" href="https://github.com/reactphp/dns/pull/123">#123</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Support dumping records as part of outgoing binary DNS message.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="404779998" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/124" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/124/hovercard" href="https://github.com/reactphp/dns/pull/124">#124</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Forward compatibility with upcoming Cache v0.6 and Cache v1.0<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="404300120" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/121" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/121/hovercard" href="https://github.com/reactphp/dns/pull/121">#121</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite to add forward compatibility with PHPUnit 7,<br>
+test against PHP 7.3 and use legacy PHPUnit 5 on legacy HHVM.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="404417125" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/122" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/122/hovercard" href="https://github.com/reactphp/dns/pull/122">#122</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2018" class="anchor" href="#2018" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2018
+    </h2>
+
+    
+            <h3>
+        <a id="0416-2018-11-11" class="anchor" href="#0416-2018-11-11" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.16
+
+        <small>
+            (2018-11-11)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.16" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Improve promise cancellation for DNS lookup retries and clean up any garbage references.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="377369343" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/118" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/118/hovercard" href="https://github.com/reactphp/dns/pull/118">#118</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Reject parsing malformed DNS response messages such as incomplete DNS response messages,<br>
+malformed record data or malformed compressed domain name labels.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="377073833" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/115" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/115/hovercard" href="https://github.com/reactphp/dns/pull/115">#115</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="377314964" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/117" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/117/hovercard" href="https://github.com/reactphp/dns/pull/117">#117</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Fix interpretation of TTL as UINT32 with most significant bit unset.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="377149683" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/116" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/116/hovercard" href="https://github.com/reactphp/dns/pull/116">#116</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Fix caching advanced MX/SRV/TXT/SOA structures.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="343098921" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/112" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/112/hovercard" href="https://github.com/reactphp/dns/pull/112">#112</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="0415-2018-07-02" class="anchor" href="#0415-2018-07-02" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.15
+
+        <small>
+            (2018-07-02)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.15" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Add <code>resolveAll()</code> method to support custom query types in <code>Resolver</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="336884718" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/110" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/110/hovercard" href="https://github.com/reactphp/dns/pull/110">#110</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a> and <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$resolver</span><span class="pl-k">-&gt;</span>resolveAll(<span class="pl-s"><span class="pl-pds">'</span>reactphp.org<span class="pl-pds">'</span></span>, <span class="pl-c1">Message</span><span class="pl-k">::</span><span class="pl-c1">TYPE_AAAA</span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$ips</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>IPv6 addresses for reactphp.org <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-c1">implode</span>(<span class="pl-s"><span class="pl-pds">'</span>, <span class="pl-pds">'</span></span>, <span class="pl-smi">$ips</span>) <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">});</span></pre></div>
+</li>
+<li>
+<p>Feature: Support parsing <code>NS</code>, <code>TXT</code>, <code>MX</code>, <code>SOA</code> and <code>SRV</code> records.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="335771740" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/104" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/104/hovercard" href="https://github.com/reactphp/dns/pull/104">#104</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="335818701" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/105" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/105/hovercard" href="https://github.com/reactphp/dns/pull/105">#105</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="336554084" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/106" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/106/hovercard" href="https://github.com/reactphp/dns/pull/106">#106</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="336605164" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/107" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/107/hovercard" href="https://github.com/reactphp/dns/pull/107">#107</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="336609410" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/108" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/108/hovercard" href="https://github.com/reactphp/dns/pull/108">#108</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Add support for <code>Message::TYPE_ANY</code> and parse unknown types as binary data.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="335771740" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/104" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/104/hovercard" href="https://github.com/reactphp/dns/pull/104">#104</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Improve error messages for failed queries and improve documentation.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="336652900" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/109" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/109/hovercard" href="https://github.com/reactphp/dns/pull/109">#109</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Add reverse DNS lookup example.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="336953891" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/111" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/111/hovercard" href="https://github.com/reactphp/dns/pull/111">#111</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="0414-2018-06-26" class="anchor" href="#0414-2018-06-26" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.14
+
+        <small>
+            (2018-06-26)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.14" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Add <code>UdpTransportExecutor</code>, validate incoming DNS response messages<br>
+to avoid cache poisoning attacks and deprecate legacy <code>Executor</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="334955344" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/101" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/101/hovercard" href="https://github.com/reactphp/dns/pull/101">#101</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="335412702" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/103" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/103/hovercard" href="https://github.com/reactphp/dns/pull/103">#103</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Forward compatibility with Cache 0.5<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="335206013" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/102" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/102/hovercard" href="https://github.com/reactphp/dns/pull/102">#102</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Deprecate legacy <code>Query::$currentTime</code> and binary parser data attributes to clean up and simplify API.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="334767473" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/99" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/99/hovercard" href="https://github.com/reactphp/dns/pull/99">#99</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="0413-2018-02-27" class="anchor" href="#0413-2018-02-27" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.13
+
+        <small>
+            (2018-02-27)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.13" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Add <code>Config::loadSystemConfigBlocking()</code> to load default system config<br>
+and support parsing DNS config on all supported platforms<br>
+(<code>/etc/resolv.conf</code> on Unix/Linux/Mac and WMIC on Windows)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="294840998" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/92" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/92/hovercard" href="https://github.com/reactphp/dns/pull/92">#92</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="300023271" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/93" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/93/hovercard" href="https://github.com/reactphp/dns/pull/93">#93</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="300261492" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/94" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/94/hovercard" href="https://github.com/reactphp/dns/pull/94">#94</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="300425527" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/95" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/95/hovercard" href="https://github.com/reactphp/dns/pull/95">#95</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$config</span> <span class="pl-k">=</span> <span class="pl-c1">Config</span><span class="pl-k">::</span>loadSystemConfigBlocking();</span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-smi">$config</span><span class="pl-k">-&gt;</span><span class="pl-smi">nameservers</span> ? <span class="pl-c1">reset</span>(<span class="pl-smi">$config</span><span class="pl-k">-&gt;</span><span class="pl-smi">nameservers</span>) : <span class="pl-s"><span class="pl-pds">'</span>8.8.8.8<span class="pl-pds">'</span></span>;</span></pre></div>
+</li>
+<li>
+<p>Remove unneeded cyclic dependency on react/socket<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="300554680" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/96" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/96/hovercard" href="https://github.com/reactphp/dns/pull/96">#96</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="0412-2018-01-14" class="anchor" href="#0412-2018-01-14" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.12
+
+        <small>
+            (2018-01-14)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.12" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improve test suite by adding forward compatibility with PHPUnit 6,<br>
+test against PHP 7.2, fix forward compatibility with upcoming EventLoop releases,<br>
+add test group to skip integration tests relying on internet connection<br>
+and add minor documentation improvements.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="273346003" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/85" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/85/hovercard" href="https://github.com/reactphp/dns/pull/85">#85</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278460191" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/87" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/87/hovercard" href="https://github.com/reactphp/dns/pull/87">#87</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/carusogabriel/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/carusogabriel">@carusogabriel</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="284302441" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/88" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/88/hovercard" href="https://github.com/reactphp/dns/pull/88">#88</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="288394422" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/89" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/89/hovercard" href="https://github.com/reactphp/dns/pull/89">#89</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="262180697" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/83" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/83/hovercard" href="https://github.com/reactphp/dns/pull/83">#83</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2017" class="anchor" href="#2017" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2017
+    </h2>
+
+    
+            <h3>
+        <a id="0411-2017-08-25" class="anchor" href="#0411-2017-08-25" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.11
+
+        <small>
+            (2017-08-25)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.11" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Support resolving from default hosts file<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="250600914" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/75" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/75/hovercard" href="https://github.com/reactphp/dns/pull/75">#75</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="252074853" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/76" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/76/hovercard" href="https://github.com/reactphp/dns/pull/76">#76</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="252438414" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/77" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/77/hovercard" href="https://github.com/reactphp/dns/pull/77">#77</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>This means that resolving hosts such as <code>localhost</code> will now work as<br>
+expected across all platforms with no changes required:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$resolver</span><span class="pl-k">-&gt;</span>resolve(<span class="pl-s"><span class="pl-pds">'</span>localhost<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$ip</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>IP: <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$ip</span>;</span>
+<span class="pl-s1">});</span></pre></div>
+<p>The new <code>HostsExecutor</code> exists for advanced usage and is otherwise used<br>
+internally for this feature.</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="0410-2017-08-10" class="anchor" href="#0410-2017-08-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.10
+
+        <small>
+            (2017-08-10)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.10" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Forward compatibility with EventLoop v1.0 and v0.5 and<br>
+lock minimum dependencies and work around circular dependency for tests<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248800654" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/70" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/70/hovercard" href="https://github.com/reactphp/dns/pull/70">#70</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248831515" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/71" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/71/hovercard" href="https://github.com/reactphp/dns/pull/71">#71</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Work around DNS timeout issues for Windows users<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="249064150" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/74" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/74/hovercard" href="https://github.com/reactphp/dns/pull/74">#74</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Documentation and examples for advanced usage<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="240034073" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/66" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/66/hovercard" href="https://github.com/reactphp/dns/pull/66">#66</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+<li>
+<p>Remove broken TCP code, do not retry with invalid TCP query<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="249009781" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/73" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/73/hovercard" href="https://github.com/reactphp/dns/pull/73">#73</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by fixing HHVM build for now again and ignore future HHVM build errors and<br>
+lock Travis distro so new defaults will not break the build and<br>
+fix failing tests for PHP 7.1<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="240034347" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/68" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/68/hovercard" href="https://github.com/reactphp/dns/pull/68">#68</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248053285" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/69" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/69/hovercard" href="https://github.com/reactphp/dns/pull/69">#69</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248970395" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/72" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/72/hovercard" href="https://github.com/reactphp/dns/pull/72">#72</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="049-2017-05-01" class="anchor" href="#049-2017-05-01" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.9
+
+        <small>
+            (2017-05-01)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.9" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Forward compatibility with upcoming Socket v1.0 and v0.8<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="225206498" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/61" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/61/hovercard" href="https://github.com/reactphp/dns/pull/61">#61</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="048-2017-04-16" class="anchor" href="#048-2017-04-16" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.8
+
+        <small>
+            (2017-04-16)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.8" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Add support for the AAAA record type to the protocol parser<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="220659734" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/58" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/58/hovercard" href="https://github.com/reactphp/dns/pull/58">#58</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/othillo/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/othillo">@othillo</a>)</li>
+<li>Feature: Add support for the PTR record type to the protocol parser<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="220734850" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/59" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/59/hovercard" href="https://github.com/reactphp/dns/pull/59">#59</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/othillo/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/othillo">@othillo</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="047-2017-03-31" class="anchor" href="#047-2017-03-31" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.7
+
+        <small>
+            (2017-03-31)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.7" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Forward compatibility with upcoming Socket v0.6 and v0.7 component<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="218202152" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/57" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/57/hovercard" href="https://github.com/reactphp/dns/pull/57">#57</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="046-2017-03-11" class="anchor" href="#046-2017-03-11" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.6
+
+        <small>
+            (2017-03-11)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.6" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix: Fix DNS timeout issues for Windows users and add forward compatibility<br>
+with Stream v0.5 and upcoming v0.6<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="212768844" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/53" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/53/hovercard" href="https://github.com/reactphp/dns/pull/53">#53</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Improve test suite by adding PHPUnit to <code>require-dev</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="213293090" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/54" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/54/hovercard" href="https://github.com/reactphp/dns/pull/54">#54</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="045-2017-03-02" class="anchor" href="#045-2017-03-02" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.5
+
+        <small>
+            (2017-03-02)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.5" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix: Ensure we ignore the case of the answer<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="209582940" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/51" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/51/hovercard" href="https://github.com/reactphp/dns/pull/51">#51</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</li>
+<li>Feature: Add <code>TimeoutExecutor</code> and simplify internal APIs to allow internal<br>
+code re-use for upcoming versions.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="207147695" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/48" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/48/hovercard" href="https://github.com/reactphp/dns/pull/48">#48</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="207153598" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/49" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/49/hovercard" href="https://github.com/reactphp/dns/pull/49">#49</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="044-2017-02-13" class="anchor" href="#044-2017-02-13" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.4
+
+        <small>
+            (2017-02-13)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.4" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix: Fix handling connection and stream errors<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="207041103" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/45" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/45/hovercard" href="https://github.com/reactphp/dns/pull/45">#45</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Feature: Add examples and forward compatibility with upcoming Socket v0.5 component<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="207042590" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/46" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/46/hovercard" href="https://github.com/reactphp/dns/pull/46">#46</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="207145474" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/47" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/47/hovercard" href="https://github.com/reactphp/dns/pull/47">#47</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2016" class="anchor" href="#2016" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2016
+    </h2>
+
+    
+            <h3>
+        <a id="043-2016-08-01" class="anchor" href="#043-2016-08-01" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.3
+
+        <small>
+            (2016-08-01)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Allow for cache adapter injection (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="157938185" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/38" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/38/hovercard" href="https://github.com/reactphp/dns/pull/38">#38</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$factory</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Dns\Resolver\</span><span class="pl-c1">Factory</span>();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$cache</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">MyCustomCacheInstance</span>();</span>
+<span class="pl-s1"><span class="pl-smi">$resolver</span> <span class="pl-k">=</span> <span class="pl-smi">$factory</span><span class="pl-k">-&gt;</span>createCached(<span class="pl-s"><span class="pl-pds">'</span>8.8.8.8<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>, <span class="pl-smi">$cache</span>);</span></pre></div>
+</li>
+<li>
+<p>Feature: Support Promise cancellation (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="137350421" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/35" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/35/hovercard" href="https://github.com/reactphp/dns/pull/35">#35</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> <span class="pl-smi">$resolver</span><span class="pl-k">-&gt;</span>resolve(<span class="pl-s"><span class="pl-pds">'</span>reactphp.org<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$promise</span><span class="pl-k">-&gt;</span>cancel();</span></pre></div>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="042-2016-02-24" class="anchor" href="#042-2016-02-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.2
+
+        <small>
+            (2016-02-24)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Repository maintenance, split off from main repo, improve test suite and documentation</li>
+<li>First class support for PHP7 and HHVM (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="118217915" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/34" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/34/hovercard" href="https://github.com/reactphp/dns/pull/34">#34</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Adjust compatibility to 5.3 (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="108736802" data-permission-text="Title is private" data-url="https://github.com/reactphp/dns/issues/30" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/dns/pull/30/hovercard" href="https://github.com/reactphp/dns/pull/30">#30</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2014" class="anchor" href="#2014" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2014
+    </h2>
+
+    
+            <h3>
+        <a id="041-2014-04-12" class="anchor" href="#041-2014-04-12" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.1
+
+        <small>
+            (2014-04-12)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: Fixed PSR-4 autoload path (@marcj/WyriHaximus)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="040-2014-02-02" class="anchor" href="#040-2014-02-02" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.0
+
+        <small>
+            (2014-02-02)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.4.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>BC break: Bump minimum PHP version to PHP 5.4, remove 5.3 specific hacks</li>
+<li>BC break: Update to React/Promise 2.0</li>
+<li>Bug fix: Properly resolve CNAME aliases</li>
+<li>Dependency: Autoloading and filesystem structure now PSR-4 instead of PSR-0</li>
+<li>Bump React dependencies to v0.4</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2013" class="anchor" href="#2013" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2013
+    </h2>
+
+    
+            <h3>
+        <a id="032-2013-04-27" class="anchor" href="#032-2013-04-27" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.3.2
+
+        <small>
+            (2013-04-27)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.3.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Support default port for IPv6 addresses (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="030-2013-01-20" class="anchor" href="#030-2013-01-20" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.3.0
+
+        <small>
+            (2013-01-20)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.3.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bump React dependencies to v0.3</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2012" class="anchor" href="#2012" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2012
+    </h2>
+
+    
+            <h3>
+        <a id="026-2012-12-26" class="anchor" href="#026-2012-12-26" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.2.6
+
+        <small>
+            (2012-12-26)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.2.6" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: New cache component, used by DNS</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="025-2012-11-19" class="anchor" href="#025-2012-11-19" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.2.5
+
+        <small>
+            (2012-11-19)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.2.5" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="024-2012-11-17" class="anchor" href="#024-2012-11-17" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.2.4
+
+        <small>
+            (2012-11-17)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.2.4" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Change to promise-based API (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="023-2012-10-24" class="anchor" href="#023-2012-10-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.2.3
+
+        <small>
+            (2012-10-24)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.2.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="022-2012-10-24" class="anchor" href="#022-2012-10-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.2.2
+
+        <small>
+            (2012-10-24)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.2.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: DNS executor timeout handling (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/arnaud-lb/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/arnaud-lb">@arnaud-lb</a>)</li>
+<li>Feature: DNS retry executor (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/arnaud-lb/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/arnaud-lb">@arnaud-lb</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="021-2012-09-24" class="anchor" href="#021-2012-09-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.2.1
+
+        <small>
+            (2012-09-24)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.2.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Minor adjustments to DNS parser</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="020-2012-09-10" class="anchor" href="#020-2012-09-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.2.0
+
+        <small>
+            (2012-09-10)
+            <a href="https://github.com/reactphp/dns/releases/tag/v0.2.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: DNS resolver</li>
+</ul>
+
+    <hr>
+    
+    <ul class="links">
+        <li>
+            <a href="https://github.com/reactphp/dns/releases.atom">
+                <i class="icon-feed" aria-hidden="true"></i>
+                Subscribe to the Changelog feed
+            </a>
+        </li>
+    </ul>
+                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../dns/">DNS</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v1.2.0
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/dns#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v1.1.0#readme" class="version-selector__version">
+                                                    v1.1.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v1.0.0#readme" class="version-selector__version">
+                                                    v1.0.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.19#readme" class="version-selector__version">
+                                                    v0.4.19
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.18#readme" class="version-selector__version">
+                                                    v0.4.18
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.17#readme" class="version-selector__version">
+                                                    v0.4.17
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.16#readme" class="version-selector__version">
+                                                    v0.4.16
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.15#readme" class="version-selector__version">
+                                                    v0.4.15
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.14#readme" class="version-selector__version">
+                                                    v0.4.14
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.13#readme" class="version-selector__version">
+                                                    v0.4.13
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.12#readme" class="version-selector__version">
+                                                    v0.4.12
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.11#readme" class="version-selector__version">
+                                                    v0.4.11
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.10#readme" class="version-selector__version">
+                                                    v0.4.10
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.9#readme" class="version-selector__version">
+                                                    v0.4.9
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.8#readme" class="version-selector__version">
+                                                    v0.4.8
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.7#readme" class="version-selector__version">
+                                                    v0.4.7
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.6#readme" class="version-selector__version">
+                                                    v0.4.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.5#readme" class="version-selector__version">
+                                                    v0.4.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.4#readme" class="version-selector__version">
+                                                    v0.4.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.3#readme" class="version-selector__version">
+                                                    v0.4.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.2#readme" class="version-selector__version">
+                                                    v0.4.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.1#readme" class="version-selector__version">
+                                                    v0.4.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.0#readme" class="version-selector__version">
+                                                    v0.4.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.3.2#readme" class="version-selector__version">
+                                                    v0.3.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.3.0#readme" class="version-selector__version">
+                                                    v0.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.2.6#readme" class="version-selector__version">
+                                                    v0.2.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.2.5#readme" class="version-selector__version">
+                                                    v0.2.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.2.4#readme" class="version-selector__version">
+                                                    v0.2.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.2.3#readme" class="version-selector__version">
+                                                    v0.2.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.2.2#readme" class="version-selector__version">
+                                                    v0.2.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.2.1#readme" class="version-selector__version">
+                                                    v0.2.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.2.0#readme" class="version-selector__version">
+                                                    v0.2.0
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/dns">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../dns/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../dns/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/dns:^1.2.0</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (156 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (66 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/igorw">
+                                    <img src="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=80 2x" alt="igorw" title="igorw (47 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (47 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cboden">
+                                    <img src="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=80 2x" alt="cboden" title="cboden (16 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/arnaud-lb">
+                                    <img src="https://avatars3.githubusercontent.com/u/365207?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/365207?v=4&amp;s=80 2x" alt="arnaud-lb" title="arnaud-lb (3 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/carusogabriel">
+                                    <img src="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=80 2x" alt="carusogabriel" title="carusogabriel (3 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/othillo">
+                                    <img src="https://avatars3.githubusercontent.com/u/2786663?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/2786663?v=4&amp;s=80 2x" alt="othillo" title="othillo (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/nrk">
+                                    <img src="https://avatars0.githubusercontent.com/u/17923?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/17923?v=4&amp;s=80 2x" alt="nrk" title="nrk (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/e3betht">
+                                    <img src="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=80 2x" alt="e3betht" title="e3betht (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-dns-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-dns-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,2 6,1 12,1 18,2 24,2 30,17 36,18 42,5 48,2 54,3 60,7 66,2 72,1 78,1 84,1 90,1 96,1 102,1 108,1 114,2 120,1 126,1 132,1 138,1 144,1 150,1 156,2 162,2 168,1 174,1 180,1 186,1 192,1 198,1 204,1 210,1 216,1 222,1 228,1 234,2 240,2 246,1 252,2 258,2 264,1 270,1 276,1 282,2 288,1 294,1 300,1 306,1" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-dns-participation-gradient);mask:url(#reactphp-dns-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/dns/index.html b/dns/index.html
new file mode 100644
index 000000000..2e2a2e842
--- /dev/null
+++ b/dns/index.html
@@ -0,0 +1,886 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>DNS: 
+Dns - ReactPHP</title>
+
+        <meta name="description" content="Async DNS resolver for ReactPHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+            </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                                    <h1>DNS</h1>
+
+                    
+<p><a href="https://travis-ci.org/reactphp/dns" rel="nofollow"><img src="https://camo.githubusercontent.com/c70be9b64a3c50558a7739151cb849f51195a761/68747470733a2f2f7472617669732d63692e6f72672f72656163747068702f646e732e7376673f6272616e63683d6d6173746572" alt="Build Status" data-canonical-src="https://travis-ci.org/reactphp/dns.svg?branch=master" style="max-width:100%;"></a></p>
+<p>Async DNS resolver for <a href="https://reactphp.org/" rel="nofollow">ReactPHP</a>.</p>
+<p>The main point of the DNS component is to provide async DNS resolution.
+However, it is really a toolkit for working with DNS messages, and could
+easily be used to create a DNS server.</p>
+<p><strong>Table of contents</strong></p>
+<ul>
+<li><a href="#basic-usage">Basic usage</a></li>
+<li>
+<a href="#caching">Caching</a>
+<ul>
+<li><a href="#custom-cache-adapter">Custom cache adapter</a></li>
+</ul>
+</li>
+<li>
+<a href="#resolverinterface">ResolverInterface</a>
+<ul>
+<li><a href="#resolve">resolve()</a></li>
+<li><a href="#resolveall">resolveAll()</a></li>
+</ul>
+</li>
+<li>
+<a href="#advanced-usage">Advanced usage</a>
+<ul>
+<li><a href="#udptransportexecutor">UdpTransportExecutor</a></li>
+<li><a href="#tcptransportexecutor">TcpTransportExecutor</a></li>
+<li><a href="#selectivetransportexecutor">SelectiveTransportExecutor</a></li>
+<li><a href="#hostsfileexecutor">HostsFileExecutor</a></li>
+</ul>
+</li>
+<li><a href="#install">Install</a></li>
+<li><a href="#tests">Tests</a></li>
+<li><a href="#license">License</a></li>
+<li><a href="#references">References</a></li>
+</ul>
+<h2>
+<a id="basic-usage" class="anchor" href="#basic-usage" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Basic usage</h2>
+<p>The most basic usage is to just create a resolver through the resolver
+factory. All you need to give it is a nameserver, then you can start resolving
+names, baby!</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$loop</span> <span class="pl-k">=</span> <span class="pl-c1">React\EventLoop\</span><span class="pl-c1">Factory</span><span class="pl-k">::</span>create();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$config</span> <span class="pl-k">=</span> <span class="pl-c1">React\Dns\Config\</span><span class="pl-c1">Config</span><span class="pl-k">::</span>loadSystemConfigBlocking();</span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-smi">$config</span><span class="pl-k">-&gt;</span><span class="pl-smi">nameservers</span> ? <span class="pl-c1">reset</span>(<span class="pl-smi">$config</span><span class="pl-k">-&gt;</span><span class="pl-smi">nameservers</span>) : <span class="pl-s"><span class="pl-pds">'</span>8.8.8.8<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$factory</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Dns\Resolver\</span><span class="pl-c1">Factory</span>();</span>
+<span class="pl-s1"><span class="pl-smi">$dns</span> <span class="pl-k">=</span> <span class="pl-smi">$factory</span><span class="pl-k">-&gt;</span>create(<span class="pl-smi">$server</span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$dns</span><span class="pl-k">-&gt;</span>resolve(<span class="pl-s"><span class="pl-pds">'</span>igor.io<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$ip</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">"</span>Host: <span class="pl-smi">$ip</span><span class="pl-cce">\n</span><span class="pl-pds">"</span></span>;</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>run();</span></pre></div>
+<p>See also the <a href="https://github.com/reactphp/dns/blob/v1.2.0/examples">first example</a>.</p>
+<p>The <code>Config</code> class can be used to load the system default config. This is an
+operation that may access the filesystem and block. Ideally, this method should
+thus be executed only once before the loop starts and not repeatedly while it is
+running.
+Note that this class may return an <em>empty</em> configuration if the system config
+can not be loaded. As such, you'll likely want to apply a default nameserver
+as above if none can be found.</p>
+<blockquote>
+<p>Note that the factory loads the hosts file from the filesystem once when
+creating the resolver instance.
+Ideally, this method should thus be executed only once before the loop starts
+and not repeatedly while it is running.</p>
+</blockquote>
+<p>But there's more.</p>
+<h2>
+<a id="caching" class="anchor" href="#caching" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Caching</h2>
+<p>You can cache results by configuring the resolver to use a <code>CachedExecutor</code>:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$loop</span> <span class="pl-k">=</span> <span class="pl-c1">React\EventLoop\</span><span class="pl-c1">Factory</span><span class="pl-k">::</span>create();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$config</span> <span class="pl-k">=</span> <span class="pl-c1">React\Dns\Config\</span><span class="pl-c1">Config</span><span class="pl-k">::</span>loadSystemConfigBlocking();</span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-smi">$config</span><span class="pl-k">-&gt;</span><span class="pl-smi">nameservers</span> ? <span class="pl-c1">reset</span>(<span class="pl-smi">$config</span><span class="pl-k">-&gt;</span><span class="pl-smi">nameservers</span>) : <span class="pl-s"><span class="pl-pds">'</span>8.8.8.8<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$factory</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Dns\Resolver\</span><span class="pl-c1">Factory</span>();</span>
+<span class="pl-s1"><span class="pl-smi">$dns</span> <span class="pl-k">=</span> <span class="pl-smi">$factory</span><span class="pl-k">-&gt;</span>createCached(<span class="pl-smi">$server</span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$dns</span><span class="pl-k">-&gt;</span>resolve(<span class="pl-s"><span class="pl-pds">'</span>igor.io<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$ip</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">"</span>Host: <span class="pl-smi">$ip</span><span class="pl-cce">\n</span><span class="pl-pds">"</span></span>;</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-k">...</span></span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$dns</span><span class="pl-k">-&gt;</span>resolve(<span class="pl-s"><span class="pl-pds">'</span>igor.io<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$ip</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">"</span>Host: <span class="pl-smi">$ip</span><span class="pl-cce">\n</span><span class="pl-pds">"</span></span>;</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>run();</span></pre></div>
+<p>If the first call returns before the second, only one query will be executed.
+The second result will be served from an in memory cache.
+This is particularly useful for long running scripts where the same hostnames
+have to be looked up multiple times.</p>
+<p>See also the <a href="https://github.com/reactphp/dns/blob/v1.2.0/examples">third example</a>.</p>
+<h3>
+<a id="custom-cache-adapter" class="anchor" href="#custom-cache-adapter" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Custom cache adapter</h3>
+<p>By default, the above will use an in memory cache.</p>
+<p>You can also specify a custom cache implementing <a href="../cache/"><code>CacheInterface</code></a> to handle the record cache instead:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$cache</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Cache\</span><span class="pl-c1">ArrayCache</span>();</span>
+<span class="pl-s1"><span class="pl-smi">$loop</span> <span class="pl-k">=</span> <span class="pl-c1">React\EventLoop\</span><span class="pl-c1">Factory</span><span class="pl-k">::</span>create();</span>
+<span class="pl-s1"><span class="pl-smi">$factory</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Dns\Resolver\</span><span class="pl-c1">Factory</span>();</span>
+<span class="pl-s1"><span class="pl-smi">$dns</span> <span class="pl-k">=</span> <span class="pl-smi">$factory</span><span class="pl-k">-&gt;</span>createCached(<span class="pl-s"><span class="pl-pds">'</span>8.8.8.8<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>, <span class="pl-smi">$cache</span>);</span></pre></div>
+<p>See also the wiki for possible <a href="https://github.com/reactphp/react/wiki/Users#cache-implementations">cache implementations</a>.</p>
+<h2>
+<a id="resolverinterface" class="anchor" href="#resolverinterface" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>ResolverInterface</h2>
+<p><a id="resolver"></a></p>
+<h3>
+<a id="resolve" class="anchor" href="#resolve" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>resolve()</h3>
+<p>The <code>resolve(string $domain): PromiseInterface&lt;string,Exception&gt;</code> method can be used to
+resolve the given $domain name to a single IPv4 address (type <code>A</code> query).</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$resolver</span><span class="pl-k">-&gt;</span>resolve(<span class="pl-s"><span class="pl-pds">'</span>reactphp.org<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$ip</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>IP for reactphp.org is <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$ip</span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">});</span></pre></div>
+<p>This is one of the main methods in this package. It sends a DNS query
+for the given $domain name to your DNS server and returns a single IP
+address on success.</p>
+<p>If the DNS server sends a DNS response message that contains more than
+one IP address for this query, it will randomly pick one of the IP
+addresses from the response. If you want the full list of IP addresses
+or want to send a different type of query, you should use the
+<a href="#resolveall"><code>resolveAll()</code></a> method instead.</p>
+<p>If the DNS server sends a DNS response message that indicates an error
+code, this method will reject with a <code>RecordNotFoundException</code>. Its
+message and code can be used to check for the response code.</p>
+<p>If the DNS communication fails and the server does not respond with a
+valid response message, this message will reject with an <code>Exception</code>.</p>
+<p>Pending DNS queries can be cancelled by cancelling its pending promise like so:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> <span class="pl-smi">$resolver</span><span class="pl-k">-&gt;</span>resolve(<span class="pl-s"><span class="pl-pds">'</span>reactphp.org<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$promise</span><span class="pl-k">-&gt;</span>cancel();</span></pre></div>
+<h3>
+<a id="resolveall" class="anchor" href="#resolveall" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>resolveAll()</h3>
+<p>The <code>resolveAll(string $host, int $type): PromiseInterface&lt;array,Exception&gt;</code> method can be used to
+resolve all record values for the given $domain name and query $type.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$resolver</span><span class="pl-k">-&gt;</span>resolveAll(<span class="pl-s"><span class="pl-pds">'</span>reactphp.org<span class="pl-pds">'</span></span>, <span class="pl-c1">Message</span><span class="pl-k">::</span><span class="pl-c1">TYPE_A</span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$ips</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>IPv4 addresses for reactphp.org <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-c1">implode</span>(<span class="pl-s"><span class="pl-pds">'</span>, <span class="pl-pds">'</span></span>, <span class="pl-smi">$ips</span>) <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$resolver</span><span class="pl-k">-&gt;</span>resolveAll(<span class="pl-s"><span class="pl-pds">'</span>reactphp.org<span class="pl-pds">'</span></span>, <span class="pl-c1">Message</span><span class="pl-k">::</span><span class="pl-c1">TYPE_AAAA</span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$ips</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>IPv6 addresses for reactphp.org <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-c1">implode</span>(<span class="pl-s"><span class="pl-pds">'</span>, <span class="pl-pds">'</span></span>, <span class="pl-smi">$ips</span>) <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">});</span></pre></div>
+<p>This is one of the main methods in this package. It sends a DNS query
+for the given $domain name to your DNS server and returns a list with all
+record values on success.</p>
+<p>If the DNS server sends a DNS response message that contains one or more
+records for this query, it will return a list with all record values
+from the response. You can use the <code>Message::TYPE_*</code> constants to control
+which type of query will be sent. Note that this method always returns a
+list of record values, but each record value type depends on the query
+type. For example, it returns the IPv4 addresses for type <code>A</code> queries,
+the IPv6 addresses for type <code>AAAA</code> queries, the hostname for type <code>NS</code>,
+<code>CNAME</code> and <code>PTR</code> queries and structured data for other queries. See also
+the <code>Record</code> documentation for more details.</p>
+<p>If the DNS server sends a DNS response message that indicates an error
+code, this method will reject with a <code>RecordNotFoundException</code>. Its
+message and code can be used to check for the response code.</p>
+<p>If the DNS communication fails and the server does not respond with a
+valid response message, this message will reject with an <code>Exception</code>.</p>
+<p>Pending DNS queries can be cancelled by cancelling its pending promise like so:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> <span class="pl-smi">$resolver</span><span class="pl-k">-&gt;</span>resolveAll(<span class="pl-s"><span class="pl-pds">'</span>reactphp.org<span class="pl-pds">'</span></span>, <span class="pl-c1">Message</span><span class="pl-k">::</span><span class="pl-c1">TYPE_AAAA</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$promise</span><span class="pl-k">-&gt;</span>cancel();</span></pre></div>
+<h2>
+<a id="advanced-usage" class="anchor" href="#advanced-usage" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Advanced Usage</h2>
+<h3>
+<a id="udptransportexecutor" class="anchor" href="#udptransportexecutor" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>UdpTransportExecutor</h3>
+<p>The <code>UdpTransportExecutor</code> can be used to
+send DNS queries over a UDP transport.</p>
+<p>This is the main class that sends a DNS query to your DNS server and is used
+internally by the <code>Resolver</code> for the actual message transport.</p>
+<p>For more advanced usages one can utilize this class directly.
+The following example looks up the <code>IPv6</code> address for <code>igor.io</code>.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$loop</span> <span class="pl-k">=</span> <span class="pl-c1">Factory</span><span class="pl-k">::</span>create();</span>
+<span class="pl-s1"><span class="pl-smi">$executor</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">UdpTransportExecutor</span>(<span class="pl-s"><span class="pl-pds">'</span>8.8.8.8:53<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$executor</span><span class="pl-k">-&gt;</span>query(</span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">Query</span>(<span class="pl-smi">$name</span>, <span class="pl-c1">Message</span><span class="pl-k">::</span><span class="pl-c1">TYPE_AAAA</span>, <span class="pl-c1">Message</span><span class="pl-k">::</span><span class="pl-c1">CLASS_IN</span>)</span>
+<span class="pl-s1">)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-c1">Message</span> <span class="pl-smi">$message</span>) {</span>
+<span class="pl-s1">    <span class="pl-k">foreach</span> (<span class="pl-smi">$message</span><span class="pl-k">-&gt;</span><span class="pl-smi">answers</span> <span class="pl-k">as</span> <span class="pl-smi">$answer</span>) {</span>
+<span class="pl-s1">        <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>IPv6: <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$answer</span><span class="pl-k">-&gt;</span><span class="pl-smi">data</span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">    }</span>
+<span class="pl-s1">}, <span class="pl-s"><span class="pl-pds">'</span>printf<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>run();</span></pre></div>
+<p>See also the <a href="https://github.com/reactphp/dns/blob/v1.2.0/examples">fourth example</a>.</p>
+<p>Note that this executor does not implement a timeout, so you will very likely
+want to use this in combination with a <code>TimeoutExecutor</code> like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$executor</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">TimeoutExecutor</span>(</span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">UdpTransportExecutor</span>(<span class="pl-smi">$nameserver</span>, <span class="pl-smi">$loop</span>),</span>
+<span class="pl-s1">    <span class="pl-c1">3.0</span>,</span>
+<span class="pl-s1">    <span class="pl-smi">$loop</span></span>
+<span class="pl-s1">);</span></pre></div>
+<p>Also note that this executor uses an unreliable UDP transport and that it
+does not implement any retry logic, so you will likely want to use this in
+combination with a <code>RetryExecutor</code> like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$executor</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">RetryExecutor</span>(</span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">TimeoutExecutor</span>(</span>
+<span class="pl-s1">        <span class="pl-k">new</span> <span class="pl-c1">UdpTransportExecutor</span>(<span class="pl-smi">$nameserver</span>, <span class="pl-smi">$loop</span>),</span>
+<span class="pl-s1">        <span class="pl-c1">3.0</span>,</span>
+<span class="pl-s1">        <span class="pl-smi">$loop</span></span>
+<span class="pl-s1">    )</span>
+<span class="pl-s1">);</span></pre></div>
+<p>Note that this executor is entirely async and as such allows you to execute
+any number of queries concurrently. You should probably limit the number of
+concurrent queries in your application or you're very likely going to face
+rate limitations and bans on the resolver end. For many common applications,
+you may want to avoid sending the same query multiple times when the first
+one is still pending, so you will likely want to use this in combination with
+a <code>CoopExecutor</code> like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$executor</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">CoopExecutor</span>(</span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">RetryExecutor</span>(</span>
+<span class="pl-s1">        <span class="pl-k">new</span> <span class="pl-c1">TimeoutExecutor</span>(</span>
+<span class="pl-s1">            <span class="pl-k">new</span> <span class="pl-c1">UdpTransportExecutor</span>(<span class="pl-smi">$nameserver</span>, <span class="pl-smi">$loop</span>),</span>
+<span class="pl-s1">            <span class="pl-c1">3.0</span>,</span>
+<span class="pl-s1">            <span class="pl-smi">$loop</span></span>
+<span class="pl-s1">        )</span>
+<span class="pl-s1">    )</span>
+<span class="pl-s1">);</span></pre></div>
+<blockquote>
+<p>Internally, this class uses PHP's UDP sockets and does not take advantage
+of <a href="../datagram/">react/datagram</a> purely for
+organizational reasons to avoid a cyclic dependency between the two
+packages. Higher-level components should take advantage of the Datagram
+component instead of reimplementing this socket logic from scratch.</p>
+</blockquote>
+<h3>
+<a id="tcptransportexecutor" class="anchor" href="#tcptransportexecutor" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>TcpTransportExecutor</h3>
+<p>The <code>TcpTransportExecutor</code> class can be used to
+send DNS queries over a TCP/IP stream transport.</p>
+<p>This is one of the main classes that send a DNS query to your DNS server.</p>
+<p>For more advanced usages one can utilize this class directly.
+The following example looks up the <code>IPv6</code> address for <code>reactphp.org</code>.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$loop</span> <span class="pl-k">=</span> <span class="pl-c1">Factory</span><span class="pl-k">::</span>create();</span>
+<span class="pl-s1"><span class="pl-smi">$executor</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">TcpTransportExecutor</span>(<span class="pl-s"><span class="pl-pds">'</span>8.8.8.8:53<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$executor</span><span class="pl-k">-&gt;</span>query(</span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">Query</span>(<span class="pl-smi">$name</span>, <span class="pl-c1">Message</span><span class="pl-k">::</span><span class="pl-c1">TYPE_AAAA</span>, <span class="pl-c1">Message</span><span class="pl-k">::</span><span class="pl-c1">CLASS_IN</span>)</span>
+<span class="pl-s1">)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-c1">Message</span> <span class="pl-smi">$message</span>) {</span>
+<span class="pl-s1">    <span class="pl-k">foreach</span> (<span class="pl-smi">$message</span><span class="pl-k">-&gt;</span><span class="pl-smi">answers</span> <span class="pl-k">as</span> <span class="pl-smi">$answer</span>) {</span>
+<span class="pl-s1">        <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>IPv6: <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$answer</span><span class="pl-k">-&gt;</span><span class="pl-smi">data</span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">    }</span>
+<span class="pl-s1">}, <span class="pl-s"><span class="pl-pds">'</span>printf<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>run();</span></pre></div>
+<p>See also <a href="https://github.com/reactphp/dns/blob/v1.2.0/examples">example #92</a>.</p>
+<p>Note that this executor does not implement a timeout, so you will very likely
+want to use this in combination with a <code>TimeoutExecutor</code> like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$executor</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">TimeoutExecutor</span>(</span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">TcpTransportExecutor</span>(<span class="pl-smi">$nameserver</span>, <span class="pl-smi">$loop</span>),</span>
+<span class="pl-s1">    <span class="pl-c1">3.0</span>,</span>
+<span class="pl-s1">    <span class="pl-smi">$loop</span></span>
+<span class="pl-s1">);</span></pre></div>
+<p>Unlike the <code>UdpTransportExecutor</code>, this class uses a reliable TCP/IP
+transport, so you do not necessarily have to implement any retry logic.</p>
+<p>Note that this executor is entirely async and as such allows you to execute
+queries concurrently. The first query will establish a TCP/IP socket
+connection to the DNS server which will be kept open for a short period.
+Additional queries will automatically reuse this existing socket connection
+to the DNS server, will pipeline multiple requests over this single
+connection and will keep an idle connection open for a short period. The
+initial TCP/IP connection overhead may incur a slight delay if you only send
+occasional queries – when sending a larger number of concurrent queries over
+an existing connection, it becomes increasingly more efficient and avoids
+creating many concurrent sockets like the UDP-based executor. You may still
+want to limit the number of (concurrent) queries in your application or you
+may be facing rate limitations and bans on the resolver end. For many common
+applications, you may want to avoid sending the same query multiple times
+when the first one is still pending, so you will likely want to use this in
+combination with a <code>CoopExecutor</code> like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$executor</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">CoopExecutor</span>(</span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">TimeoutExecutor</span>(</span>
+<span class="pl-s1">        <span class="pl-k">new</span> <span class="pl-c1">TcpTransportExecutor</span>(<span class="pl-smi">$nameserver</span>, <span class="pl-smi">$loop</span>),</span>
+<span class="pl-s1">        <span class="pl-c1">3.0</span>,</span>
+<span class="pl-s1">        <span class="pl-smi">$loop</span></span>
+<span class="pl-s1">    )</span>
+<span class="pl-s1">);</span></pre></div>
+<blockquote>
+<p>Internally, this class uses PHP's TCP/IP sockets and does not take advantage
+of <a href="../socket/">react/socket</a> purely for
+organizational reasons to avoid a cyclic dependency between the two
+packages. Higher-level components should take advantage of the Socket
+component instead of reimplementing this socket logic from scratch.</p>
+</blockquote>
+<h3>
+<a id="selectivetransportexecutor" class="anchor" href="#selectivetransportexecutor" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>SelectiveTransportExecutor</h3>
+<p>The <code>SelectiveTransportExecutor</code> class can be used to
+Send DNS queries over a UDP or TCP/IP stream transport.</p>
+<p>This class will automatically choose the correct transport protocol to send
+a DNS query to your DNS server. It will always try to send it over the more
+efficient UDP transport first. If this query yields a size related issue
+(truncated messages), it will retry over a streaming TCP/IP transport.</p>
+<p>For more advanced usages one can utilize this class directly.
+The following example looks up the <code>IPv6</code> address for <code>reactphp.org</code>.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$executor</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">SelectiveTransportExecutor</span>(<span class="pl-smi">$udpExecutor</span>, <span class="pl-smi">$tcpExecutor</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$executor</span><span class="pl-k">-&gt;</span>query(</span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">Query</span>(<span class="pl-smi">$name</span>, <span class="pl-c1">Message</span><span class="pl-k">::</span><span class="pl-c1">TYPE_AAAA</span>, <span class="pl-c1">Message</span><span class="pl-k">::</span><span class="pl-c1">CLASS_IN</span>)</span>
+<span class="pl-s1">)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-c1">Message</span> <span class="pl-smi">$message</span>) {</span>
+<span class="pl-s1">    <span class="pl-k">foreach</span> (<span class="pl-smi">$message</span><span class="pl-k">-&gt;</span><span class="pl-smi">answers</span> <span class="pl-k">as</span> <span class="pl-smi">$answer</span>) {</span>
+<span class="pl-s1">        <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>IPv6: <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$answer</span><span class="pl-k">-&gt;</span><span class="pl-smi">data</span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">    }</span>
+<span class="pl-s1">}, <span class="pl-s"><span class="pl-pds">'</span>printf<span class="pl-pds">'</span></span>);</span></pre></div>
+<p>Note that this executor only implements the logic to select the correct
+transport for the given DNS query. Implementing the correct transport logic,
+implementing timeouts and any retry logic is left up to the given executors,
+see also <a href="#udptransportexecutor"><code>UdpTransportExecutor</code></a> and
+<a href="#tcptransportexecutor"><code>TcpTransportExecutor</code></a> for more details.</p>
+<p>Note that this executor is entirely async and as such allows you to execute
+any number of queries concurrently. You should probably limit the number of
+concurrent queries in your application or you're very likely going to face
+rate limitations and bans on the resolver end. For many common applications,
+you may want to avoid sending the same query multiple times when the first
+one is still pending, so you will likely want to use this in combination with
+a <code>CoopExecutor</code> like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$executor</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">CoopExecutor</span>(</span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">SelectiveTransportExecutor</span>(</span>
+<span class="pl-s1">        <span class="pl-smi">$datagramExecutor</span>,</span>
+<span class="pl-s1">        <span class="pl-smi">$streamExecutor</span></span>
+<span class="pl-s1">    )</span>
+<span class="pl-s1">);</span></pre></div>
+<h3>
+<a id="hostsfileexecutor" class="anchor" href="#hostsfileexecutor" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>HostsFileExecutor</h3>
+<p>Note that the above <code>UdpTransportExecutor</code> class always performs an actual DNS query.
+If you also want to take entries from your hosts file into account, you may
+use this code:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$hosts</span> <span class="pl-k">=</span> <span class="pl-c1">\React\Dns\Config\</span><span class="pl-c1">HostsFile</span><span class="pl-k">::</span>loadFromPathBlocking();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$executor</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">UdpTransportExecutor</span>(<span class="pl-s"><span class="pl-pds">'</span>8.8.8.8:53<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$executor</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">HostsFileExecutor</span>(<span class="pl-smi">$hosts</span>, <span class="pl-smi">$executor</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$executor</span><span class="pl-k">-&gt;</span>query(</span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">Query</span>(<span class="pl-s"><span class="pl-pds">'</span>localhost<span class="pl-pds">'</span></span>, <span class="pl-c1">Message</span><span class="pl-k">::</span><span class="pl-c1">TYPE_A</span>, <span class="pl-c1">Message</span><span class="pl-k">::</span><span class="pl-c1">CLASS_IN</span>)</span>
+<span class="pl-s1">);</span></pre></div>
+<h2>
+<a id="install" class="anchor" href="#install" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Install</h2>
+<p>The recommended way to install this library is <a href="https://getcomposer.org" rel="nofollow">through Composer</a>.
+<a href="https://getcomposer.org/doc/00-intro.md" rel="nofollow">New to Composer?</a></p>
+<p>This project follows <a href="https://semver.org/" rel="nofollow">SemVer</a>.
+This will install the latest supported version:</p>
+<div class="highlight highlight-source-shell"><pre>$ composer require react/dns:^1.2</pre></div>
+<p>See also the <a href="changelog.html">CHANGELOG</a> for details about version upgrades.</p>
+<p>This project aims to run on any platform and thus does not require any PHP
+extensions and supports running on legacy PHP 5.3 through current PHP 7+ and
+HHVM.
+It's <em>highly recommended to use PHP 7+</em> for this project.</p>
+<h2>
+<a id="tests" class="anchor" href="#tests" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Tests</h2>
+<p>To run the test suite, you first need to clone this repo and then install all
+dependencies <a href="https://getcomposer.org" rel="nofollow">through Composer</a>:</p>
+<div class="highlight highlight-source-shell"><pre>$ composer install</pre></div>
+<p>To run the test suite, go to the project root and run:</p>
+<div class="highlight highlight-source-shell"><pre>$ php vendor/bin/phpunit</pre></div>
+<p>The test suite also contains a number of functional integration tests that rely
+on a stable internet connection.
+If you do not want to run these, they can simply be skipped like this:</p>
+<div class="highlight highlight-source-shell"><pre>$ php vendor/bin/phpunit --exclude-group internet</pre></div>
+<h2>
+<a id="license" class="anchor" href="#license" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>License</h2>
+<p>MIT, see <a href="license.html">LICENSE file</a>.</p>
+<h2>
+<a id="references" class="anchor" href="#references" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>References</h2>
+<ul>
+<li>
+<a href="https://tools.ietf.org/html/rfc1034" rel="nofollow">RFC 1034</a> Domain Names - Concepts and Facilities</li>
+<li>
+<a href="https://tools.ietf.org/html/rfc1035" rel="nofollow">RFC 1035</a> Domain Names - Implementation and Specification</li>
+</ul>
+                                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../dns/">DNS</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v1.2.0
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/dns#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v1.1.0#readme" class="version-selector__version">
+                                                    v1.1.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v1.0.0#readme" class="version-selector__version">
+                                                    v1.0.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.19#readme" class="version-selector__version">
+                                                    v0.4.19
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.18#readme" class="version-selector__version">
+                                                    v0.4.18
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.17#readme" class="version-selector__version">
+                                                    v0.4.17
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.16#readme" class="version-selector__version">
+                                                    v0.4.16
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.15#readme" class="version-selector__version">
+                                                    v0.4.15
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.14#readme" class="version-selector__version">
+                                                    v0.4.14
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.13#readme" class="version-selector__version">
+                                                    v0.4.13
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.12#readme" class="version-selector__version">
+                                                    v0.4.12
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.11#readme" class="version-selector__version">
+                                                    v0.4.11
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.10#readme" class="version-selector__version">
+                                                    v0.4.10
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.9#readme" class="version-selector__version">
+                                                    v0.4.9
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.8#readme" class="version-selector__version">
+                                                    v0.4.8
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.7#readme" class="version-selector__version">
+                                                    v0.4.7
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.6#readme" class="version-selector__version">
+                                                    v0.4.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.5#readme" class="version-selector__version">
+                                                    v0.4.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.4#readme" class="version-selector__version">
+                                                    v0.4.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.3#readme" class="version-selector__version">
+                                                    v0.4.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.2#readme" class="version-selector__version">
+                                                    v0.4.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.1#readme" class="version-selector__version">
+                                                    v0.4.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.0#readme" class="version-selector__version">
+                                                    v0.4.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.3.2#readme" class="version-selector__version">
+                                                    v0.3.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.3.0#readme" class="version-selector__version">
+                                                    v0.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.2.6#readme" class="version-selector__version">
+                                                    v0.2.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.2.5#readme" class="version-selector__version">
+                                                    v0.2.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.2.4#readme" class="version-selector__version">
+                                                    v0.2.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.2.3#readme" class="version-selector__version">
+                                                    v0.2.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.2.2#readme" class="version-selector__version">
+                                                    v0.2.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.2.1#readme" class="version-selector__version">
+                                                    v0.2.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.2.0#readme" class="version-selector__version">
+                                                    v0.2.0
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/dns">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../dns/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../dns/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/dns:^1.2.0</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (156 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (66 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/igorw">
+                                    <img src="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=80 2x" alt="igorw" title="igorw (47 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (47 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cboden">
+                                    <img src="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=80 2x" alt="cboden" title="cboden (16 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/arnaud-lb">
+                                    <img src="https://avatars3.githubusercontent.com/u/365207?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/365207?v=4&amp;s=80 2x" alt="arnaud-lb" title="arnaud-lb (3 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/carusogabriel">
+                                    <img src="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=80 2x" alt="carusogabriel" title="carusogabriel (3 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/othillo">
+                                    <img src="https://avatars3.githubusercontent.com/u/2786663?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/2786663?v=4&amp;s=80 2x" alt="othillo" title="othillo (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/nrk">
+                                    <img src="https://avatars0.githubusercontent.com/u/17923?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/17923?v=4&amp;s=80 2x" alt="nrk" title="nrk (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/e3betht">
+                                    <img src="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=80 2x" alt="e3betht" title="e3betht (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-dns-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-dns-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,2 6,1 12,1 18,2 24,2 30,17 36,18 42,5 48,2 54,3 60,7 66,2 72,1 78,1 84,1 90,1 96,1 102,1 108,1 114,2 120,1 126,1 132,1 138,1 144,1 150,1 156,2 162,2 168,1 174,1 180,1 186,1 192,1 198,1 204,1 210,1 216,1 222,1 228,1 234,2 240,2 246,1 252,2 258,2 264,1 270,1 276,1 282,2 288,1 294,1 300,1 306,1" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-dns-participation-gradient);mask:url(#reactphp-dns-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/dns/license.html b/dns/license.html
new file mode 100644
index 000000000..c200e8344
--- /dev/null
+++ b/dns/license.html
@@ -0,0 +1,532 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>DNS: License - ReactPHP</title>
+
+        <meta name="description" content="Async DNS resolver for ReactPHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+            </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                    <h1>DNS License</h1>
+
+    <p>Copyright (c) 2012 Igor Wiedler, Chris Boden</p>
+<p>Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:</p>
+<p>The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.</p>
+<p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.</p>
+                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../dns/">DNS</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v1.2.0
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/dns#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v1.1.0#readme" class="version-selector__version">
+                                                    v1.1.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v1.0.0#readme" class="version-selector__version">
+                                                    v1.0.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.19#readme" class="version-selector__version">
+                                                    v0.4.19
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.18#readme" class="version-selector__version">
+                                                    v0.4.18
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.17#readme" class="version-selector__version">
+                                                    v0.4.17
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.16#readme" class="version-selector__version">
+                                                    v0.4.16
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.15#readme" class="version-selector__version">
+                                                    v0.4.15
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.14#readme" class="version-selector__version">
+                                                    v0.4.14
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.13#readme" class="version-selector__version">
+                                                    v0.4.13
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.12#readme" class="version-selector__version">
+                                                    v0.4.12
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.11#readme" class="version-selector__version">
+                                                    v0.4.11
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.10#readme" class="version-selector__version">
+                                                    v0.4.10
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.9#readme" class="version-selector__version">
+                                                    v0.4.9
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.8#readme" class="version-selector__version">
+                                                    v0.4.8
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.7#readme" class="version-selector__version">
+                                                    v0.4.7
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.6#readme" class="version-selector__version">
+                                                    v0.4.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.5#readme" class="version-selector__version">
+                                                    v0.4.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.4#readme" class="version-selector__version">
+                                                    v0.4.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.3#readme" class="version-selector__version">
+                                                    v0.4.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.2#readme" class="version-selector__version">
+                                                    v0.4.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.1#readme" class="version-selector__version">
+                                                    v0.4.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.4.0#readme" class="version-selector__version">
+                                                    v0.4.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.3.2#readme" class="version-selector__version">
+                                                    v0.3.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.3.0#readme" class="version-selector__version">
+                                                    v0.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.2.6#readme" class="version-selector__version">
+                                                    v0.2.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.2.5#readme" class="version-selector__version">
+                                                    v0.2.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.2.4#readme" class="version-selector__version">
+                                                    v0.2.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.2.3#readme" class="version-selector__version">
+                                                    v0.2.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.2.2#readme" class="version-selector__version">
+                                                    v0.2.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.2.1#readme" class="version-selector__version">
+                                                    v0.2.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/dns/tree/v0.2.0#readme" class="version-selector__version">
+                                                    v0.2.0
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/dns">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../dns/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../dns/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/dns:^1.2.0</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (156 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (66 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/igorw">
+                                    <img src="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=80 2x" alt="igorw" title="igorw (47 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (47 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cboden">
+                                    <img src="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=80 2x" alt="cboden" title="cboden (16 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/arnaud-lb">
+                                    <img src="https://avatars3.githubusercontent.com/u/365207?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/365207?v=4&amp;s=80 2x" alt="arnaud-lb" title="arnaud-lb (3 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/carusogabriel">
+                                    <img src="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=80 2x" alt="carusogabriel" title="carusogabriel (3 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/othillo">
+                                    <img src="https://avatars3.githubusercontent.com/u/2786663?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/2786663?v=4&amp;s=80 2x" alt="othillo" title="othillo (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/nrk">
+                                    <img src="https://avatars0.githubusercontent.com/u/17923?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/17923?v=4&amp;s=80 2x" alt="nrk" title="nrk (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/e3betht">
+                                    <img src="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=80 2x" alt="e3betht" title="e3betht (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-dns-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-dns-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,2 6,1 12,1 18,2 24,2 30,17 36,18 42,5 48,2 54,3 60,7 66,2 72,1 78,1 84,1 90,1 96,1 102,1 108,1 114,2 120,1 126,1 132,1 138,1 144,1 150,1 156,2 162,2 168,1 174,1 180,1 186,1 192,1 198,1 204,1 210,1 216,1 222,1 228,1 234,2 240,2 246,1 252,2 258,2 264,1 270,1 276,1 282,2 288,1 294,1 300,1 306,1" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-dns-participation-gradient);mask:url(#reactphp-dns-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/event-loop/changelog.html b/event-loop/changelog.html
new file mode 100644
index 000000000..2035a163a
--- /dev/null
+++ b/event-loop/changelog.html
@@ -0,0 +1,1324 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>EventLoop: Changelog - ReactPHP</title>
+
+        <meta name="description" content="ReactPHP&#039;s core reactor event loop that libraries can use for evented I/O.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+        <link href="https://github.com/reactphp/event-loop/releases.atom" type="application/atom+xml" rel="alternate" title="EventLoop Changelog">
+    </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                    <h1>EventLoop Changelog</h1>
+
+    <ul class="toc">
+            <li><a href="#2020" title="Jump to year 2020 (1 release)">2020</a></li>
+            <li><a href="#2019" title="Jump to year 2019 (1 release)">2019</a></li>
+            <li><a href="#2018" title="Jump to year 2018 (5 releases)">2018</a></li>
+            <li><a href="#2017" title="Jump to year 2017 (1 release)">2017</a></li>
+            <li><a href="#2016" title="Jump to year 2016 (2 releases)">2016</a></li>
+            <li><a href="#2014" title="Jump to year 2014 (2 releases)">2014</a></li>
+            <li><a href="#2013" title="Jump to year 2013 (4 releases)">2013</a></li>
+            <li><a href="#2012" title="Jump to year 2012 (5 releases)">2012</a></li>
+        </ul>
+
+    <h2>
+        <a id="2020" class="anchor" href="#2020" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2020
+    </h2>
+
+    
+            <h3>
+        <a id="111-2020-01-01" class="anchor" href="#111-2020-01-01" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.1.1
+
+        <small>
+            (2020-01-01)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v1.1.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Fix: Fix reporting connection refused errors with <code>ExtUvLoop</code> on Linux and <code>StreamSelectLoop</code> on Windows.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="543263503" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/207" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/207/hovercard" href="https://github.com/reactphp/event-loop/pull/207">#207</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="544149993" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/208" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/208/hovercard" href="https://github.com/reactphp/event-loop/pull/208">#208</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Fix unsupported EventConfig and <code>SEGFAULT</code> on shutdown with <code>ExtEventLoop</code> on Windows.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="542964895" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/205" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/205/hovercard" href="https://github.com/reactphp/event-loop/pull/205">#205</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Prevent interval overflow for timers very far in the future with <code>ExtUvLoop</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="445966113" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/196" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/196/hovercard" href="https://github.com/reactphp/event-loop/pull/196">#196</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/PabloKowalczyk/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/PabloKowalczyk">@PabloKowalczyk</a>)</p>
+</li>
+<li>
+<p>Fix: Check PCNTL functions for signal support instead of PCNTL extension with <code>StreamSelectLoop</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="441409833" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/195" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/195/hovercard" href="https://github.com/reactphp/event-loop/pull/195">#195</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Add <code>.gitattributes</code> to exclude dev files from exports.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="530765087" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/201" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/201/hovercard" href="https://github.com/reactphp/event-loop/pull/201">#201</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/reedy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/reedy">@reedy</a>)</p>
+</li>
+<li>
+<p>Improve test suite to fix testing <code>ExtUvLoop</code> on Travis,<br>
+fix Travis CI builds, do not install <code>libuv</code> on legacy PHP setups,<br>
+fix failing test cases due to inaccurate timers,<br>
+run tests on Windows via Travis CI and<br>
+run tests on PHP 7.4 and simplify test matrix and test setup.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="447465228" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/197" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/197/hovercard" href="https://github.com/reactphp/event-loop/pull/197">#197</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="531456371" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/202" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/202/hovercard" href="https://github.com/reactphp/event-loop/pull/202">#202</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="541787408" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/203" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/203/hovercard" href="https://github.com/reactphp/event-loop/pull/203">#203</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="541905883" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/204" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/204/hovercard" href="https://github.com/reactphp/event-loop/pull/204">#204</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="544160472" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/209" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/209/hovercard" href="https://github.com/reactphp/event-loop/pull/209">#209</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2019" class="anchor" href="#2019" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2019
+    </h2>
+
+    
+            <h3>
+        <a id="110-2019-02-07" class="anchor" href="#110-2019-02-07" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.1.0
+
+        <small>
+            (2019-02-07)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v1.1.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>New UV based event loop (ext-uv).<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="269913340" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/112" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/112/hovercard" href="https://github.com/reactphp/event-loop/pull/112">#112</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+<li>
+<p>Use high resolution timer on PHP 7.3+.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="407159925" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/182" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/182/hovercard" href="https://github.com/reactphp/event-loop/pull/182">#182</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve PCNTL signals by using async signal dispatching if available.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="398847598" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/179" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/179/hovercard" href="https://github.com/reactphp/event-loop/pull/179">#179</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/CharlotteDunois/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/CharlotteDunois">@CharlotteDunois</a>)</p>
+</li>
+<li>
+<p>Improve test suite and test suite set up.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="374434272" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/174" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/174/hovercard" href="https://github.com/reactphp/event-loop/pull/174">#174</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="406302085" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/181" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/181/hovercard" href="https://github.com/reactphp/event-loop/pull/181">#181</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix PCNTL signals edge case.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="407294905" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/183" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/183/hovercard" href="https://github.com/reactphp/event-loop/pull/183">#183</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2018" class="anchor" href="#2018" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2018
+    </h2>
+
+    
+            <h3>
+        <a id="100-2018-07-11" class="anchor" href="#100-2018-07-11" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.0.0
+
+        <small>
+            (2018-07-11)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v1.0.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>First stable LTS release, now following <a href="https://semver.org/" rel="nofollow">SemVer</a>.<br>
+We'd like to emphasize that this component is production ready and battle-tested.<br>
+We plan to support all long-term support (LTS) releases for at least 24 months,<br>
+so you have a rock-solid foundation to build on top of.</li>
+</ul>
+<blockquote>
+<p>Contains no other changes, so it's actually fully compatible with the v0.5.3 release.</p>
+</blockquote>
+
+    <hr>
+    
+            <h3>
+        <a id="053-2018-07-09" class="anchor" href="#053-2018-07-09" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.5.3
+
+        <small>
+            (2018-07-09)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.5.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Improve performance by importing global functions.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="331935499" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/167" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/167/hovercard" href="https://github.com/reactphp/event-loop/pull/167">#167</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/Ocramius/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Ocramius">@Ocramius</a>)</p>
+</li>
+<li>
+<p>Improve test suite by simplifying test bootstrap by using dev autoloader.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="335578689" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/169" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/169/hovercard" href="https://github.com/reactphp/event-loop/pull/169">#169</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/lcobucci/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/lcobucci">@lcobucci</a>)</p>
+</li>
+<li>
+<p>Minor internal changes to improved backward compatibility with PHP 5.3.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="321859321" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/166" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/166/hovercard" href="https://github.com/reactphp/event-loop/pull/166">#166</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/Donatello-za/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Donatello-za">@Donatello-za</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="052-2018-04-24" class="anchor" href="#052-2018-04-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.5.2
+
+        <small>
+            (2018-04-24)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.5.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Improve memory consumption and runtime performance for <code>StreamSelectLoop</code> timers.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="316493410" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/164" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/164/hovercard" href="https://github.com/reactphp/event-loop/pull/164">#164</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by removing I/O dependency at <code>StreamSelectLoopTest</code> to fix Mac OS X tests.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="312576351" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/161" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/161/hovercard" href="https://github.com/reactphp/event-loop/pull/161">#161</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/nawarian/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nawarian">@nawarian</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="051-2018-04-09" class="anchor" href="#051-2018-04-09" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.5.1
+
+        <small>
+            (2018-04-09)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.5.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: New <code>ExtEvLoop</code> (PECL ext-ev)  (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="288710348" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/148" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/148/hovercard" href="https://github.com/reactphp/event-loop/pull/148">#148</a> by @kaduev13)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="050-2018-04-05" class="anchor" href="#050-2018-04-05" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.5.0
+
+        <small>
+            (2018-04-05)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.5.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <p>A major feature release with a significant documentation overhaul and long overdue API cleanup!</p>
+<p>This update involves a number of BC breaks due to dropped support for deprecated<br>
+functionality. We've tried hard to avoid BC breaks where possible and minimize<br>
+impact otherwise. We expect that most consumers of this package will actually<br>
+not be affected by any BC breaks, see below for more details.</p>
+<p>We realize that the changes listed below may seem overwhelming, but we've tried<br>
+to be very clear about any possible BC breaks. Don't worry: In fact, all ReactPHP<br>
+components are already compatible and support both this new release as well as<br>
+providing backwards compatibility with the last release.</p>
+<ul>
+<li>
+<p>Feature / BC break: Add support for signal handling via new<br>
+<code>LoopInterface::addSignal()</code> and <code>LoopInterface::removeSignal()</code> methods.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="245468234" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/104" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/104/hovercard" href="https://github.com/reactphp/event-loop/pull/104">#104</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="265329808" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/111" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/111/hovercard" href="https://github.com/reactphp/event-loop/pull/111">#111</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="294792335" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/150" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/150/hovercard" href="https://github.com/reactphp/event-loop/pull/150">#150</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addSignal(<span class="pl-c1">SIGINT</span>, <span class="pl-k">function</span> () {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>CTRL-C<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1">});</span></pre></div>
+</li>
+<li>
+<p>Feature: Significant documentation updates for <code>LoopInterface</code> and <code>Factory</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="224109678" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/100" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/100/hovercard" href="https://github.com/reactphp/event-loop/pull/100">#100</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="273028149" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/119" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/119/hovercard" href="https://github.com/reactphp/event-loop/pull/119">#119</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278790822" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/126" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/126/hovercard" href="https://github.com/reactphp/event-loop/pull/126">#126</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278918982" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/127" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/127/hovercard" href="https://github.com/reactphp/event-loop/pull/127">#127</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="308582229" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/159" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/159/hovercard" href="https://github.com/reactphp/event-loop/pull/159">#159</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="311012657" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/160" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/160/hovercard" href="https://github.com/reactphp/event-loop/pull/160">#160</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="270054398" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/113" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/113/hovercard" href="https://github.com/reactphp/event-loop/pull/113">#113</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="207950166" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/81" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/81/hovercard" href="https://github.com/reactphp/event-loop/pull/81">#81</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="217249672" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/91" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/91/hovercard" href="https://github.com/reactphp/event-loop/pull/91">#91</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</p>
+</li>
+<li>
+<p>Feature: Add examples to ease getting started<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="224105021" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/99" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/99/hovercard" href="https://github.com/reactphp/event-loop/pull/99">#99</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="224109678" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/100" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/100/hovercard" href="https://github.com/reactphp/event-loop/pull/100">#100</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278523272" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/125" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/125/hovercard" href="https://github.com/reactphp/event-loop/pull/125">#125</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="188995801" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/59" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/59/hovercard" href="https://github.com/reactphp/event-loop/pull/59">#59</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="284245726" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/143" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/143/hovercard" href="https://github.com/reactphp/event-loop/pull/143">#143</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</p>
+</li>
+<li>
+<p>Feature: Documentation for advanced timer concepts, such as monotonic time source vs wall-clock time<br>
+and high precision timers with millisecond accuracy or below.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278965855" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/130" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/130/hovercard" href="https://github.com/reactphp/event-loop/pull/130">#130</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="308380978" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/157" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/157/hovercard" href="https://github.com/reactphp/event-loop/pull/157">#157</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Documentation for advanced stream concepts, such as edge-triggered event listeners<br>
+and stream buffers and allow throwing Exception if stream resource is not supported.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278954715" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/129" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/129/hovercard" href="https://github.com/reactphp/event-loop/pull/129">#129</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="308576284" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/158" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/158/hovercard" href="https://github.com/reactphp/event-loop/pull/158">#158</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Throw <code>BadMethodCallException</code> on manual loop creation when required extension isn't installed.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="300794188" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/153" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/153/hovercard" href="https://github.com/reactphp/event-loop/pull/153">#153</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+<li>
+<p>Feature / BC break: First class support for legacy PHP 5.3 through PHP 7.2 and HHVM<br>
+and remove all <code>callable</code> type hints for consistency reasons.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="283558370" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/141" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/141/hovercard" href="https://github.com/reactphp/event-loop/pull/141">#141</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="294901726" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/151" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/151/hovercard" href="https://github.com/reactphp/event-loop/pull/151">#151</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>BC break: Documentation for timer API and clean up unneeded timer API.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="224403165" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/102" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/102/hovercard" href="https://github.com/reactphp/event-loop/pull/102">#102</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>Remove <code>TimerInterface::cancel()</code>, use <code>LoopInterface::cancelTimer()</code> instead:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old (method invoked on timer instance)</span></span>
+<span class="pl-s1"><span class="pl-smi">$timer</span><span class="pl-k">-&gt;</span>cancel();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> already supported before: invoke method on loop instance</span></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>cancelTimer(<span class="pl-smi">$timer</span>);</span></pre></div>
+<p>Remove unneeded <code>TimerInterface::setData()</code> and <code>TimerInterface::getData()</code>,<br>
+use closure binding to add arbitrary data to timer instead:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old (limited setData() and getData() only allows single variable)</span></span>
+<span class="pl-s1"><span class="pl-smi">$name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>Tester<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1"><span class="pl-smi">$timer</span> <span class="pl-k">=</span> <span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addTimer(<span class="pl-c1">1.0</span>, <span class="pl-k">function</span> (<span class="pl-smi">$timer</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>Hello <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$timer</span><span class="pl-k">-&gt;</span>getData() <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"><span class="pl-smi">$timer</span><span class="pl-k">-&gt;</span>setData(<span class="pl-smi">$name</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> already supported before: closure binding allows any number of variables</span></span>
+<span class="pl-s1"><span class="pl-smi">$name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>Tester<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addTimer(<span class="pl-c1">1.0</span>, <span class="pl-k">function</span> () <span class="pl-k">use</span> (<span class="pl-smi">$name</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>Hello <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$name</span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">});</span></pre></div>
+<p>Remove unneeded <code>TimerInterface::getLoop()</code>, use closure binding instead:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old (getLoop() called on timer instance)</span></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addTimer(<span class="pl-c1">0.1</span>, <span class="pl-k">function</span> (<span class="pl-smi">$timer</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$timer</span><span class="pl-k">-&gt;</span>getLoop()<span class="pl-k">-&gt;</span>stop();</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> already supported before: use closure binding as usual</span></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addTimer(<span class="pl-c1">0.1</span>, <span class="pl-k">function</span> () <span class="pl-k">use</span> (<span class="pl-smi">$loop</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>stop();</span>
+<span class="pl-s1">});</span></pre></div>
+</li>
+<li>
+<p>BC break: Remove unneeded <code>LoopInterface::isTimerActive()</code> and<br>
+<code>TimerInterface::isActive()</code> to reduce API surface.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="279031792" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/133" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/133/hovercard" href="https://github.com/reactphp/event-loop/pull/133">#133</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old (method on timer instance or on loop instance)</span></span>
+<span class="pl-s1"><span class="pl-smi">$timer</span><span class="pl-k">-&gt;</span>isActive();</span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>isTimerActive(<span class="pl-smi">$timer</span>);</span></pre></div>
+</li>
+<li>
+<p>BC break: Move <code>TimerInterface</code> one level up to <code>React\EventLoop\TimerInterface</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="283022277" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/138" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/138/hovercard" href="https://github.com/reactphp/event-loop/pull/138">#138</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old (notice obsolete "Timer" namespace)</span></span>
+<span class="pl-s1"><span class="pl-c1">assert</span>(<span class="pl-smi">$timer</span> <span class="pl-k">instanceof</span> <span class="pl-c1">React\EventLoop\Timer\</span><span class="pl-c1">TimerInterface</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new</span></span>
+<span class="pl-s1"><span class="pl-c1">assert</span>(<span class="pl-smi">$timer</span> <span class="pl-k">instanceof</span> <span class="pl-c1">React\EventLoop\</span><span class="pl-c1">TimerInterface</span>);</span></pre></div>
+</li>
+<li>
+<p>BC break: Remove unneeded <code>LoopInterface::nextTick()</code> (and internal <code>NextTickQueue</code>),<br>
+use <code>LoopInterface::futureTick()</code> instead.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="85954441" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/30" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/30/hovercard" href="https://github.com/reactphp/event-loop/pull/30">#30</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old (removed)</span></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>nextTick(<span class="pl-k">function</span> () {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>tick<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> already supported before</span></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>futureTick(<span class="pl-k">function</span> () {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>tick<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1">});</span></pre></div>
+</li>
+<li>
+<p>BC break: Remove unneeded <code>$loop</code> argument for <code>LoopInterface::futureTick()</code><br>
+(and fix internal cyclic dependency).<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="224410862" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/103" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/103/hovercard" href="https://github.com/reactphp/event-loop/pull/103">#103</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old ($loop gets passed by default)</span></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>futureTick(<span class="pl-k">function</span> (<span class="pl-smi">$loop</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>stop();</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> already supported before: use closure binding as usual</span></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>futureTick(<span class="pl-k">function</span> () <span class="pl-k">use</span> (<span class="pl-smi">$loop</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>stop();</span>
+<span class="pl-s1">});</span></pre></div>
+</li>
+<li>
+<p>BC break: Remove unneeded <code>LoopInterface::tick()</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="205104548" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/72" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/72/hovercard" href="https://github.com/reactphp/event-loop/pull/72">#72</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old (removed)</span></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>tick();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> suggested work around for testing purposes only</span></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>futureTick(<span class="pl-k">function</span> () <span class="pl-k">use</span> (<span class="pl-smi">$loop</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>stop();</span>
+<span class="pl-s1">});</span></pre></div>
+</li>
+<li>
+<p>BC break: Documentation for advanced stream API and clean up unneeded stream API.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="265293115" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/110" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/110/hovercard" href="https://github.com/reactphp/event-loop/pull/110">#110</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>Remove unneeded <code>$loop</code> argument for <code>LoopInterface::addReadStream()</code><br>
+and <code>LoopInterface::addWriteStream()</code>, use closure binding instead:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old ($loop gets passed by default)</span></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addReadStream(<span class="pl-smi">$stream</span>, <span class="pl-k">function</span> (<span class="pl-smi">$stream</span>, <span class="pl-smi">$loop</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>removeReadStream(<span class="pl-smi">$stream</span>);</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> already supported before: use closure binding as usual</span></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addReadStream(<span class="pl-smi">$stream</span>, <span class="pl-k">function</span> (<span class="pl-smi">$stream</span>) <span class="pl-k">use</span> (<span class="pl-smi">$loop</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>removeReadStream(<span class="pl-smi">$stream</span>);</span>
+<span class="pl-s1">});</span></pre></div>
+</li>
+<li>
+<p>BC break: Remove unneeded <code>LoopInterface::removeStream()</code> method,<br>
+use <code>LoopInterface::removeReadStream()</code> and <code>LoopInterface::removeWriteStream()</code> instead.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="272972993" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/118" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/118/hovercard" href="https://github.com/reactphp/event-loop/pull/118">#118</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old</span></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>removeStream(<span class="pl-smi">$stream</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> already supported before</span></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>removeReadStream(<span class="pl-smi">$stream</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>removeWriteStream(<span class="pl-smi">$stream</span>);</span></pre></div>
+</li>
+<li>
+<p>BC break: Rename <code>LibEventLoop</code> to <code>ExtLibeventLoop</code> and <code>LibEvLoop</code> to <code>ExtLibevLoop</code><br>
+for consistent naming for event loop implementations.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278941271" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/128" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/128/hovercard" href="https://github.com/reactphp/event-loop/pull/128">#128</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>BC break: Remove optional <code>EventBaseConfig</code> argument from <code>ExtEventLoop</code><br>
+and make its <code>FEATURE_FDS</code> enabled by default.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="304173816" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/156" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/156/hovercard" href="https://github.com/reactphp/event-loop/pull/156">#156</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+<li>
+<p>BC break: Mark all classes as final to discourage inheritance.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278968312" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/131" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/131/hovercard" href="https://github.com/reactphp/event-loop/pull/131">#131</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Fix <code>ExtEventLoop</code> to keep track of stream resources (refcount)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278444721" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/123" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/123/hovercard" href="https://github.com/reactphp/event-loop/pull/123">#123</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Ensure large timer interval does not overflow on 32bit systems<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278987616" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/132" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/132/hovercard" href="https://github.com/reactphp/event-loop/pull/132">#132</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Fix separately removing readable and writable side of stream when closing<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="283218692" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/139" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/139/hovercard" href="https://github.com/reactphp/event-loop/pull/139">#139</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Properly clean up event watchers for <code>ext-event</code> and <code>ext-libev</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="294717134" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/149" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/149/hovercard" href="https://github.com/reactphp/event-loop/pull/149">#149</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Minor code cleanup and remove unneeded references<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="287557023" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/145" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/145/hovercard" href="https://github.com/reactphp/event-loop/pull/145">#145</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/seregazhuk/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/seregazhuk">@seregazhuk</a>)</p>
+</li>
+<li>
+<p>Fix: Discourage outdated <code>ext-libevent</code> on PHP 7<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="190101158" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/62" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/62/hovercard" href="https://github.com/reactphp/event-loop/pull/62">#62</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/cboden/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cboden">@cboden</a>)</p>
+</li>
+<li>
+<p>Improve test suite by adding forward compatibility with PHPUnit 6 and PHPUnit 5,<br>
+lock Travis distro so new defaults will not break the build,<br>
+improve test suite to be less fragile and increase test timeouts,<br>
+test against PHP 7.2 and reduce fwrite() call length to one chunk.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248031970" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/106" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/106/hovercard" href="https://github.com/reactphp/event-loop/pull/106">#106</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="284882235" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/144" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/144/hovercard" href="https://github.com/reactphp/event-loop/pull/144">#144</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="273339855" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/120" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/120/hovercard" href="https://github.com/reactphp/event-loop/pull/120">#120</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278458105" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/124" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/124/hovercard" href="https://github.com/reactphp/event-loop/pull/124">#124</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/carusogabriel/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/carusogabriel">@carusogabriel</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="288408980" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/147" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/147/hovercard" href="https://github.com/reactphp/event-loop/pull/147">#147</a> by nawarian and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="217835536" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/92" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/92/hovercard" href="https://github.com/reactphp/event-loop/pull/92">#92</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/kelunik/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kelunik">@kelunik</a>)</p>
+</li>
+<li>
+<p>A number of changes were originally planned for this release but have been backported<br>
+to the last <code>v0.4.3</code> already: <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="205542977" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/74" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/74/hovercard" href="https://github.com/reactphp/event-loop/pull/74">#74</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206321643" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/76" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/76/hovercard" href="https://github.com/reactphp/event-loop/pull/76">#76</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="207253463" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/79" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/79/hovercard" href="https://github.com/reactphp/event-loop/pull/79">#79</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="207950166" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/81" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/81/hovercard" href="https://github.com/reactphp/event-loop/pull/81">#81</a> (refs <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="199512405" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/65" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/65/hovercard" href="https://github.com/reactphp/event-loop/pull/65">#65</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="199529591" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/66" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/66/hovercard" href="https://github.com/reactphp/event-loop/pull/66">#66</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="200029677" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/67" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/67/hovercard" href="https://github.com/reactphp/event-loop/pull/67">#67</a>), <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="217041139" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/88" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/88/hovercard" href="https://github.com/reactphp/event-loop/pull/88">#88</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="219039277" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/93" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/93/hovercard" href="https://github.com/reactphp/event-loop/pull/93">#93</a></p>
+</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2017" class="anchor" href="#2017" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2017
+    </h2>
+
+    
+            <h3>
+        <a id="043-2017-04-27" class="anchor" href="#043-2017-04-27" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.3
+
+        <small>
+            (2017-04-27)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.4.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <p>This is a bug fix and improvement release:</p>
+<ul>
+<li>Bug fix: Bugfix in the usage sample code <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="185652338" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/57" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/57/hovercard" href="https://github.com/reactphp/event-loop/pull/57">#57</a> (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/dandelionred/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dandelionred">@dandelionred</a>)</li>
+<li>Improvement: Remove branch-alias definition <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="164108508" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/53" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/53/hovercard" href="https://github.com/reactphp/event-loop/pull/53">#53</a> (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</li>
+<li>Improvement: StreamSelectLoop: Use fresh time so Timers added during stream events are accurate <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="155989330" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/51" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/51/hovercard" href="https://github.com/reactphp/event-loop/pull/51">#51</a> (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/andrewminerd/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/andrewminerd">@andrewminerd</a>)</li>
+<li>Improvement: Avoid deprecation warnings in test suite due to deprecation of getMock() in PHPUnit <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="200036131" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/68" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/68/hovercard" href="https://github.com/reactphp/event-loop/pull/68">#68</a> (@martinschroeder)</li>
+<li>Improvement: Add PHPUnit 4.8 to require-dev <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="200829117" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/69" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/69/hovercard" href="https://github.com/reactphp/event-loop/pull/69">#69</a> (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/shaunbramley/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/shaunbramley">@shaunbramley</a>)</li>
+<li>Improvement: Increase test timeouts for HHVM and unify timeout handling <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="200949308" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/70" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/70/hovercard" href="https://github.com/reactphp/event-loop/pull/70">#70</a> (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Improvement: Travis improvements (backported from <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="205542977" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/74" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/74/hovercard" href="https://github.com/reactphp/event-loop/pull/74">#74</a>) <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206282793" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/75" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/75/hovercard" href="https://github.com/reactphp/event-loop/pull/75">#75</a> (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Improvement: Test suite now uses socket pairs instead of memory streams <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="199529591" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/66" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/66/hovercard" href="https://github.com/reactphp/event-loop/pull/66">#66</a> (@martinschroeder)</li>
+<li>Improvement: StreamSelectLoop: Test suite uses signal constant names in data provider <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="200029677" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/67" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/67/hovercard" href="https://github.com/reactphp/event-loop/pull/67">#67</a> (@martinschroeder)</li>
+<li>Improvement: ExtEventLoop: No longer suppress all errors <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="199512405" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/65" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/65/hovercard" href="https://github.com/reactphp/event-loop/pull/65">#65</a> (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/mamciek/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mamciek">@mamciek</a>)</li>
+<li>Improvement: Readme cleanup <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="217153774" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/89" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/89/hovercard" href="https://github.com/reactphp/event-loop/pull/89">#89</a> (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</li>
+<li>Improvement: Restructure and improve README <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="217177063" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/90" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/90/hovercard" href="https://github.com/reactphp/event-loop/pull/90">#90</a> (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</li>
+<li>Bug fix: StreamSelectLoop: Fix erroneous zero-time sleep (backport to 0.4) <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="219146470" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/94" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/94/hovercard" href="https://github.com/reactphp/event-loop/pull/94">#94</a> (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2016" class="anchor" href="#2016" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2016
+    </h2>
+
+    
+            <h3>
+        <a id="035-2016-12-28" class="anchor" href="#035-2016-12-28" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.3.5
+
+        <small>
+            (2016-12-28)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.3.5" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <p>This is a compatibility release that eases upgrading to the v0.4 release branch.<br>
+You should consider upgrading to the v0.4 release branch.</p>
+<ul>
+<li>Feature: Cap min timer interval at 1µs, thus improving compatibility with v0.4<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="140513082" data-permission-text="Title is private" data-url="https://github.com/reactphp/event-loop/issues/47" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/event-loop/pull/47/hovercard" href="https://github.com/reactphp/event-loop/pull/47">#47</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="042-2016-03-08" class="anchor" href="#042-2016-03-08" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.2
+
+        <small>
+            (2016-03-08)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.4.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: No longer error when signals sent to StreamSelectLoop</li>
+<li>Support HHVM and PHP7 (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/ondrejmirtes/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/ondrejmirtes">@ondrejmirtes</a>, <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/cebe/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cebe">@cebe</a>)</li>
+<li>Feature: Added support for EventConfig for ExtEventLoop (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/steverhoades/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/steverhoades">@steverhoades</a>)</li>
+<li>Bug fix: Fixed an issue loading loop extension libs via autoloader (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/czarpino/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/czarpino">@czarpino</a>)</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2014" class="anchor" href="#2014" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2014
+    </h2>
+
+    
+            <h3>
+        <a id="041-2014-02-26" class="anchor" href="#041-2014-02-26" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.1
+
+        <small>
+            (2014-02-26)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.4.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: null timeout in StreamSelectLoop causing 100% CPU usage (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Bug fix: v0.3.4 changes merged for v0.4.1</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="040-2014-02-02" class="anchor" href="#040-2014-02-02" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.0
+
+        <small>
+            (2014-02-02)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.4.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Added <code>EventLoopInterface::nextTick()</code>, implemented in all event loops (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jmalloc/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmalloc">@jmalloc</a>)</li>
+<li>Feature: Added <code>EventLoopInterface::futureTick()</code>, implemented in all event loops (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jmalloc/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmalloc">@jmalloc</a>)</li>
+<li>Feature: Added <code>ExtEventLoop</code> implementation using pecl/event (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jmalloc/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmalloc">@jmalloc</a>)</li>
+<li>BC break: Bump minimum PHP version to PHP 5.4, remove 5.3 specific hacks</li>
+<li>BC break: New method: <code>EventLoopInterface::nextTick()</code></li>
+<li>BC break: New method: <code>EventLoopInterface::futureTick()</code></li>
+<li>Dependency: Autoloading and filesystem structure now PSR-4 instead of PSR-0</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2013" class="anchor" href="#2013" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2013
+    </h2>
+
+    
+            <h3>
+        <a id="034-2013-07-21" class="anchor" href="#034-2013-07-21" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.3.4
+
+        <small>
+            (2013-07-21)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.3.4" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: Changed StreamSelectLoop to use non-blocking behavior on tick() (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/astephens25/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/astephens25">@astephens25</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="033-2013-07-08" class="anchor" href="#033-2013-07-08" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.3.3
+
+        <small>
+            (2013-07-08)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.3.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: No error on removing non-existent streams (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Bug fix: Do not silently remove feof listeners in <code>LibEvLoop</code></li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="030-2013-01-14" class="anchor" href="#030-2013-01-14" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.3.0
+
+        <small>
+            (2013-01-14)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.3.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>BC break: New timers API (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/nrk/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nrk">@nrk</a>)</li>
+<li>BC break: Remove check on return value from stream callbacks (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/nrk/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nrk">@nrk</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="027-2013-01-05" class="anchor" href="#027-2013-01-05" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.2.7
+
+        <small>
+            (2013-01-05)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.2.7" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: Fix libevent timers with PHP 5.3</li>
+<li>Bug fix: Fix libevent timer cancellation (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/nrk/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nrk">@nrk</a>)</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2012" class="anchor" href="#2012" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2012
+    </h2>
+
+    
+            <h3>
+        <a id="026-2012-12-26" class="anchor" href="#026-2012-12-26" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.2.6
+
+        <small>
+            (2012-12-26)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.2.6" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: Plug memory issue in libevent timers (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/cameronjacobson/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cameronjacobson">@cameronjacobson</a>)</li>
+<li>Bug fix: Correctly pause LibEvLoop on stop()</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="023-2012-11-12" class="anchor" href="#023-2012-11-12" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.2.3
+
+        <small>
+            (2012-11-12)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.2.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: LibEvLoop, integration of <code>php-libev</code></li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="020-2012-09-10" class="anchor" href="#020-2012-09-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.2.0
+
+        <small>
+            (2012-09-10)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.2.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="011-2012-07-12" class="anchor" href="#011-2012-07-12" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.1.1
+
+        <small>
+            (2012-07-12)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.1.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="010-2012-07-11" class="anchor" href="#010-2012-07-11" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.1.0
+
+        <small>
+            (2012-07-11)
+            <a href="https://github.com/reactphp/event-loop/releases/tag/v0.1.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>First tagged release</li>
+</ul>
+
+    <hr>
+    
+    <ul class="links">
+        <li>
+            <a href="https://github.com/reactphp/event-loop/releases.atom">
+                <i class="icon-feed" aria-hidden="true"></i>
+                Subscribe to the Changelog feed
+            </a>
+        </li>
+    </ul>
+                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../event-loop/">EventLoop</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v1.1.1
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/event-loop#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v1.1.0#readme" class="version-selector__version">
+                                                    v1.1.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v1.0.0#readme" class="version-selector__version">
+                                                    v1.0.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.5.3#readme" class="version-selector__version">
+                                                    v0.5.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.5.2#readme" class="version-selector__version">
+                                                    v0.5.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.5.1#readme" class="version-selector__version">
+                                                    v0.5.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.5.0#readme" class="version-selector__version">
+                                                    v0.5.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.4.3#readme" class="version-selector__version">
+                                                    v0.4.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.3.5#readme" class="version-selector__version">
+                                                    v0.3.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.4.2#readme" class="version-selector__version">
+                                                    v0.4.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.4.1#readme" class="version-selector__version">
+                                                    v0.4.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.4.0#readme" class="version-selector__version">
+                                                    v0.4.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.3.4#readme" class="version-selector__version">
+                                                    v0.3.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.3.3#readme" class="version-selector__version">
+                                                    v0.3.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.3.0#readme" class="version-selector__version">
+                                                    v0.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.2.7#readme" class="version-selector__version">
+                                                    v0.2.7
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.2.6#readme" class="version-selector__version">
+                                                    v0.2.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.2.3#readme" class="version-selector__version">
+                                                    v0.2.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.2.0#readme" class="version-selector__version">
+                                                    v0.2.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.1.1#readme" class="version-selector__version">
+                                                    v0.1.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.1.0#readme" class="version-selector__version">
+                                                    v0.1.0
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/event-loop">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../event-loop/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../event-loop/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/event-loop:^1.1.1</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (105 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (56 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (51 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/igorw">
+                                    <img src="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=80 2x" alt="igorw" title="igorw (46 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/nrk">
+                                    <img src="https://avatars0.githubusercontent.com/u/17923?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/17923?v=4&amp;s=80 2x" alt="nrk" title="nrk (33 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cboden">
+                                    <img src="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=80 2x" alt="cboden" title="cboden (31 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jmalloc">
+                                    <img src="https://avatars3.githubusercontent.com/u/761536?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/761536?v=4&amp;s=80 2x" alt="jmalloc" title="jmalloc (30 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cebe">
+                                    <img src="https://avatars0.githubusercontent.com/u/189796?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/189796?v=4&amp;s=80 2x" alt="cebe" title="cebe (6 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/ivkalita">
+                                    <img src="https://avatars3.githubusercontent.com/u/3984307?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/3984307?v=4&amp;s=80 2x" alt="ivkalita" title="ivkalita (6 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/kooldev">
+                                    <img src="https://avatars1.githubusercontent.com/u/53789145?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/53789145?v=4&amp;s=80 2x" alt="kooldev" title="kooldev (5 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/carusogabriel">
+                                    <img src="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=80 2x" alt="carusogabriel" title="carusogabriel (4 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/Ocramius">
+                                    <img src="https://avatars2.githubusercontent.com/u/154256?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/154256?v=4&amp;s=80 2x" alt="Ocramius" title="Ocramius (4 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cameronjacobson">
+                                    <img src="https://avatars1.githubusercontent.com/u/2303661?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/2303661?v=4&amp;s=80 2x" alt="cameronjacobson" title="cameronjacobson (3 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/kelunik">
+                                    <img src="https://avatars0.githubusercontent.com/u/2743004?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/2743004?v=4&amp;s=80 2x" alt="kelunik" title="kelunik (3 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/PabloKowalczyk">
+                                    <img src="https://avatars2.githubusercontent.com/u/11366345?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/11366345?v=4&amp;s=80 2x" alt="PabloKowalczyk" title="PabloKowalczyk (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/steverhoades">
+                                    <img src="https://avatars0.githubusercontent.com/u/1146668?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/1146668?v=4&amp;s=80 2x" alt="steverhoades" title="steverhoades (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/nawarian">
+                                    <img src="https://avatars2.githubusercontent.com/u/3905582?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/3905582?v=4&amp;s=80 2x" alt="nawarian" title="nawarian (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/andrewminerd">
+                                    <img src="https://avatars3.githubusercontent.com/u/488901?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/488901?v=4&amp;s=80 2x" alt="andrewminerd" title="andrewminerd (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/CharlotteDunois">
+                                    <img src="https://avatars0.githubusercontent.com/u/4529744?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/4529744?v=4&amp;s=80 2x" alt="CharlotteDunois" title="CharlotteDunois (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/DaveRandom">
+                                    <img src="https://avatars1.githubusercontent.com/u/2396425?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/2396425?v=4&amp;s=80 2x" alt="DaveRandom" title="DaveRandom (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/Donatello-za">
+                                    <img src="https://avatars3.githubusercontent.com/u/2649302?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/2649302?v=4&amp;s=80 2x" alt="Donatello-za" title="Donatello-za (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/greevex">
+                                    <img src="https://avatars3.githubusercontent.com/u/148401?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/148401?v=4&amp;s=80 2x" alt="greevex" title="greevex (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/lt">
+                                    <img src="https://avatars1.githubusercontent.com/u/1503065?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/1503065?v=4&amp;s=80 2x" alt="lt" title="lt (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/lcobucci">
+                                    <img src="https://avatars2.githubusercontent.com/u/201963?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/201963?v=4&amp;s=80 2x" alt="lcobucci" title="lcobucci (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/mkrauser">
+                                    <img src="https://avatars1.githubusercontent.com/u/494845?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/494845?v=4&amp;s=80 2x" alt="mkrauser" title="mkrauser (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/ondrejmirtes">
+                                    <img src="https://avatars0.githubusercontent.com/u/104888?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/104888?v=4&amp;s=80 2x" alt="ondrejmirtes" title="ondrejmirtes (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/pborreli">
+                                    <img src="https://avatars2.githubusercontent.com/u/77759?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/77759?v=4&amp;s=80 2x" alt="pborreli" title="pborreli (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/seregazhuk">
+                                    <img src="https://avatars3.githubusercontent.com/u/9959761?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/9959761?v=4&amp;s=80 2x" alt="seregazhuk" title="seregazhuk (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/dandelionred">
+                                    <img src="https://avatars0.githubusercontent.com/u/19490344?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/19490344?v=4&amp;s=80 2x" alt="dandelionred" title="dandelionred (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-event-loop-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-event-loop-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,1 6,1 12,1 18,1 24,1 30,1 36,1 42,1 48,2 54,2 60,2 66,1 72,1 78,1 84,1 90,1 96,1 102,1 108,1 114,1 120,1 126,1 132,1 138,1 144,1 150,1 156,4 162,1 168,1 174,7 180,14 186,1 192,1 198,1 204,1 210,1 216,1 222,1 228,1 234,1 240,1 246,1 252,1 258,1 264,1 270,1 276,1 282,1 288,1 294,1 300,1 306,1" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-event-loop-participation-gradient);mask:url(#reactphp-event-loop-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/event-loop/index.html b/event-loop/index.html
new file mode 100644
index 000000000..eaf628aa6
--- /dev/null
+++ b/event-loop/index.html
@@ -0,0 +1,1124 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>EventLoop: 
+EventLoop Component - ReactPHP</title>
+
+        <meta name="description" content="ReactPHP&#039;s core reactor event loop that libraries can use for evented I/O.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+            </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                                    <h1>EventLoop</h1>
+
+                    
+<p><a href="https://travis-ci.org/reactphp/event-loop" rel="nofollow"><img src="https://camo.githubusercontent.com/0de638bebe534e1474beb7f4e9c409ae169a12a0/68747470733a2f2f7472617669732d63692e6f72672f72656163747068702f6576656e742d6c6f6f702e7376673f6272616e63683d6d6173746572" alt="Build Status" data-canonical-src="https://travis-ci.org/reactphp/event-loop.svg?branch=master" style="max-width:100%;"></a></p>
+<p><a href="https://reactphp.org/" rel="nofollow">ReactPHP</a>'s core reactor event loop that libraries can use for evented I/O.</p>
+<p>In order for async based libraries to be interoperable, they need to use the
+same event loop. This component provides a common <code>LoopInterface</code> that any
+library can target. This allows them to be used in the same loop, with one
+single <a href="#run"><code>run()</code></a> call that is controlled by the user.</p>
+<p><strong>Table of Contents</strong></p>
+<ul>
+<li><a href="#quickstart-example">Quickstart example</a></li>
+<li>
+<a href="#usage">Usage</a>
+<ul>
+<li>
+<a href="#factory">Factory</a>
+<ul>
+<li><a href="#create">create()</a></li>
+</ul>
+</li>
+<li>
+<a href="#loop-implementations">Loop implementations</a>
+<ul>
+<li><a href="#streamselectloop">StreamSelectLoop</a></li>
+<li><a href="#exteventloop">ExtEventLoop</a></li>
+<li><a href="#extlibeventloop">ExtLibeventLoop</a></li>
+<li><a href="#extlibevloop">ExtLibevLoop</a></li>
+<li><a href="#extevloop">ExtEvLoop</a></li>
+<li><a href="#extuvloop">ExtUvLoop</a></li>
+</ul>
+</li>
+<li>
+<a href="#loopinterface">LoopInterface</a>
+<ul>
+<li><a href="#run">run()</a></li>
+<li><a href="#stop">stop()</a></li>
+<li><a href="#addtimer">addTimer()</a></li>
+<li><a href="#addperiodictimer">addPeriodicTimer()</a></li>
+<li><a href="#canceltimer">cancelTimer()</a></li>
+<li><a href="#futuretick">futureTick()</a></li>
+<li><a href="#addsignal">addSignal()</a></li>
+<li><a href="#removesignal">removeSignal()</a></li>
+<li><a href="#addreadstream">addReadStream()</a></li>
+<li><a href="#addwritestream">addWriteStream()</a></li>
+<li><a href="#removereadstream">removeReadStream()</a></li>
+<li><a href="#removewritestream">removeWriteStream()</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li><a href="#install">Install</a></li>
+<li><a href="#tests">Tests</a></li>
+<li><a href="#license">License</a></li>
+<li><a href="#more">More</a></li>
+</ul>
+<h2>
+<a id="quickstart-example" class="anchor" href="#quickstart-example" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Quickstart example</h2>
+<p>Here is an async HTTP server built with just the event loop.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$loop</span> <span class="pl-k">=</span> <span class="pl-c1">React\EventLoop\</span><span class="pl-c1">Factory</span><span class="pl-k">::</span>create();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-c1">stream_socket_server</span>(<span class="pl-s"><span class="pl-pds">'</span>tcp://127.0.0.1:8080<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"><span class="pl-c1">stream_set_blocking</span>(<span class="pl-smi">$server</span>, <span class="pl-c1">false</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addReadStream(<span class="pl-smi">$server</span>, <span class="pl-k">function</span> (<span class="pl-smi">$server</span>) <span class="pl-k">use</span> (<span class="pl-smi">$loop</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$conn</span> <span class="pl-k">=</span> <span class="pl-c1">stream_socket_accept</span>(<span class="pl-smi">$server</span>);</span>
+<span class="pl-s1">    <span class="pl-smi">$data</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>HTTP/1.1 200 OK<span class="pl-cce">\r\n</span>Content-Length: 3<span class="pl-cce">\r\n\r\n</span>Hi<span class="pl-cce">\n</span><span class="pl-pds">"</span></span>;</span>
+<span class="pl-s1">    <span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addWriteStream(<span class="pl-smi">$conn</span>, <span class="pl-k">function</span> (<span class="pl-smi">$conn</span>) <span class="pl-k">use</span> (<span class="pl-k">&amp;</span><span class="pl-smi">$data</span>, <span class="pl-smi">$loop</span>) {</span>
+<span class="pl-s1">        <span class="pl-smi">$written</span> <span class="pl-k">=</span> <span class="pl-c1">fwrite</span>(<span class="pl-smi">$conn</span>, <span class="pl-smi">$data</span>);</span>
+<span class="pl-s1">        <span class="pl-k">if</span> (<span class="pl-smi">$written</span> <span class="pl-k">===</span> <span class="pl-c1">strlen</span>(<span class="pl-smi">$data</span>)) {</span>
+<span class="pl-s1">            <span class="pl-c1">fclose</span>(<span class="pl-smi">$conn</span>);</span>
+<span class="pl-s1">            <span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>removeWriteStream(<span class="pl-smi">$conn</span>);</span>
+<span class="pl-s1">        } <span class="pl-k">else</span> {</span>
+<span class="pl-s1">            <span class="pl-smi">$data</span> <span class="pl-k">=</span> <span class="pl-c1">substr</span>(<span class="pl-smi">$data</span>, <span class="pl-smi">$written</span>);</span>
+<span class="pl-s1">        }</span>
+<span class="pl-s1">    });</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addPeriodicTimer(<span class="pl-c1">5</span>, <span class="pl-k">function</span> () {</span>
+<span class="pl-s1">    <span class="pl-smi">$memory</span> <span class="pl-k">=</span> <span class="pl-c1">memory_get_usage</span>() <span class="pl-k">/</span> <span class="pl-c1">1024</span>;</span>
+<span class="pl-s1">    <span class="pl-smi">$formatted</span> <span class="pl-k">=</span> <span class="pl-c1">number_format</span>(<span class="pl-smi">$memory</span>, <span class="pl-c1">3</span>)<span class="pl-k">.</span><span class="pl-s"><span class="pl-pds">'</span>K<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">"</span>Current memory usage: {<span class="pl-smi">$formatted</span>}<span class="pl-cce">\n</span><span class="pl-pds">"</span></span>;</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>run();</span></pre></div>
+<p>See also the <a href="https://github.com/reactphp/event-loop/blob/v1.1.1/examples">examples</a>.</p>
+<h2>
+<a id="usage" class="anchor" href="#usage" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Usage</h2>
+<p>Typical applications use a single event loop which is created at the beginning
+and run at the end of the program.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> [1]</span></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span> <span class="pl-k">=</span> <span class="pl-c1">React\EventLoop\</span><span class="pl-c1">Factory</span><span class="pl-k">::</span>create();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> [2]</span></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addPeriodicTimer(<span class="pl-c1">1</span>, <span class="pl-k">function</span> () {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">"</span>Tick<span class="pl-cce">\n</span><span class="pl-pds">"</span></span>;</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Stream\</span><span class="pl-c1">ReadableResourceStream</span>(</span>
+<span class="pl-s1">    <span class="pl-c1">fopen</span>(<span class="pl-s"><span class="pl-pds">'</span>file.txt<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>r<span class="pl-pds">'</span></span>),</span>
+<span class="pl-s1">    <span class="pl-smi">$loop</span></span>
+<span class="pl-s1">);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> [3]</span></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>run();</span></pre></div>
+<ol>
+<li>The loop instance is created at the beginning of the program. A convenience
+factory <a href="#create"><code>React\EventLoop\Factory::create()</code></a> is provided by this library which
+picks the best available <a href="#loop-implementations">loop implementation</a>.</li>
+<li>The loop instance is used directly or passed to library and application code.
+In this example, a periodic timer is registered with the event loop which
+simply outputs <code>Tick</code> every second and a
+<a href="../stream/#readableresourcestream">readable stream</a>
+is created by using ReactPHP's
+<a href="../stream/">stream component</a> for demonstration
+purposes.</li>
+<li>The loop is run with a single <a href="#run"><code>$loop-&gt;run()</code></a> call at the end of the program.</li>
+</ol>
+<h3>
+<a id="factory" class="anchor" href="#factory" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Factory</h3>
+<p>The <code>Factory</code> class exists as a convenient way to pick the best available
+<a href="#loop-implementations">event loop implementation</a>.</p>
+<h4>
+<a id="create" class="anchor" href="#create" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>create()</h4>
+<p>The <code>create(): LoopInterface</code> method can be used to create a new event loop
+instance:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$loop</span> <span class="pl-k">=</span> <span class="pl-c1">React\EventLoop\</span><span class="pl-c1">Factory</span><span class="pl-k">::</span>create();</span></pre></div>
+<p>This method always returns an instance implementing <a href="#loopinterface"><code>LoopInterface</code></a>,
+the actual <a href="#loop-implementations">event loop implementation</a> is an implementation detail.</p>
+<p>This method should usually only be called once at the beginning of the program.</p>
+<h3>
+<a id="loop-implementations" class="anchor" href="#loop-implementations" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Loop implementations</h3>
+<p>In addition to the <a href="#loopinterface"><code>LoopInterface</code></a>, there are a number of
+event loop implementations provided.</p>
+<p>All of the event loops support these features:</p>
+<ul>
+<li>File descriptor polling</li>
+<li>One-off timers</li>
+<li>Periodic timers</li>
+<li>Deferred execution on future loop tick</li>
+</ul>
+<p>For most consumers of this package, the underlying event loop implementation is
+an implementation detail.
+You should use the <a href="#factory"><code>Factory</code></a> to automatically create a new instance.</p>
+<p>Advanced! If you explicitly need a certain event loop implementation, you can
+manually instantiate one of the following classes.
+Note that you may have to install the required PHP extensions for the respective
+event loop implementation first or they will throw a <code>BadMethodCallException</code> on creation.</p>
+<h4>
+<a id="streamselectloop" class="anchor" href="#streamselectloop" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>StreamSelectLoop</h4>
+<p>A <code>stream_select()</code> based event loop.</p>
+<p>This uses the <a href="https://www.php.net/manual/en/function.stream-select.php" rel="nofollow"><code>stream_select()</code></a>
+function and is the only implementation which works out of the box with PHP.</p>
+<p>This event loop works out of the box on PHP 5.3 through PHP 7+ and HHVM.
+This means that no installation is required and this library works on all
+platforms and supported PHP versions.
+Accordingly, the <a href="#factory"><code>Factory</code></a> will use this event loop by default if
+you do not install any of the event loop extensions listed below.</p>
+<p>Under the hood, it does a simple <code>select</code> system call.
+This system call is limited to the maximum file descriptor number of
+<code>FD_SETSIZE</code> (platform dependent, commonly 1024) and scales with <code>O(m)</code>
+(<code>m</code> being the maximum file descriptor number passed).
+This means that you may run into issues when handling thousands of streams
+concurrently and you may want to look into using one of the alternative
+event loop implementations listed below in this case.
+If your use case is among the many common use cases that involve handling only
+dozens or a few hundred streams at once, then this event loop implementation
+performs really well.</p>
+<p>If you want to use signal handling (see also <a href="#addsignal"><code>addSignal()</code></a> below),
+this event loop implementation requires <code>ext-pcntl</code>.
+This extension is only available for Unix-like platforms and does not support
+Windows.
+It is commonly installed as part of many PHP distributions.
+If this extension is missing (or you're running on Windows), signal handling is
+not supported and throws a <code>BadMethodCallException</code> instead.</p>
+<p>This event loop is known to rely on wall-clock time to schedule future timers
+when using any version before PHP 7.3, because a monotonic time source is
+only available as of PHP 7.3 (<code>hrtime()</code>).
+While this does not affect many common use cases, this is an important
+distinction for programs that rely on a high time precision or on systems
+that are subject to discontinuous time adjustments (time jumps).
+This means that if you schedule a timer to trigger in 30s on PHP &lt; 7.3 and
+then adjust your system time forward by 20s, the timer may trigger in 10s.
+See also <a href="#addtimer"><code>addTimer()</code></a> for more details.</p>
+<h4>
+<a id="exteventloop" class="anchor" href="#exteventloop" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>ExtEventLoop</h4>
+<p>An <code>ext-event</code> based event loop.</p>
+<p>This uses the <a href="https://pecl.php.net/package/event" rel="nofollow"><code>event</code> PECL extension</a>.
+It supports the same backends as libevent.</p>
+<p>This loop is known to work with PHP 5.4 through PHP 7+.</p>
+<h4>
+<a id="extevloop" class="anchor" href="#extevloop" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>ExtEvLoop</h4>
+<p>An <code>ext-ev</code> based event loop.</p>
+<p>This loop uses the <a href="https://pecl.php.net/package/ev" rel="nofollow"><code>ev</code> PECL extension</a>, that
+provides an interface to <code>libev</code> library.</p>
+<p>This loop is known to work with PHP 5.4 through PHP 7+.</p>
+<h4>
+<a id="extuvloop" class="anchor" href="#extuvloop" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>ExtUvLoop</h4>
+<p>An <code>ext-uv</code> based event loop.</p>
+<p>This loop uses the <a href="https://pecl.php.net/package/uv" rel="nofollow"><code>uv</code> PECL extension</a>, that
+provides an interface to <code>libuv</code> library.</p>
+<p>This loop is known to work with PHP 7+.</p>
+<h4>
+<a id="extlibeventloop" class="anchor" href="#extlibeventloop" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>ExtLibeventLoop</h4>
+<p>An <code>ext-libevent</code> based event loop.</p>
+<p>This uses the <a href="https://pecl.php.net/package/libevent" rel="nofollow"><code>libevent</code> PECL extension</a>.
+<code>libevent</code> itself supports a number of system-specific backends (epoll, kqueue).</p>
+<p>This event loop does only work with PHP 5.
+An <a href="https://github.com/php/pecl-event-libevent/pull/2">unofficial update</a> for
+PHP 7 does exist, but it is known to cause regular crashes due to <code>SEGFAULT</code>s.
+To reiterate: Using this event loop on PHP 7 is not recommended.
+Accordingly, the <a href="#factory"><code>Factory</code></a> will not try to use this event loop on
+PHP 7.</p>
+<p>This event loop is known to trigger a readable listener only if
+the stream <em>becomes</em> readable (edge-triggered) and may not trigger if the
+stream has already been readable from the beginning.
+This also implies that a stream may not be recognized as readable when data
+is still left in PHP's internal stream buffers.
+As such, it's recommended to use <code>stream_set_read_buffer($stream, 0);</code>
+to disable PHP's internal read buffer in this case.
+See also <a href="#addreadstream"><code>addReadStream()</code></a> for more details.</p>
+<h4>
+<a id="extlibevloop" class="anchor" href="#extlibevloop" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>ExtLibevLoop</h4>
+<p>An <code>ext-libev</code> based event loop.</p>
+<p>This uses an <a href="https://github.com/m4rw3r/php-libev">unofficial <code>libev</code> extension</a>.
+It supports the same backends as libevent.</p>
+<p>This loop does only work with PHP 5.
+An update for PHP 7 is <a href="https://github.com/m4rw3r/php-libev/issues/8">unlikely</a>
+to happen any time soon.</p>
+<h3>
+<a id="loopinterface" class="anchor" href="#loopinterface" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>LoopInterface</h3>
+<h4>
+<a id="run" class="anchor" href="#run" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>run()</h4>
+<p>The <code>run(): void</code> method can be used to
+run the event loop until there are no more tasks to perform.</p>
+<p>For many applications, this method is the only directly visible
+invocation on the event loop.
+As a rule of thumb, it is usally recommended to attach everything to the
+same loop instance and then run the loop once at the bottom end of the
+application.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>run();</span></pre></div>
+<p>This method will keep the loop running until there are no more tasks
+to perform. In other words: This method will block until the last
+timer, stream and/or signal has been removed.</p>
+<p>Likewise, it is imperative to ensure the application actually invokes
+this method once. Adding listeners to the loop and missing to actually
+run it will result in the application exiting without actually waiting
+for any of the attached listeners.</p>
+<p>This method MUST NOT be called while the loop is already running.
+This method MAY be called more than once after it has explicity been
+<a href="#stop"><code>stop()</code>ped</a> or after it automatically stopped because it
+previously did no longer have anything to do.</p>
+<h4>
+<a id="stop" class="anchor" href="#stop" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>stop()</h4>
+<p>The <code>stop(): void</code> method can be used to
+instruct a running event loop to stop.</p>
+<p>This method is considered advanced usage and should be used with care.
+As a rule of thumb, it is usually recommended to let the loop stop
+only automatically when it no longer has anything to do.</p>
+<p>This method can be used to explicitly instruct the event loop to stop:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addTimer(<span class="pl-c1">3.0</span>, <span class="pl-k">function</span> () <span class="pl-k">use</span> (<span class="pl-smi">$loop</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>stop();</span>
+<span class="pl-s1">});</span></pre></div>
+<p>Calling this method on a loop instance that is not currently running or
+on a loop instance that has already been stopped has no effect.</p>
+<h4>
+<a id="addtimer" class="anchor" href="#addtimer" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>addTimer()</h4>
+<p>The <code>addTimer(float $interval, callable $callback): TimerInterface</code> method can be used to
+enqueue a callback to be invoked once after the given interval.</p>
+<p>The timer callback function MUST be able to accept a single parameter,
+the timer instance as also returned by this method or you MAY use a
+function which has no parameters at all.</p>
+<p>The timer callback function MUST NOT throw an <code>Exception</code>.
+The return value of the timer callback function will be ignored and has
+no effect, so for performance reasons you're recommended to not return
+any excessive data structures.</p>
+<p>Unlike <a href="#addperiodictimer"><code>addPeriodicTimer()</code></a>, this method will ensure
+the callback will be invoked only once after the given interval.
+You can invoke <a href="#canceltimer"><code>cancelTimer</code></a> to cancel a pending timer.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addTimer(<span class="pl-c1">0.8</span>, <span class="pl-k">function</span> () {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>world!<span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addTimer(<span class="pl-c1">0.3</span>, <span class="pl-k">function</span> () {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>hello <span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1">});</span></pre></div>
+<p>See also <a href="https://github.com/reactphp/event-loop/blob/v1.1.1/examples">example #1</a>.</p>
+<p>If you want to access any variables within your callback function, you
+can bind arbitrary data to a callback closure like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-k">function</span> <span class="pl-en">hello</span>(<span class="pl-smi">$name</span>, <span class="pl-c1">LoopInterface</span> <span class="pl-smi">$loop</span>)</span>
+<span class="pl-s1">{</span>
+<span class="pl-s1">    <span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addTimer(<span class="pl-c1">1.0</span>, <span class="pl-k">function</span> () <span class="pl-k">use</span> (<span class="pl-smi">$name</span>) {</span>
+<span class="pl-s1">        <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">"</span>hello <span class="pl-smi">$name</span><span class="pl-cce">\n</span><span class="pl-pds">"</span></span>;</span>
+<span class="pl-s1">    });</span>
+<span class="pl-s1">}</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">hello(<span class="pl-s"><span class="pl-pds">'</span>Tester<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+<p>This interface does not enforce any particular timer resolution, so
+special care may have to be taken if you rely on very high precision with
+millisecond accuracy or below. Event loop implementations SHOULD work on
+a best effort basis and SHOULD provide at least millisecond accuracy
+unless otherwise noted. Many existing event loop implementations are
+known to provide microsecond accuracy, but it's generally not recommended
+to rely on this high precision.</p>
+<p>Similarly, the execution order of timers scheduled to execute at the
+same time (within its possible accuracy) is not guaranteed.</p>
+<p>This interface suggests that event loop implementations SHOULD use a
+monotonic time source if available. Given that a monotonic time source is
+only available as of PHP 7.3 by default, event loop implementations MAY
+fall back to using wall-clock time.
+While this does not affect many common use cases, this is an important
+distinction for programs that rely on a high time precision or on systems
+that are subject to discontinuous time adjustments (time jumps).
+This means that if you schedule a timer to trigger in 30s and then adjust
+your system time forward by 20s, the timer SHOULD still trigger in 30s.
+See also <a href="#loop-implementations">event loop implementations</a> for more details.</p>
+<h4>
+<a id="addperiodictimer" class="anchor" href="#addperiodictimer" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>addPeriodicTimer()</h4>
+<p>The <code>addPeriodicTimer(float $interval, callable $callback): TimerInterface</code> method can be used to
+enqueue a callback to be invoked repeatedly after the given interval.</p>
+<p>The timer callback function MUST be able to accept a single parameter,
+the timer instance as also returned by this method or you MAY use a
+function which has no parameters at all.</p>
+<p>The timer callback function MUST NOT throw an <code>Exception</code>.
+The return value of the timer callback function will be ignored and has
+no effect, so for performance reasons you're recommended to not return
+any excessive data structures.</p>
+<p>Unlike <a href="#addtimer"><code>addTimer()</code></a>, this method will ensure the the
+callback will be invoked infinitely after the given interval or until you
+invoke <a href="#canceltimer"><code>cancelTimer</code></a>.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$timer</span> <span class="pl-k">=</span> <span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addPeriodicTimer(<span class="pl-c1">0.1</span>, <span class="pl-k">function</span> () {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>tick!<span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addTimer(<span class="pl-c1">1.0</span>, <span class="pl-k">function</span> () <span class="pl-k">use</span> (<span class="pl-smi">$loop</span>, <span class="pl-smi">$timer</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>cancelTimer(<span class="pl-smi">$timer</span>);</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>Done<span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">});</span></pre></div>
+<p>See also <a href="https://github.com/reactphp/event-loop/blob/v1.1.1/examples">example #2</a>.</p>
+<p>If you want to limit the number of executions, you can bind
+arbitrary data to a callback closure like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-k">function</span> <span class="pl-en">hello</span>(<span class="pl-smi">$name</span>, <span class="pl-c1">LoopInterface</span> <span class="pl-smi">$loop</span>)</span>
+<span class="pl-s1">{</span>
+<span class="pl-s1">    <span class="pl-smi">$n</span> <span class="pl-k">=</span> <span class="pl-c1">3</span>;</span>
+<span class="pl-s1">    <span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addPeriodicTimer(<span class="pl-c1">1.0</span>, <span class="pl-k">function</span> (<span class="pl-smi">$timer</span>) <span class="pl-k">use</span> (<span class="pl-smi">$name</span>, <span class="pl-smi">$loop</span>, <span class="pl-k">&amp;</span><span class="pl-smi">$n</span>) {</span>
+<span class="pl-s1">        <span class="pl-k">if</span> (<span class="pl-smi">$n</span> <span class="pl-k">&gt;</span> <span class="pl-c1">0</span>) {</span>
+<span class="pl-s1">            <span class="pl-k">--</span><span class="pl-smi">$n</span>;</span>
+<span class="pl-s1">            <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">"</span>hello <span class="pl-smi">$name</span><span class="pl-cce">\n</span><span class="pl-pds">"</span></span>;</span>
+<span class="pl-s1">        } <span class="pl-k">else</span> {</span>
+<span class="pl-s1">            <span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>cancelTimer(<span class="pl-smi">$timer</span>);</span>
+<span class="pl-s1">        }</span>
+<span class="pl-s1">    });</span>
+<span class="pl-s1">}</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">hello(<span class="pl-s"><span class="pl-pds">'</span>Tester<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+<p>This interface does not enforce any particular timer resolution, so
+special care may have to be taken if you rely on very high precision with
+millisecond accuracy or below. Event loop implementations SHOULD work on
+a best effort basis and SHOULD provide at least millisecond accuracy
+unless otherwise noted. Many existing event loop implementations are
+known to provide microsecond accuracy, but it's generally not recommended
+to rely on this high precision.</p>
+<p>Similarly, the execution order of timers scheduled to execute at the
+same time (within its possible accuracy) is not guaranteed.</p>
+<p>This interface suggests that event loop implementations SHOULD use a
+monotonic time source if available. Given that a monotonic time source is
+only available as of PHP 7.3 by default, event loop implementations MAY
+fall back to using wall-clock time.
+While this does not affect many common use cases, this is an important
+distinction for programs that rely on a high time precision or on systems
+that are subject to discontinuous time adjustments (time jumps).
+This means that if you schedule a timer to trigger in 30s and then adjust
+your system time forward by 20s, the timer SHOULD still trigger in 30s.
+See also <a href="#loop-implementations">event loop implementations</a> for more details.</p>
+<p>Additionally, periodic timers may be subject to timer drift due to
+re-scheduling after each invocation. As such, it's generally not
+recommended to rely on this for high precision intervals with millisecond
+accuracy or below.</p>
+<h4>
+<a id="canceltimer" class="anchor" href="#canceltimer" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>cancelTimer()</h4>
+<p>The <code>cancelTimer(TimerInterface $timer): void</code> method can be used to
+cancel a pending timer.</p>
+<p>See also <a href="#addperiodictimer"><code>addPeriodicTimer()</code></a> and <a href="https://github.com/reactphp/event-loop/blob/v1.1.1/examples">example #2</a>.</p>
+<p>Calling this method on a timer instance that has not been added to this
+loop instance or on a timer that has already been cancelled has no effect.</p>
+<h4>
+<a id="futuretick" class="anchor" href="#futuretick" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>futureTick()</h4>
+<p>The <code>futureTick(callable $listener): void</code> method can be used to
+schedule a callback to be invoked on a future tick of the event loop.</p>
+<p>This works very much similar to timers with an interval of zero seconds,
+but does not require the overhead of scheduling a timer queue.</p>
+<p>The tick callback function MUST be able to accept zero parameters.</p>
+<p>The tick callback function MUST NOT throw an <code>Exception</code>.
+The return value of the tick callback function will be ignored and has
+no effect, so for performance reasons you're recommended to not return
+any excessive data structures.</p>
+<p>If you want to access any variables within your callback function, you
+can bind arbitrary data to a callback closure like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-k">function</span> <span class="pl-en">hello</span>(<span class="pl-smi">$name</span>, <span class="pl-c1">LoopInterface</span> <span class="pl-smi">$loop</span>)</span>
+<span class="pl-s1">{</span>
+<span class="pl-s1">    <span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>futureTick(<span class="pl-k">function</span> () <span class="pl-k">use</span> (<span class="pl-smi">$name</span>) {</span>
+<span class="pl-s1">        <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">"</span>hello <span class="pl-smi">$name</span><span class="pl-cce">\n</span><span class="pl-pds">"</span></span>;</span>
+<span class="pl-s1">    });</span>
+<span class="pl-s1">}</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">hello(<span class="pl-s"><span class="pl-pds">'</span>Tester<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+<p>Unlike timers, tick callbacks are guaranteed to be executed in the order
+they are enqueued.
+Also, once a callback is enqueued, there's no way to cancel this operation.</p>
+<p>This is often used to break down bigger tasks into smaller steps (a form
+of cooperative multitasking).</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>futureTick(<span class="pl-k">function</span> () {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>b<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>futureTick(<span class="pl-k">function</span> () {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>c<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"><span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>a<span class="pl-pds">'</span></span>;</span></pre></div>
+<p>See also <a href="https://github.com/reactphp/event-loop/blob/v1.1.1/examples">example #3</a>.</p>
+<h4>
+<a id="addsignal" class="anchor" href="#addsignal" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>addSignal()</h4>
+<p>The <code>addSignal(int $signal, callable $listener): void</code> method can be used to
+register a listener to be notified when a signal has been caught by this process.</p>
+<p>This is useful to catch user interrupt signals or shutdown signals from
+tools like <code>supervisor</code> or <code>systemd</code>.</p>
+<p>The listener callback function MUST be able to accept a single parameter,
+the signal added by this method or you MAY use a function which
+has no parameters at all.</p>
+<p>The listener callback function MUST NOT throw an <code>Exception</code>.
+The return value of the listener callback function will be ignored and has
+no effect, so for performance reasons you're recommended to not return
+any excessive data structures.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addSignal(<span class="pl-c1">SIGINT</span>, <span class="pl-k">function</span> (<span class="pl-k">int</span> <span class="pl-smi">$signal</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>Caught user interrupt signal<span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">});</span></pre></div>
+<p>See also <a href="https://github.com/reactphp/event-loop/blob/v1.1.1/examples">example #4</a>.</p>
+<p>Signaling is only available on Unix-like platform, Windows isn't
+supported due to operating system limitations.
+This method may throw a <code>BadMethodCallException</code> if signals aren't
+supported on this platform, for example when required extensions are
+missing.</p>
+<p><strong>Note: A listener can only be added once to the same signal, any
+attempts to add it more then once will be ignored.</strong></p>
+<h4>
+<a id="removesignal" class="anchor" href="#removesignal" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>removeSignal()</h4>
+<p>The <code>removeSignal(int $signal, callable $listener): void</code> method can be used to
+remove a previously added signal listener.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>removeSignal(<span class="pl-c1">SIGINT</span>, <span class="pl-smi">$listener</span>);</span></pre></div>
+<p>Any attempts to remove listeners that aren't registered will be ignored.</p>
+<h4>
+<a id="addreadstream" class="anchor" href="#addreadstream" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>addReadStream()</h4>
+<blockquote>
+<p>Advanced! Note that this low-level API is considered advanced usage.
+Most use cases should probably use the higher-level
+<a href="../stream/#readablestreaminterface">readable Stream API</a>
+instead.</p>
+</blockquote>
+<p>The <code>addReadStream(resource $stream, callable $callback): void</code> method can be used to
+register a listener to be notified when a stream is ready to read.</p>
+<p>The first parameter MUST be a valid stream resource that supports
+checking whether it is ready to read by this loop implementation.
+A single stream resource MUST NOT be added more than once.
+Instead, either call <a href="#removereadstream"><code>removeReadStream()</code></a> first or
+react to this event with a single listener and then dispatch from this
+listener. This method MAY throw an <code>Exception</code> if the given resource type
+is not supported by this loop implementation.</p>
+<p>The listener callback function MUST be able to accept a single parameter,
+the stream resource added by this method or you MAY use a function which
+has no parameters at all.</p>
+<p>The listener callback function MUST NOT throw an <code>Exception</code>.
+The return value of the listener callback function will be ignored and has
+no effect, so for performance reasons you're recommended to not return
+any excessive data structures.</p>
+<p>If you want to access any variables within your callback function, you
+can bind arbitrary data to a callback closure like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addReadStream(<span class="pl-smi">$stream</span>, <span class="pl-k">function</span> (<span class="pl-smi">$stream</span>) <span class="pl-k">use</span> (<span class="pl-smi">$name</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-smi">$name</span> <span class="pl-k">.</span> <span class="pl-s"><span class="pl-pds">'</span> said: <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-c1">fread</span>(<span class="pl-smi">$stream</span>);</span>
+<span class="pl-s1">});</span></pre></div>
+<p>See also <a href="https://github.com/reactphp/event-loop/blob/v1.1.1/examples">example #11</a>.</p>
+<p>You can invoke <a href="#removereadstream"><code>removeReadStream()</code></a> to remove the
+read event listener for this stream.</p>
+<p>The execution order of listeners when multiple streams become ready at
+the same time is not guaranteed.</p>
+<p>Some event loop implementations are known to only trigger the listener if
+the stream <em>becomes</em> readable (edge-triggered) and may not trigger if the
+stream has already been readable from the beginning.
+This also implies that a stream may not be recognized as readable when data
+is still left in PHP's internal stream buffers.
+As such, it's recommended to use <code>stream_set_read_buffer($stream, 0);</code>
+to disable PHP's internal read buffer in this case.</p>
+<h4>
+<a id="addwritestream" class="anchor" href="#addwritestream" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>addWriteStream()</h4>
+<blockquote>
+<p>Advanced! Note that this low-level API is considered advanced usage.
+Most use cases should probably use the higher-level
+<a href="../stream/#writablestreaminterface">writable Stream API</a>
+instead.</p>
+</blockquote>
+<p>The <code>addWriteStream(resource $stream, callable $callback): void</code> method can be used to
+register a listener to be notified when a stream is ready to write.</p>
+<p>The first parameter MUST be a valid stream resource that supports
+checking whether it is ready to write by this loop implementation.
+A single stream resource MUST NOT be added more than once.
+Instead, either call <a href="#removewritestream"><code>removeWriteStream()</code></a> first or
+react to this event with a single listener and then dispatch from this
+listener. This method MAY throw an <code>Exception</code> if the given resource type
+is not supported by this loop implementation.</p>
+<p>The listener callback function MUST be able to accept a single parameter,
+the stream resource added by this method or you MAY use a function which
+has no parameters at all.</p>
+<p>The listener callback function MUST NOT throw an <code>Exception</code>.
+The return value of the listener callback function will be ignored and has
+no effect, so for performance reasons you're recommended to not return
+any excessive data structures.</p>
+<p>If you want to access any variables within your callback function, you
+can bind arbitrary data to a callback closure like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addWriteStream(<span class="pl-smi">$stream</span>, <span class="pl-k">function</span> (<span class="pl-smi">$stream</span>) <span class="pl-k">use</span> (<span class="pl-smi">$name</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">fwrite</span>(<span class="pl-smi">$stream</span>, <span class="pl-s"><span class="pl-pds">'</span>Hello <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$name</span>);</span>
+<span class="pl-s1">});</span></pre></div>
+<p>See also <a href="https://github.com/reactphp/event-loop/blob/v1.1.1/examples">example #12</a>.</p>
+<p>You can invoke <a href="#removewritestream"><code>removeWriteStream()</code></a> to remove the
+write event listener for this stream.</p>
+<p>The execution order of listeners when multiple streams become ready at
+the same time is not guaranteed.</p>
+<h4>
+<a id="removereadstream" class="anchor" href="#removereadstream" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>removeReadStream()</h4>
+<p>The <code>removeReadStream(resource $stream): void</code> method can be used to
+remove the read event listener for the given stream.</p>
+<p>Removing a stream from the loop that has already been removed or trying
+to remove a stream that was never added or is invalid has no effect.</p>
+<h4>
+<a id="removewritestream" class="anchor" href="#removewritestream" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>removeWriteStream()</h4>
+<p>The <code>removeWriteStream(resource $stream): void</code> method can be used to
+remove the write event listener for the given stream.</p>
+<p>Removing a stream from the loop that has already been removed or trying
+to remove a stream that was never added or is invalid has no effect.</p>
+<h2>
+<a id="install" class="anchor" href="#install" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Install</h2>
+<p>The recommended way to install this library is <a href="https://getcomposer.org" rel="nofollow">through Composer</a>.
+<a href="https://getcomposer.org/doc/00-intro.md" rel="nofollow">New to Composer?</a></p>
+<p>This project follows <a href="https://semver.org/" rel="nofollow">SemVer</a>.
+This will install the latest supported version:</p>
+<div class="highlight highlight-source-shell"><pre>$ composer require react/event-loop:^1.1.1</pre></div>
+<p>See also the <a href="changelog.html">CHANGELOG</a> for details about version upgrades.</p>
+<p>This project aims to run on any platform and thus does not require any PHP
+extensions and supports running on legacy PHP 5.3 through current PHP 7+ and
+HHVM.
+It's <em>highly recommended to use PHP 7+</em> for this project.</p>
+<p>Installing any of the event loop extensions is suggested, but entirely optional.
+See also <a href="#loop-implementations">event loop implementations</a> for more details.</p>
+<h2>
+<a id="tests" class="anchor" href="#tests" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Tests</h2>
+<p>To run the test suite, you first need to clone this repo and then install all
+dependencies <a href="https://getcomposer.org" rel="nofollow">through Composer</a>:</p>
+<div class="highlight highlight-source-shell"><pre>$ composer install</pre></div>
+<p>To run the test suite, go to the project root and run:</p>
+<div class="highlight highlight-source-shell"><pre>$ php vendor/bin/phpunit</pre></div>
+<h2>
+<a id="license" class="anchor" href="#license" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>License</h2>
+<p>MIT, see <a href="license.html">LICENSE file</a>.</p>
+<h2>
+<a id="more" class="anchor" href="#more" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>More</h2>
+<ul>
+<li>See our <a href="../stream/">Stream component</a> for more
+information on how streams are used in real-world applications.</li>
+<li>See our <a href="https://github.com/reactphp/react/wiki/Users">users wiki</a> and the
+<a href="https://packagist.org/packages/react/event-loop/dependents" rel="nofollow">dependents on Packagist</a>
+for a list of packages that use the EventLoop in real-world applications.</li>
+</ul>
+                                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../event-loop/">EventLoop</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v1.1.1
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/event-loop#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v1.1.0#readme" class="version-selector__version">
+                                                    v1.1.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v1.0.0#readme" class="version-selector__version">
+                                                    v1.0.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.5.3#readme" class="version-selector__version">
+                                                    v0.5.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.5.2#readme" class="version-selector__version">
+                                                    v0.5.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.5.1#readme" class="version-selector__version">
+                                                    v0.5.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.5.0#readme" class="version-selector__version">
+                                                    v0.5.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.4.3#readme" class="version-selector__version">
+                                                    v0.4.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.3.5#readme" class="version-selector__version">
+                                                    v0.3.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.4.2#readme" class="version-selector__version">
+                                                    v0.4.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.4.1#readme" class="version-selector__version">
+                                                    v0.4.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.4.0#readme" class="version-selector__version">
+                                                    v0.4.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.3.4#readme" class="version-selector__version">
+                                                    v0.3.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.3.3#readme" class="version-selector__version">
+                                                    v0.3.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.3.0#readme" class="version-selector__version">
+                                                    v0.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.2.7#readme" class="version-selector__version">
+                                                    v0.2.7
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.2.6#readme" class="version-selector__version">
+                                                    v0.2.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.2.3#readme" class="version-selector__version">
+                                                    v0.2.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.2.0#readme" class="version-selector__version">
+                                                    v0.2.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.1.1#readme" class="version-selector__version">
+                                                    v0.1.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.1.0#readme" class="version-selector__version">
+                                                    v0.1.0
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/event-loop">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../event-loop/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../event-loop/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/event-loop:^1.1.1</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (105 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (56 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (51 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/igorw">
+                                    <img src="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=80 2x" alt="igorw" title="igorw (46 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/nrk">
+                                    <img src="https://avatars0.githubusercontent.com/u/17923?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/17923?v=4&amp;s=80 2x" alt="nrk" title="nrk (33 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cboden">
+                                    <img src="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=80 2x" alt="cboden" title="cboden (31 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jmalloc">
+                                    <img src="https://avatars3.githubusercontent.com/u/761536?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/761536?v=4&amp;s=80 2x" alt="jmalloc" title="jmalloc (30 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cebe">
+                                    <img src="https://avatars0.githubusercontent.com/u/189796?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/189796?v=4&amp;s=80 2x" alt="cebe" title="cebe (6 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/ivkalita">
+                                    <img src="https://avatars3.githubusercontent.com/u/3984307?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/3984307?v=4&amp;s=80 2x" alt="ivkalita" title="ivkalita (6 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/kooldev">
+                                    <img src="https://avatars1.githubusercontent.com/u/53789145?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/53789145?v=4&amp;s=80 2x" alt="kooldev" title="kooldev (5 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/carusogabriel">
+                                    <img src="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=80 2x" alt="carusogabriel" title="carusogabriel (4 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/Ocramius">
+                                    <img src="https://avatars2.githubusercontent.com/u/154256?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/154256?v=4&amp;s=80 2x" alt="Ocramius" title="Ocramius (4 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cameronjacobson">
+                                    <img src="https://avatars1.githubusercontent.com/u/2303661?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/2303661?v=4&amp;s=80 2x" alt="cameronjacobson" title="cameronjacobson (3 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/kelunik">
+                                    <img src="https://avatars0.githubusercontent.com/u/2743004?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/2743004?v=4&amp;s=80 2x" alt="kelunik" title="kelunik (3 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/PabloKowalczyk">
+                                    <img src="https://avatars2.githubusercontent.com/u/11366345?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/11366345?v=4&amp;s=80 2x" alt="PabloKowalczyk" title="PabloKowalczyk (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/steverhoades">
+                                    <img src="https://avatars0.githubusercontent.com/u/1146668?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/1146668?v=4&amp;s=80 2x" alt="steverhoades" title="steverhoades (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/nawarian">
+                                    <img src="https://avatars2.githubusercontent.com/u/3905582?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/3905582?v=4&amp;s=80 2x" alt="nawarian" title="nawarian (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/andrewminerd">
+                                    <img src="https://avatars3.githubusercontent.com/u/488901?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/488901?v=4&amp;s=80 2x" alt="andrewminerd" title="andrewminerd (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/CharlotteDunois">
+                                    <img src="https://avatars0.githubusercontent.com/u/4529744?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/4529744?v=4&amp;s=80 2x" alt="CharlotteDunois" title="CharlotteDunois (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/DaveRandom">
+                                    <img src="https://avatars1.githubusercontent.com/u/2396425?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/2396425?v=4&amp;s=80 2x" alt="DaveRandom" title="DaveRandom (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/Donatello-za">
+                                    <img src="https://avatars3.githubusercontent.com/u/2649302?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/2649302?v=4&amp;s=80 2x" alt="Donatello-za" title="Donatello-za (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/greevex">
+                                    <img src="https://avatars3.githubusercontent.com/u/148401?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/148401?v=4&amp;s=80 2x" alt="greevex" title="greevex (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/lt">
+                                    <img src="https://avatars1.githubusercontent.com/u/1503065?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/1503065?v=4&amp;s=80 2x" alt="lt" title="lt (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/lcobucci">
+                                    <img src="https://avatars2.githubusercontent.com/u/201963?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/201963?v=4&amp;s=80 2x" alt="lcobucci" title="lcobucci (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/mkrauser">
+                                    <img src="https://avatars1.githubusercontent.com/u/494845?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/494845?v=4&amp;s=80 2x" alt="mkrauser" title="mkrauser (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/ondrejmirtes">
+                                    <img src="https://avatars0.githubusercontent.com/u/104888?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/104888?v=4&amp;s=80 2x" alt="ondrejmirtes" title="ondrejmirtes (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/pborreli">
+                                    <img src="https://avatars2.githubusercontent.com/u/77759?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/77759?v=4&amp;s=80 2x" alt="pborreli" title="pborreli (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/seregazhuk">
+                                    <img src="https://avatars3.githubusercontent.com/u/9959761?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/9959761?v=4&amp;s=80 2x" alt="seregazhuk" title="seregazhuk (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/dandelionred">
+                                    <img src="https://avatars0.githubusercontent.com/u/19490344?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/19490344?v=4&amp;s=80 2x" alt="dandelionred" title="dandelionred (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-event-loop-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-event-loop-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,1 6,1 12,1 18,1 24,1 30,1 36,1 42,1 48,2 54,2 60,2 66,1 72,1 78,1 84,1 90,1 96,1 102,1 108,1 114,1 120,1 126,1 132,1 138,1 144,1 150,1 156,4 162,1 168,1 174,7 180,14 186,1 192,1 198,1 204,1 210,1 216,1 222,1 228,1 234,1 240,1 246,1 252,1 258,1 264,1 270,1 276,1 282,1 288,1 294,1 300,1 306,1" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-event-loop-participation-gradient);mask:url(#reactphp-event-loop-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/event-loop/license.html b/event-loop/license.html
new file mode 100644
index 000000000..8d3fc2bb0
--- /dev/null
+++ b/event-loop/license.html
@@ -0,0 +1,572 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>EventLoop: License - ReactPHP</title>
+
+        <meta name="description" content="ReactPHP&#039;s core reactor event loop that libraries can use for evented I/O.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+            </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                    <h1>EventLoop License</h1>
+
+    <p>Copyright (c) 2012 Igor Wiedler, Chris Boden</p>
+<p>Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:</p>
+<p>The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.</p>
+<p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.</p>
+                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../event-loop/">EventLoop</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v1.1.1
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/event-loop#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v1.1.0#readme" class="version-selector__version">
+                                                    v1.1.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v1.0.0#readme" class="version-selector__version">
+                                                    v1.0.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.5.3#readme" class="version-selector__version">
+                                                    v0.5.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.5.2#readme" class="version-selector__version">
+                                                    v0.5.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.5.1#readme" class="version-selector__version">
+                                                    v0.5.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.5.0#readme" class="version-selector__version">
+                                                    v0.5.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.4.3#readme" class="version-selector__version">
+                                                    v0.4.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.3.5#readme" class="version-selector__version">
+                                                    v0.3.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.4.2#readme" class="version-selector__version">
+                                                    v0.4.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.4.1#readme" class="version-selector__version">
+                                                    v0.4.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.4.0#readme" class="version-selector__version">
+                                                    v0.4.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.3.4#readme" class="version-selector__version">
+                                                    v0.3.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.3.3#readme" class="version-selector__version">
+                                                    v0.3.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.3.0#readme" class="version-selector__version">
+                                                    v0.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.2.7#readme" class="version-selector__version">
+                                                    v0.2.7
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.2.6#readme" class="version-selector__version">
+                                                    v0.2.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.2.3#readme" class="version-selector__version">
+                                                    v0.2.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.2.0#readme" class="version-selector__version">
+                                                    v0.2.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.1.1#readme" class="version-selector__version">
+                                                    v0.1.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/event-loop/tree/v0.1.0#readme" class="version-selector__version">
+                                                    v0.1.0
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/event-loop">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../event-loop/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../event-loop/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/event-loop:^1.1.1</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (105 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (56 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (51 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/igorw">
+                                    <img src="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=80 2x" alt="igorw" title="igorw (46 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/nrk">
+                                    <img src="https://avatars0.githubusercontent.com/u/17923?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/17923?v=4&amp;s=80 2x" alt="nrk" title="nrk (33 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cboden">
+                                    <img src="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=80 2x" alt="cboden" title="cboden (31 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jmalloc">
+                                    <img src="https://avatars3.githubusercontent.com/u/761536?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/761536?v=4&amp;s=80 2x" alt="jmalloc" title="jmalloc (30 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cebe">
+                                    <img src="https://avatars0.githubusercontent.com/u/189796?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/189796?v=4&amp;s=80 2x" alt="cebe" title="cebe (6 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/ivkalita">
+                                    <img src="https://avatars3.githubusercontent.com/u/3984307?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/3984307?v=4&amp;s=80 2x" alt="ivkalita" title="ivkalita (6 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/kooldev">
+                                    <img src="https://avatars1.githubusercontent.com/u/53789145?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/53789145?v=4&amp;s=80 2x" alt="kooldev" title="kooldev (5 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/carusogabriel">
+                                    <img src="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=80 2x" alt="carusogabriel" title="carusogabriel (4 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/Ocramius">
+                                    <img src="https://avatars2.githubusercontent.com/u/154256?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/154256?v=4&amp;s=80 2x" alt="Ocramius" title="Ocramius (4 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cameronjacobson">
+                                    <img src="https://avatars1.githubusercontent.com/u/2303661?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/2303661?v=4&amp;s=80 2x" alt="cameronjacobson" title="cameronjacobson (3 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/kelunik">
+                                    <img src="https://avatars0.githubusercontent.com/u/2743004?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/2743004?v=4&amp;s=80 2x" alt="kelunik" title="kelunik (3 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/PabloKowalczyk">
+                                    <img src="https://avatars2.githubusercontent.com/u/11366345?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/11366345?v=4&amp;s=80 2x" alt="PabloKowalczyk" title="PabloKowalczyk (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/steverhoades">
+                                    <img src="https://avatars0.githubusercontent.com/u/1146668?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/1146668?v=4&amp;s=80 2x" alt="steverhoades" title="steverhoades (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/nawarian">
+                                    <img src="https://avatars2.githubusercontent.com/u/3905582?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/3905582?v=4&amp;s=80 2x" alt="nawarian" title="nawarian (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/andrewminerd">
+                                    <img src="https://avatars3.githubusercontent.com/u/488901?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/488901?v=4&amp;s=80 2x" alt="andrewminerd" title="andrewminerd (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/CharlotteDunois">
+                                    <img src="https://avatars0.githubusercontent.com/u/4529744?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/4529744?v=4&amp;s=80 2x" alt="CharlotteDunois" title="CharlotteDunois (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/DaveRandom">
+                                    <img src="https://avatars1.githubusercontent.com/u/2396425?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/2396425?v=4&amp;s=80 2x" alt="DaveRandom" title="DaveRandom (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/Donatello-za">
+                                    <img src="https://avatars3.githubusercontent.com/u/2649302?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/2649302?v=4&amp;s=80 2x" alt="Donatello-za" title="Donatello-za (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/greevex">
+                                    <img src="https://avatars3.githubusercontent.com/u/148401?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/148401?v=4&amp;s=80 2x" alt="greevex" title="greevex (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/lt">
+                                    <img src="https://avatars1.githubusercontent.com/u/1503065?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/1503065?v=4&amp;s=80 2x" alt="lt" title="lt (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/lcobucci">
+                                    <img src="https://avatars2.githubusercontent.com/u/201963?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/201963?v=4&amp;s=80 2x" alt="lcobucci" title="lcobucci (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/mkrauser">
+                                    <img src="https://avatars1.githubusercontent.com/u/494845?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/494845?v=4&amp;s=80 2x" alt="mkrauser" title="mkrauser (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/ondrejmirtes">
+                                    <img src="https://avatars0.githubusercontent.com/u/104888?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/104888?v=4&amp;s=80 2x" alt="ondrejmirtes" title="ondrejmirtes (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/pborreli">
+                                    <img src="https://avatars2.githubusercontent.com/u/77759?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/77759?v=4&amp;s=80 2x" alt="pborreli" title="pborreli (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/seregazhuk">
+                                    <img src="https://avatars3.githubusercontent.com/u/9959761?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/9959761?v=4&amp;s=80 2x" alt="seregazhuk" title="seregazhuk (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/dandelionred">
+                                    <img src="https://avatars0.githubusercontent.com/u/19490344?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/19490344?v=4&amp;s=80 2x" alt="dandelionred" title="dandelionred (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-event-loop-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-event-loop-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,1 6,1 12,1 18,1 24,1 30,1 36,1 42,1 48,2 54,2 60,2 66,1 72,1 78,1 84,1 90,1 96,1 102,1 108,1 114,1 120,1 126,1 132,1 138,1 144,1 150,1 156,4 162,1 168,1 174,7 180,14 186,1 192,1 198,1 204,1 210,1 216,1 222,1 228,1 234,1 240,1 246,1 252,1 258,1 264,1 270,1 276,1 282,1 288,1 294,1 300,1 306,1" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-event-loop-participation-gradient);mask:url(#reactphp-event-loop-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/favicon-32x32.png b/favicon-32x32.png
new file mode 100644
index 0000000000000000000000000000000000000000..14d1ec5a4c74bf4deeaee0c29f4738257b26f127
GIT binary patch
diff --git a/favicon.ico b/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..4013d694131cf926ce148df582700a66db964837
GIT binary patch
diff --git a/http-client/changelog.html b/http-client/changelog.html
new file mode 100644
index 000000000..ba888c1c8
--- /dev/null
+++ b/http-client/changelog.html
@@ -0,0 +1,1445 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>HTTPClient: Changelog - ReactPHP</title>
+
+        <meta name="description" content="Event-driven, streaming HTTP client for ReactPHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+        <link href="https://github.com/reactphp/http-client/releases.atom" type="application/atom+xml" rel="alternate" title="HTTPClient Changelog">
+    </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                    <h1>HTTPClient Changelog</h1>
+
+    <ul class="toc">
+            <li><a href="#2020" title="Jump to year 2020 (1 release)">2020</a></li>
+            <li><a href="#2018" title="Jump to year 2018 (3 releases)">2018</a></li>
+            <li><a href="#2017" title="Jump to year 2017 (9 releases)">2017</a></li>
+            <li><a href="#2016" title="Jump to year 2016 (8 releases)">2016</a></li>
+            <li><a href="#2015" title="Jump to year 2015 (7 releases)">2015</a></li>
+            <li><a href="#2014" title="Jump to year 2014 (2 releases)">2014</a></li>
+            <li><a href="#2013" title="Jump to year 2013 (2 releases)">2013</a></li>
+            <li><a href="#2012" title="Jump to year 2012 (4 releases)">2012</a></li>
+        </ul>
+
+    <h2>
+        <a id="2020" class="anchor" href="#2020" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2020
+    </h2>
+
+    
+            <h3>
+        <a id="0510-2020-01-14" class="anchor" href="#0510-2020-01-14" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.5.10
+
+        <small>
+            (2020-01-14)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.5.10" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Fix: Avoid unneeded warning when decoding invalid data on PHP 7.4.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="548458501" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/150" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/150/hovercard" href="https://github.com/reactphp/http-client/pull/150">#150</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Add <code>.gitattributes</code> to exclude dev files from exports.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="530764048" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/149" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/149/hovercard" href="https://github.com/reactphp/http-client/pull/149">#149</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/reedy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/reedy">@reedy</a>)</p>
+</li>
+<li>
+<p>Link to clue/reactphp-buzz for higher-level HTTP client.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="403569861" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/139" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/139/hovercard" href="https://github.com/reactphp/http-client/pull/139">#139</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by simplifying test matrix and test setup.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="549149444" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/151" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/151/hovercard" href="https://github.com/reactphp/http-client/pull/151">#151</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2018" class="anchor" href="#2018" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2018
+    </h2>
+
+    
+            <h3>
+        <a id="059-2018-04-10" class="anchor" href="#059-2018-04-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.5.9
+
+        <small>
+            (2018-04-10)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.5.9" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Support legacy HTTP servers that use only <code>LF</code> instead of <code>CRLF</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="312210317" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/130" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/130/hovercard" href="https://github.com/reactphp/http-client/pull/130">#130</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by applying maximum test timeouts for integration tests.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="312426580" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/131" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/131/hovercard" href="https://github.com/reactphp/http-client/pull/131">#131</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="058-2018-02-09" class="anchor" href="#058-2018-02-09" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.5.8
+
+        <small>
+            (2018-02-09)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.5.8" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Support legacy PHP 5.3 through PHP 7.2 and HHVM<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="295501645" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/126" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/126/hovercard" href="https://github.com/reactphp/http-client/pull/126">#126</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="295633906" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/127" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/127/hovercard" href="https://github.com/reactphp/http-client/pull/127">#127</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve backwards compatibility with Promise v1 and<br>
+use RingCentral to improve interoperability with react/http.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="295478982" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/124" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/124/hovercard" href="https://github.com/reactphp/http-client/pull/124">#124</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="295482222" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/125" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/125/hovercard" href="https://github.com/reactphp/http-client/pull/125">#125</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="057-2018-02-08" class="anchor" href="#057-2018-02-08" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.5.7
+
+        <small>
+            (2018-02-08)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.5.7" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Fix: Ignore excessive whitespace in chunk header for <code>Transfer-Encoding: chunked</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="295225835" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/123" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/123/hovercard" href="https://github.com/reactphp/http-client/pull/123">#123</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/DangerLifter/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/DangerLifter">@DangerLifter</a> and <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Ignore invalid incoming <code>Transfer-Encoding</code> response header<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="294932198" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/122" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/122/hovercard" href="https://github.com/reactphp/http-client/pull/122">#122</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve documentation for <code>Client</code> (and advanced <code>Connector</code>)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="261999749" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/111" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/111/hovercard" href="https://github.com/reactphp/http-client/pull/111">#111</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="294503625" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/121" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/121/hovercard" href="https://github.com/reactphp/http-client/pull/121">#121</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by adding support for PHPUnit 6<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="274009027" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/112" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/112/hovercard" href="https://github.com/reactphp/http-client/pull/112">#112</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/carusogabriel/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/carusogabriel">@carusogabriel</a>)</p>
+</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2017" class="anchor" href="#2017" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2017
+    </h2>
+
+    
+            <h3>
+        <a id="056-2017-09-17" class="anchor" href="#056-2017-09-17" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.5.6
+
+        <small>
+            (2017-09-17)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.5.6" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Update Socket component to support HTTP over Unix domain sockets (UDS)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="258055894" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/110" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/110/hovercard" href="https://github.com/reactphp/http-client/pull/110">#110</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="055-2017-09-10" class="anchor" href="#055-2017-09-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.5.5
+
+        <small>
+            (2017-09-10)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.5.5" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix: Update Socket component to work around sending secure HTTPS requests with PHP &lt; 7.1.4<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="256304682" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/109" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/109/hovercard" href="https://github.com/reactphp/http-client/pull/109">#109</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="054-2017-08-25" class="anchor" href="#054-2017-08-25" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.5.4
+
+        <small>
+            (2017-08-25)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.5.4" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Update Socket dependency to support hosts file on all platforms<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="252882498" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/108" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/108/hovercard" href="https://github.com/reactphp/http-client/pull/108">#108</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>This means that HTTP requests to hosts such as <code>localhost</code> will now work as<br>
+expected across all platforms with no changes required:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$client</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Client</span>(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$request</span> <span class="pl-k">=</span> <span class="pl-smi">$client</span><span class="pl-k">-&gt;</span>request(<span class="pl-s"><span class="pl-pds">'</span>GET<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>http://localhost/<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"><span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>response<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-c1">Response</span> <span class="pl-smi">$response</span>) {</span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> …</span></span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"><span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>end();</span></pre></div>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="053-2017-08-16" class="anchor" href="#053-2017-08-16" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.5.3
+
+        <small>
+            (2017-08-16)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.5.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Target evenement 3.0 a long side 2.0<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="250408805" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/106" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/106/hovercard" href="https://github.com/reactphp/http-client/pull/106">#106</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+<li>
+<p>Improve test suite by locking Travis distro so new defaults will not break the build<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248355281" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/105" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/105/hovercard" href="https://github.com/reactphp/http-client/pull/105">#105</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="052-2017-06-27" class="anchor" href="#052-2017-06-27" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.5.2
+
+        <small>
+            (2017-06-27)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.5.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Support passing arrays for request header values<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="238563555" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/100" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/100/hovercard" href="https://github.com/reactphp/http-client/pull/100">#100</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Fix merging default headers if overwritten with custom case headers<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="238607661" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/101" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/101/hovercard" href="https://github.com/reactphp/http-client/pull/101">#101</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="051-2017-06-18" class="anchor" href="#051-2017-06-18" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.5.1
+
+        <small>
+            (2017-06-18)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.5.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Emit <code>error</code> event if request URL is invalid<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="236451406" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/99" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/99/hovercard" href="https://github.com/reactphp/http-client/pull/99">#99</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Support OPTIONS method with asterisk-form (<code>OPTIONS * HTTP/1.1</code>)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="236445567" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/98" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/98/hovercard" href="https://github.com/reactphp/http-client/pull/98">#98</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve documentation for event semantics<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="236436774" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/97" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/97/hovercard" href="https://github.com/reactphp/http-client/pull/97">#97</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="050-2017-05-22" class="anchor" href="#050-2017-05-22" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.5.0
+
+        <small>
+            (2017-05-22)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.5.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature / BC break: Replace <code>Factory</code> with simple <code>Client</code> constructor<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="223729891" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/85" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/85/hovercard" href="https://github.com/reactphp/http-client/pull/85">#85</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>The <code>Client</code> now accepts a required <code>LoopInterface</code> and an optional<br>
+<code>ConnectorInterface</code>. It will now create a default <code>Connector</code> if none<br>
+has been given.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old</span></span>
+<span class="pl-s1"><span class="pl-smi">$dnsResolverFactory</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Dns\Resolver\</span><span class="pl-c1">Factory</span>();</span>
+<span class="pl-s1"><span class="pl-smi">$dnsResolver</span> <span class="pl-k">=</span> <span class="pl-smi">$dnsResolverFactory</span><span class="pl-k">-&gt;</span>createCached(<span class="pl-s"><span class="pl-pds">'</span>8.8.8.8<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$factory</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\HttpClient\</span><span class="pl-c1">Factory</span>();</span>
+<span class="pl-s1"><span class="pl-smi">$client</span> <span class="pl-k">=</span> <span class="pl-smi">$factory</span><span class="pl-k">-&gt;</span>create(<span class="pl-smi">$loop</span>, <span class="pl-smi">$dnsResolver</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new</span></span>
+<span class="pl-s1"><span class="pl-smi">$client</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\HttpClient\</span><span class="pl-c1">Client</span>(<span class="pl-smi">$loop</span>);</span></pre></div>
+</li>
+<li>
+<p>Feature: <code>Request::close()</code> now cancels pending connection attempt<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="229973854" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/91" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/91/hovercard" href="https://github.com/reactphp/http-client/pull/91">#91</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature / BC break: Replace deprecated SocketClient with new Socket component<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="212950109" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/74" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/74/hovercard" href="https://github.com/reactphp/http-client/pull/74">#74</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="223596848" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/84" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/84/hovercard" href="https://github.com/reactphp/http-client/pull/84">#84</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="229669330" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/88" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/88/hovercard" href="https://github.com/reactphp/http-client/pull/88">#88</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature / BC break: Consistent stream semantics and forward compatibility with upcoming Stream v1.0<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="229961716" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/90" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/90/hovercard" href="https://github.com/reactphp/http-client/pull/90">#90</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Forward compatibility with upcoming EventLoop v1.0 and v0.5<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="229670915" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/89" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/89/hovercard" href="https://github.com/reactphp/http-client/pull/89">#89</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Catch Guzzle parser exception<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="221963228" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/82" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/82/hovercard" href="https://github.com/reactphp/http-client/pull/82">#82</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/djagya/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/djagya">@djagya</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="0417-2017-03-20" class="anchor" href="#0417-2017-03-20" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.17
+
+        <small>
+            (2017-03-20)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.17" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: Add PHPUnit to require-dev <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="213152427" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/75" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/75/hovercard" href="https://github.com/reactphp/http-client/pull/75">#75</a> <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a></li>
+<li>Fix: Fix chunk header to be case-insensitive and allow leading zeros for end chunk <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="215234817" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/77" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/77/hovercard" href="https://github.com/reactphp/http-client/pull/77">#77</a> <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/mdrost/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mdrost">@mdrost</a></li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="0416-2017-03-01" class="anchor" href="#0416-2017-03-01" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.16
+
+        <small>
+            (2017-03-01)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.16" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix: Trim leading zeros from chunk size <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="210721736" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/73" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/73/hovercard" href="https://github.com/reactphp/http-client/pull/73">#73</a> <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/maciejmrozinski/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/maciejmrozinski">@maciejmrozinski</a></li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2016" class="anchor" href="#2016" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2016
+    </h2>
+
+    
+            <h3>
+        <a id="0415-2016-12-02" class="anchor" href="#0415-2016-12-02" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.15
+
+        <small>
+            (2016-12-02)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.15" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: Add examples <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="186643776" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/69" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/69/hovercard" href="https://github.com/reactphp/http-client/pull/69">#69</a> <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a></li>
+<li>Fix: Ensure checking for 0 length chunk, when we should check for it <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="191326473" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/71" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/71/hovercard" href="https://github.com/reactphp/http-client/pull/71">#71</a> <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a></li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="0414-2016-10-28" class="anchor" href="#0414-2016-10-28" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.14
+
+        <small>
+            (2016-10-28)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.14" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix: Ensure the first bit of body directly after the headers is emitted into the stream <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="185845038" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/68" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/68/hovercard" href="https://github.com/reactphp/http-client/pull/68">#68</a> <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a></li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="0413-2016-10-19" class="anchor" href="#0413-2016-10-19" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.13
+
+        <small>
+            (2016-10-19)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.13" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix: Ensure Request emits initial Response data as string <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="183818439" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/66" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/66/hovercard" href="https://github.com/reactphp/http-client/pull/66">#66</a> <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/mmelvin0/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mmelvin0">@mmelvin0</a></li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="0412-2016-10-06" class="anchor" href="#0412-2016-10-06" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.12
+
+        <small>
+            (2016-10-06)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.12" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix: Changed $stream from DuplexStreamInterface to ReadableStreamInterface in Response constructor <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="178946525" data-permission-text="Title is private" data-url="https://github.com/reactphp/http-client/issues/63" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http-client/pull/63/hovercard" href="https://github.com/reactphp/http-client/pull/63">#63</a> <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a></li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="0411-2016-09-15" class="anchor" href="#0411-2016-09-15" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.11
+
+        <small>
+            (2016-09-15)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.11" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Chunked encoding <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a></li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="032-2016-03-24" class="anchor" href="#032-2016-03-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.3.2
+
+        <small>
+            (2016-03-24)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.3.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: Broader guzzle/parser version req <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/cboden/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cboden">@cboden</a></li>
+<li>Improvement: Improve forwards compatibility with all supported versions <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a></li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="0410-2016-03-21" class="anchor" href="#0410-2016-03-21" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.10
+
+        <small>
+            (2016-03-21)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.10" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: Update react/socket-client dependency to all supported versions <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a></li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="049-2016-03-08" class="anchor" href="#049-2016-03-08" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.9
+
+        <small>
+            (2016-03-08)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.9" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: PHP 7 memory leak, related to PHP bug <a href="https://bugs.php.net/bug.php?id=71737" rel="nofollow">71737</a> <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jmalloc/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jmalloc">@jmalloc</a></li>
+<li>Improvement: Clean up all listeners when closing request <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/weichenlin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/weichenlin">@weichenlin</a></li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2015" class="anchor" href="#2015" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2015
+    </h2>
+
+    
+            <h3>
+        <a id="048-2015-10-05" class="anchor" href="#048-2015-10-05" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.8
+
+        <small>
+            (2015-10-05)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.8" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: Avoid hiding exceptions thrown in HttpClient\Request error handlers <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/arnaud-lb/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/arnaud-lb">@arnaud-lb</a></li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="047-2015-09-24" class="anchor" href="#047-2015-09-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.7
+
+        <small>
+            (2015-09-24)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.7" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: Set protocol version on request creation <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a></li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="046-2015-09-20" class="anchor" href="#046-2015-09-20" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.6
+
+        <small>
+            (2015-09-20)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.6" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: Support explicitly using HTTP/1.1 protocol version <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a></li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="045-2015-08-31" class="anchor" href="#045-2015-08-31" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.5
+
+        <small>
+            (2015-08-31)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.5" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: Replaced the abandoned guzzle/parser with guzzlehttp/psr7 <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a></li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="044-2015-06-16" class="anchor" href="#044-2015-06-16" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.4
+
+        <small>
+            (2015-06-16)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.4" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: Emit drain event when the request is ready to receive more data by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/arnaud-lb/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/arnaud-lb">@arnaud-lb</a></li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="043-2015-06-15" class="anchor" href="#043-2015-06-15" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.3
+
+        <small>
+            (2015-06-15)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: Added support for using auth informations from URL by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/arnaud-lb/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/arnaud-lb">@arnaud-lb</a></li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="042-2015-05-14" class="anchor" href="#042-2015-05-14" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.2
+
+        <small>
+            (2015-05-14)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: Pass Response object on with data emit by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/dpovshed/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dpovshed">@dpovshed</a></li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2014" class="anchor" href="#2014" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2014
+    </h2>
+
+    
+            <h3>
+        <a id="041-2014-11-23" class="anchor" href="#041-2014-11-23" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.1
+
+        <small>
+            (2014-11-23)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: Use EventEmitterTrait instead of base class by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/cursedcoder/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cursedcoder">@cursedcoder</a></li>
+<li>Improvement: Changed Stream to DuplexStreamInterface in Response::__construct by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/mbonneau/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mbonneau">@mbonneau</a></li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="040-2014-02-02" class="anchor" href="#040-2014-02-02" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.0
+
+        <small>
+            (2014-02-02)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.4.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>BC break: Drop unused <code>Response::getBody()</code></li>
+<li>BC break: Bump minimum PHP version to PHP 5.4, remove 5.3 specific hacks</li>
+<li>BC break: Remove <code>$loop</code> argument from <code>HttpClient</code>: <code>Client</code>, <code>Request</code>, <code>Response</code></li>
+<li>BC break: Update to React/Promise 2.0</li>
+<li>Dependency: Autoloading and filesystem structure now PSR-4 instead of PSR-0</li>
+<li>Bump React dependencies to v0.4</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2013" class="anchor" href="#2013" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2013
+    </h2>
+
+    
+            <h3>
+        <a id="031-2013-04-21" class="anchor" href="#031-2013-04-21" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.3.1
+
+        <small>
+            (2013-04-21)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.3.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: Correct requirement for socket-client</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="030-2013-04-14" class="anchor" href="#030-2013-04-14" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.3.0
+
+        <small>
+            (2013-04-14)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.3.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>BC break: Socket connection handling moved to new SocketClient component</li>
+<li>Bump React dependencies to v0.3</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2012" class="anchor" href="#2012" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2012
+    </h2>
+
+    
+            <h3>
+        <a id="026-2012-12-26" class="anchor" href="#026-2012-12-26" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.2.6
+
+        <small>
+            (2012-12-26)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.2.6" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="025-2012-11-26" class="anchor" href="#025-2012-11-26" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.2.5
+
+        <small>
+            (2012-11-26)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.2.5" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Use a promise-based API internally</li>
+<li>Bug fix: Use DNS resolver correctly</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="023-2012-11-05" class="anchor" href="#023-2012-11-05" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.2.3
+
+        <small>
+            (2012-11-05)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.2.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="022-2012-10-28" class="anchor" href="#022-2012-10-28" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.2.2
+
+        <small>
+            (2012-10-28)
+            <a href="https://github.com/reactphp/http-client/releases/tag/v0.2.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: HTTP client (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/arnaud-lb/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/arnaud-lb">@arnaud-lb</a>)</li>
+</ul>
+
+    <hr>
+    
+    <ul class="links">
+        <li>
+            <a href="https://github.com/reactphp/http-client/releases.atom">
+                <i class="icon-feed" aria-hidden="true"></i>
+                Subscribe to the Changelog feed
+            </a>
+        </li>
+    </ul>
+                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../http-client/">HTTPClient</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v0.5.10
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/http-client#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.5.9#readme" class="version-selector__version">
+                                                    v0.5.9
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.5.8#readme" class="version-selector__version">
+                                                    v0.5.8
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.5.7#readme" class="version-selector__version">
+                                                    v0.5.7
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.5.6#readme" class="version-selector__version">
+                                                    v0.5.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.5.5#readme" class="version-selector__version">
+                                                    v0.5.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.5.4#readme" class="version-selector__version">
+                                                    v0.5.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.5.3#readme" class="version-selector__version">
+                                                    v0.5.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.5.2#readme" class="version-selector__version">
+                                                    v0.5.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.5.1#readme" class="version-selector__version">
+                                                    v0.5.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.5.0#readme" class="version-selector__version">
+                                                    v0.5.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.17#readme" class="version-selector__version">
+                                                    v0.4.17
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.16#readme" class="version-selector__version">
+                                                    v0.4.16
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.15#readme" class="version-selector__version">
+                                                    v0.4.15
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.14#readme" class="version-selector__version">
+                                                    v0.4.14
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.13#readme" class="version-selector__version">
+                                                    v0.4.13
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.12#readme" class="version-selector__version">
+                                                    v0.4.12
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.11#readme" class="version-selector__version">
+                                                    v0.4.11
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.3.2#readme" class="version-selector__version">
+                                                    v0.3.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.10#readme" class="version-selector__version">
+                                                    v0.4.10
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.9#readme" class="version-selector__version">
+                                                    v0.4.9
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.8#readme" class="version-selector__version">
+                                                    v0.4.8
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.7#readme" class="version-selector__version">
+                                                    v0.4.7
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.6#readme" class="version-selector__version">
+                                                    v0.4.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.5#readme" class="version-selector__version">
+                                                    v0.4.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.4#readme" class="version-selector__version">
+                                                    v0.4.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.3#readme" class="version-selector__version">
+                                                    v0.4.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.2#readme" class="version-selector__version">
+                                                    v0.4.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.1#readme" class="version-selector__version">
+                                                    v0.4.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.0#readme" class="version-selector__version">
+                                                    v0.4.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.3.1#readme" class="version-selector__version">
+                                                    v0.3.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.3.0#readme" class="version-selector__version">
+                                                    v0.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.2.6#readme" class="version-selector__version">
+                                                    v0.2.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.2.5#readme" class="version-selector__version">
+                                                    v0.2.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.2.3#readme" class="version-selector__version">
+                                                    v0.2.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.2.2#readme" class="version-selector__version">
+                                                    v0.2.2
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/http-client">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../http-client/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../http-client/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/http-client:^0.5.10</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (76 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (57 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/igorw">
+                                    <img src="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=80 2x" alt="igorw" title="igorw (23 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cboden">
+                                    <img src="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=80 2x" alt="cboden" title="cboden (19 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/arnaud-lb">
+                                    <img src="https://avatars3.githubusercontent.com/u/365207?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/365207?v=4&amp;s=80 2x" alt="arnaud-lb" title="arnaud-lb (13 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (7 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/dpovshed">
+                                    <img src="https://avatars2.githubusercontent.com/u/786020?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/786020?v=4&amp;s=80 2x" alt="dpovshed" title="dpovshed (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cursedcoder">
+                                    <img src="https://avatars3.githubusercontent.com/u/899452?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/899452?v=4&amp;s=80 2x" alt="cursedcoder" title="cursedcoder (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/mdrost">
+                                    <img src="https://avatars1.githubusercontent.com/u/4083346?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/4083346?v=4&amp;s=80 2x" alt="mdrost" title="mdrost (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/djagya">
+                                    <img src="https://avatars0.githubusercontent.com/u/2600431?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/2600431?v=4&amp;s=80 2x" alt="djagya" title="djagya (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/carusogabriel">
+                                    <img src="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=80 2x" alt="carusogabriel" title="carusogabriel (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jmalloc">
+                                    <img src="https://avatars3.githubusercontent.com/u/761536?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/761536?v=4&amp;s=80 2x" alt="jmalloc" title="jmalloc (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/Th3Mouk">
+                                    <img src="https://avatars0.githubusercontent.com/u/5006899?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/5006899?v=4&amp;s=80 2x" alt="Th3Mouk" title="Th3Mouk (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/mbonneau">
+                                    <img src="https://avatars3.githubusercontent.com/u/748287?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/748287?v=4&amp;s=80 2x" alt="mbonneau" title="mbonneau (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/weichenlin">
+                                    <img src="https://avatars1.githubusercontent.com/u/3406567?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/3406567?v=4&amp;s=80 2x" alt="weichenlin" title="weichenlin (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/e3betht">
+                                    <img src="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=80 2x" alt="e3betht" title="e3betht (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/mmelvin0">
+                                    <img src="https://avatars2.githubusercontent.com/u/762247?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/762247?v=4&amp;s=80 2x" alt="mmelvin0" title="mmelvin0 (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-http-client-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-http-client-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,1 6,1 12,1 18,1 24,1 30,1 36,1 42,1 48,1 54,1 60,1 66,1 72,1 78,1 84,1 90,1 96,1 102,1 108,1 114,1 120,1 126,1 132,1 138,1 144,1 150,1 156,2 162,2 168,1 174,1 180,1 186,1 192,6 198,1 204,1 210,1 216,1 222,1 228,1 234,1 240,1 246,1 252,1 258,1 264,1 270,1 276,1 282,1 288,1 294,1 300,1 306,1" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-http-client-participation-gradient);mask:url(#reactphp-http-client-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/http-client/index.html b/http-client/index.html
new file mode 100644
index 000000000..85fe7286c
--- /dev/null
+++ b/http-client/index.html
@@ -0,0 +1,754 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>HTTPClient: 
+HttpClient - ReactPHP</title>
+
+        <meta name="description" content="Event-driven, streaming HTTP client for ReactPHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+            </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                                    <h1>HTTPClient</h1>
+
+                    
+<p><a href="https://travis-ci.org/reactphp/http-client" rel="nofollow"><img src="https://camo.githubusercontent.com/6c7015175a77082bdfe3e8a8409c2ca6b4d1d988/68747470733a2f2f7472617669732d63692e6f72672f72656163747068702f687474702d636c69656e742e7376673f6272616e63683d6d6173746572" alt="Build Status" data-canonical-src="https://travis-ci.org/reactphp/http-client.svg?branch=master" style="max-width:100%;"></a></p>
+<p>Event-driven, streaming HTTP client for <a href="https://reactphp.org" rel="nofollow">ReactPHP</a>.</p>
+<blockquote>
+<p>Note that this is a very low-level HTTP client implementation that is currently
+undergoing some major changes. In the meantime, we recommend using
+<a href="https://github.com/clue/reactphp-buzz">clue/reactphp-buzz</a> as a higher-level
+HTTP client abstraction (which happens to build on top of this project). It
+provides a Promise-based interface and common PSR-7 message abstraction which
+makes getting started much easier.</p>
+</blockquote>
+<p><strong>Table of Contents</strong></p>
+<ul>
+<li>
+<a href="#basic-usage">Basic usage</a>
+<ul>
+<li><a href="#client">Client</a></li>
+<li><a href="#example">Example</a></li>
+</ul>
+</li>
+<li>
+<a href="#advanced-usage">Advanced usage</a>
+<ul>
+<li><a href="#unix-domain-sockets">Unix domain sockets</a></li>
+</ul>
+</li>
+<li><a href="#install">Install</a></li>
+<li><a href="#tests">Tests</a></li>
+<li><a href="#license">License</a></li>
+</ul>
+<h2>
+<a id="basic-usage" class="anchor" href="#basic-usage" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Basic usage</h2>
+<h3>
+<a id="client" class="anchor" href="#client" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Client</h3>
+<p>The <code>Client</code> is responsible for communicating with HTTP servers, managing the
+connection state and sending your HTTP requests.
+It also registers everything with the main <a href="../event-loop/#usage"><code>EventLoop</code></a>.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$loop</span> <span class="pl-k">=</span> <span class="pl-c1">React\EventLoop\</span><span class="pl-c1">Factory</span><span class="pl-k">::</span>create();</span>
+<span class="pl-s1"><span class="pl-smi">$client</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Client</span>(<span class="pl-smi">$loop</span>);</span></pre></div>
+<p>If you need custom connector settings (DNS resolution, TLS parameters, timeouts,
+proxy servers etc.), you can explicitly pass a custom instance of the
+<a href="../socket/#connectorinterface"><code>ConnectorInterface</code></a>:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$connector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">\React\Socket\</span><span class="pl-c1">Connector</span>(<span class="pl-smi">$loop</span>, <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>dns<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>127.0.0.1<span class="pl-pds">'</span></span>,</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>tcp<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">        <span class="pl-s"><span class="pl-pds">'</span>bindto<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>192.168.10.1:0<span class="pl-pds">'</span></span></span>
+<span class="pl-s1">    ),</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>tls<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">        <span class="pl-s"><span class="pl-pds">'</span>verify_peer<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">false</span>,</span>
+<span class="pl-s1">        <span class="pl-s"><span class="pl-pds">'</span>verify_peer_name<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">false</span></span>
+<span class="pl-s1">    )</span>
+<span class="pl-s1">));</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$client</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Client</span>(<span class="pl-smi">$loop</span>, <span class="pl-smi">$connector</span>);</span></pre></div>
+<p>The <code>request(string $method, string $uri, array $headers = array(), string $version = '1.0'): Request</code>
+method can be used to prepare new Request objects.</p>
+<p>The optional <code>$headers</code> parameter can be used to pass additional request
+headers.
+You can use an associative array (key=value) or an array for each header value
+(key=values).
+The Request will automatically include an appropriate <code>Host</code>,
+<code>User-Agent: react/alpha</code> and <code>Connection: close</code> header if applicable.
+You can pass custom header values or use an empty array to omit any of these.</p>
+<p>The <code>Request#write(string $data)</code> method can be used to
+write data to the request body.
+Data will be buffered until the underlying connection is established, at which
+point buffered data will be sent and all further data will be passed to the
+underlying connection immediately.</p>
+<p>The <code>Request#end(?string $data = null)</code> method can be used to
+finish sending the request.
+You may optionally pass a last request body data chunk that will be sent just
+like a <code>write()</code> call.
+Calling this method finalizes the outgoing request body (which may be empty).
+Data will be buffered until the underlying connection is established, at which
+point buffered data will be sent and all further data will be ignored.</p>
+<p>The <code>Request#close()</code> method can be used to
+forefully close sending the request.
+Unlike the <code>end()</code> method, this method discards any buffers and closes the
+underlying connection if it is already established or cancels the pending
+connection attempt otherwise.</p>
+<p>Request implements WritableStreamInterface, so a Stream can be piped to it.
+Interesting events emitted by Request:</p>
+<ul>
+<li>
+<code>response</code>: The response headers were received from the server and successfully
+parsed. The first argument is a Response instance.</li>
+<li>
+<code>drain</code>: The outgoing buffer drained and the response is ready to accept more
+data for the next <code>write()</code> call.</li>
+<li>
+<code>error</code>: An error occurred, an <code>Exception</code> is passed as first argument.
+If the response emits an <code>error</code> event, this will also be emitted here.</li>
+<li>
+<code>close</code>: The request is closed. If an error occurred, this event will be
+preceeded by an <code>error</code> event.
+For a successful response, this will be emitted only once the response emits
+the <code>close</code> event.</li>
+</ul>
+<p>Response implements ReadableStreamInterface.
+Interesting events emitted by Response:</p>
+<ul>
+<li>
+<code>data</code>: Passes a chunk of the response body as first argument.
+When a response encounters a chunked encoded response it will parse it
+transparently for the user and removing the <code>Transfer-Encoding</code> header.</li>
+<li>
+<code>error</code>: An error occurred, an <code>Exception</code> is passed as first argument.
+This will also be forwarded to the request and emit an <code>error</code> event there.</li>
+<li>
+<code>end</code>: The response has been fully received.</li>
+<li>
+<code>close</code>: The response is closed. If an error occured, this event will be
+preceeded by an <code>error</code> event.
+This will also be forwarded to the request and emit a <code>close</code> event there.</li>
+</ul>
+<h3>
+<a id="example" class="anchor" href="#example" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Example</h3>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-pse">&lt;?php</span><span class="pl-s1"></span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span> <span class="pl-k">=</span> <span class="pl-c1">React\EventLoop\</span><span class="pl-c1">Factory</span><span class="pl-k">::</span>create();</span>
+<span class="pl-s1"><span class="pl-smi">$client</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\HttpClient\</span><span class="pl-c1">Client</span>(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$request</span> <span class="pl-k">=</span> <span class="pl-smi">$client</span><span class="pl-k">-&gt;</span>request(<span class="pl-s"><span class="pl-pds">'</span>GET<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>https://github.com/<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"><span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>response<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-smi">$response</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$response</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>data<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-smi">$chunk</span>) {</span>
+<span class="pl-s1">        <span class="pl-c1">echo</span> <span class="pl-smi">$chunk</span>;</span>
+<span class="pl-s1">    });</span>
+<span class="pl-s1">    <span class="pl-smi">$response</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>end<span class="pl-pds">'</span></span>, <span class="pl-k">function</span>() {</span>
+<span class="pl-s1">        <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>DONE<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1">    });</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"><span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>error<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-c1">\Exception</span> <span class="pl-smi">$e</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-smi">$e</span>;</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"><span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>end();</span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>run();</span></pre></div>
+<p>See also the <a href="https://github.com/reactphp/http-client/blob/v0.5.10/examples">examples</a>.</p>
+<h2>
+<a id="advanced-usage" class="anchor" href="#advanced-usage" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Advanced Usage</h2>
+<h3>
+<a id="unix-domain-sockets" class="anchor" href="#unix-domain-sockets" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Unix domain sockets</h3>
+<p>By default, this library supports transport over plaintext TCP/IP and secure
+TLS connections for the <code>http://</code> and <code>https://</code> URI schemes respectively.
+This library also supports Unix domain sockets (UDS) when explicitly configured.</p>
+<p>In order to use a UDS path, you have to explicitly configure the connector to
+override the destination URI so that the hostname given in the request URI will
+no longer be used to establish the connection:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$connector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">FixedUriConnector</span>(</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>unix:///var/run/docker.sock<span class="pl-pds">'</span></span>,</span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">UnixConnector</span>(<span class="pl-smi">$loop</span>)</span>
+<span class="pl-s1">);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$client</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Client</span>(<span class="pl-smi">$loop</span>, <span class="pl-smi">$connector</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$request</span> <span class="pl-k">=</span> <span class="pl-smi">$client</span><span class="pl-k">-&gt;</span>request(<span class="pl-s"><span class="pl-pds">'</span>GET<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>http://localhost/info<span class="pl-pds">'</span></span>);</span></pre></div>
+<p>See also <a href="https://github.com/reactphp/http-client/blob/v0.5.10/examples/11-unix-domain-sockets.php">example #11</a>.</p>
+<h2>
+<a id="install" class="anchor" href="#install" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Install</h2>
+<p>The recommended way to install this library is <a href="https://getcomposer.org" rel="nofollow">through Composer</a>.
+<a href="https://getcomposer.org/doc/00-intro.md" rel="nofollow">New to Composer?</a></p>
+<p>This will install the latest supported version:</p>
+<div class="highlight highlight-source-shell"><pre>$ composer require react/http-client:^0.5.10</pre></div>
+<p>See also the <a href="changelog.html">CHANGELOG</a> for details about version upgrades.</p>
+<p>This project aims to run on any platform and thus does not require any PHP
+extensions and supports running on legacy PHP 5.3 through current PHP 7+ and
+HHVM.
+It's <em>highly recommended to use PHP 7+</em> for this project.</p>
+<h2>
+<a id="tests" class="anchor" href="#tests" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Tests</h2>
+<p>To run the test suite, you first need to clone this repo and then install all
+dependencies <a href="https://getcomposer.org" rel="nofollow">through Composer</a>:</p>
+<div class="highlight highlight-source-shell"><pre>$ composer install</pre></div>
+<p>To run the test suite, go to the project root and run:</p>
+<div class="highlight highlight-source-shell"><pre>$ php vendor/bin/phpunit</pre></div>
+<p>The test suite also contains a number of functional integration tests that send
+test HTTP requests against the online service <a href="http://httpbin.org" rel="nofollow">http://httpbin.org</a> and thus rely
+on a stable internet connection.
+If you do not want to run these, they can simply be skipped like this:</p>
+<div class="highlight highlight-source-shell"><pre>$ php vendor/bin/phpunit --exclude-group internet</pre></div>
+<h2>
+<a id="license" class="anchor" href="#license" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>License</h2>
+<p>MIT, see <a href="license.html">LICENSE file</a>.</p>
+                                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../http-client/">HTTPClient</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v0.5.10
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/http-client#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.5.9#readme" class="version-selector__version">
+                                                    v0.5.9
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.5.8#readme" class="version-selector__version">
+                                                    v0.5.8
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.5.7#readme" class="version-selector__version">
+                                                    v0.5.7
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.5.6#readme" class="version-selector__version">
+                                                    v0.5.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.5.5#readme" class="version-selector__version">
+                                                    v0.5.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.5.4#readme" class="version-selector__version">
+                                                    v0.5.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.5.3#readme" class="version-selector__version">
+                                                    v0.5.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.5.2#readme" class="version-selector__version">
+                                                    v0.5.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.5.1#readme" class="version-selector__version">
+                                                    v0.5.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.5.0#readme" class="version-selector__version">
+                                                    v0.5.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.17#readme" class="version-selector__version">
+                                                    v0.4.17
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.16#readme" class="version-selector__version">
+                                                    v0.4.16
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.15#readme" class="version-selector__version">
+                                                    v0.4.15
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.14#readme" class="version-selector__version">
+                                                    v0.4.14
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.13#readme" class="version-selector__version">
+                                                    v0.4.13
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.12#readme" class="version-selector__version">
+                                                    v0.4.12
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.11#readme" class="version-selector__version">
+                                                    v0.4.11
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.3.2#readme" class="version-selector__version">
+                                                    v0.3.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.10#readme" class="version-selector__version">
+                                                    v0.4.10
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.9#readme" class="version-selector__version">
+                                                    v0.4.9
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.8#readme" class="version-selector__version">
+                                                    v0.4.8
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.7#readme" class="version-selector__version">
+                                                    v0.4.7
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.6#readme" class="version-selector__version">
+                                                    v0.4.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.5#readme" class="version-selector__version">
+                                                    v0.4.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.4#readme" class="version-selector__version">
+                                                    v0.4.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.3#readme" class="version-selector__version">
+                                                    v0.4.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.2#readme" class="version-selector__version">
+                                                    v0.4.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.1#readme" class="version-selector__version">
+                                                    v0.4.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.0#readme" class="version-selector__version">
+                                                    v0.4.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.3.1#readme" class="version-selector__version">
+                                                    v0.3.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.3.0#readme" class="version-selector__version">
+                                                    v0.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.2.6#readme" class="version-selector__version">
+                                                    v0.2.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.2.5#readme" class="version-selector__version">
+                                                    v0.2.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.2.3#readme" class="version-selector__version">
+                                                    v0.2.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.2.2#readme" class="version-selector__version">
+                                                    v0.2.2
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/http-client">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../http-client/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../http-client/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/http-client:^0.5.10</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (76 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (57 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/igorw">
+                                    <img src="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=80 2x" alt="igorw" title="igorw (23 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cboden">
+                                    <img src="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=80 2x" alt="cboden" title="cboden (19 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/arnaud-lb">
+                                    <img src="https://avatars3.githubusercontent.com/u/365207?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/365207?v=4&amp;s=80 2x" alt="arnaud-lb" title="arnaud-lb (13 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (7 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/dpovshed">
+                                    <img src="https://avatars2.githubusercontent.com/u/786020?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/786020?v=4&amp;s=80 2x" alt="dpovshed" title="dpovshed (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cursedcoder">
+                                    <img src="https://avatars3.githubusercontent.com/u/899452?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/899452?v=4&amp;s=80 2x" alt="cursedcoder" title="cursedcoder (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/mdrost">
+                                    <img src="https://avatars1.githubusercontent.com/u/4083346?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/4083346?v=4&amp;s=80 2x" alt="mdrost" title="mdrost (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/djagya">
+                                    <img src="https://avatars0.githubusercontent.com/u/2600431?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/2600431?v=4&amp;s=80 2x" alt="djagya" title="djagya (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/carusogabriel">
+                                    <img src="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=80 2x" alt="carusogabriel" title="carusogabriel (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jmalloc">
+                                    <img src="https://avatars3.githubusercontent.com/u/761536?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/761536?v=4&amp;s=80 2x" alt="jmalloc" title="jmalloc (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/Th3Mouk">
+                                    <img src="https://avatars0.githubusercontent.com/u/5006899?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/5006899?v=4&amp;s=80 2x" alt="Th3Mouk" title="Th3Mouk (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/mbonneau">
+                                    <img src="https://avatars3.githubusercontent.com/u/748287?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/748287?v=4&amp;s=80 2x" alt="mbonneau" title="mbonneau (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/weichenlin">
+                                    <img src="https://avatars1.githubusercontent.com/u/3406567?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/3406567?v=4&amp;s=80 2x" alt="weichenlin" title="weichenlin (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/e3betht">
+                                    <img src="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=80 2x" alt="e3betht" title="e3betht (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/mmelvin0">
+                                    <img src="https://avatars2.githubusercontent.com/u/762247?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/762247?v=4&amp;s=80 2x" alt="mmelvin0" title="mmelvin0 (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-http-client-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-http-client-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,1 6,1 12,1 18,1 24,1 30,1 36,1 42,1 48,1 54,1 60,1 66,1 72,1 78,1 84,1 90,1 96,1 102,1 108,1 114,1 120,1 126,1 132,1 138,1 144,1 150,1 156,2 162,2 168,1 174,1 180,1 186,1 192,6 198,1 204,1 210,1 216,1 222,1 228,1 234,1 240,1 246,1 252,1 258,1 264,1 270,1 276,1 282,1 288,1 294,1 300,1 306,1" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-http-client-participation-gradient);mask:url(#reactphp-http-client-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/http-client/license.html b/http-client/license.html
new file mode 100644
index 000000000..42b9d9184
--- /dev/null
+++ b/http-client/license.html
@@ -0,0 +1,587 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>HTTPClient: License - ReactPHP</title>
+
+        <meta name="description" content="Event-driven, streaming HTTP client for ReactPHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+            </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                    <h1>HTTPClient License</h1>
+
+    <p>Copyright (c) 2012 Igor Wiedler, Chris Boden</p>
+<p>Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:</p>
+<p>The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.</p>
+<p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.</p>
+                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../http-client/">HTTPClient</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v0.5.10
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/http-client#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.5.9#readme" class="version-selector__version">
+                                                    v0.5.9
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.5.8#readme" class="version-selector__version">
+                                                    v0.5.8
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.5.7#readme" class="version-selector__version">
+                                                    v0.5.7
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.5.6#readme" class="version-selector__version">
+                                                    v0.5.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.5.5#readme" class="version-selector__version">
+                                                    v0.5.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.5.4#readme" class="version-selector__version">
+                                                    v0.5.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.5.3#readme" class="version-selector__version">
+                                                    v0.5.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.5.2#readme" class="version-selector__version">
+                                                    v0.5.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.5.1#readme" class="version-selector__version">
+                                                    v0.5.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.5.0#readme" class="version-selector__version">
+                                                    v0.5.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.17#readme" class="version-selector__version">
+                                                    v0.4.17
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.16#readme" class="version-selector__version">
+                                                    v0.4.16
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.15#readme" class="version-selector__version">
+                                                    v0.4.15
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.14#readme" class="version-selector__version">
+                                                    v0.4.14
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.13#readme" class="version-selector__version">
+                                                    v0.4.13
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.12#readme" class="version-selector__version">
+                                                    v0.4.12
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.11#readme" class="version-selector__version">
+                                                    v0.4.11
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.3.2#readme" class="version-selector__version">
+                                                    v0.3.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.10#readme" class="version-selector__version">
+                                                    v0.4.10
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.9#readme" class="version-selector__version">
+                                                    v0.4.9
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.8#readme" class="version-selector__version">
+                                                    v0.4.8
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.7#readme" class="version-selector__version">
+                                                    v0.4.7
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.6#readme" class="version-selector__version">
+                                                    v0.4.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.5#readme" class="version-selector__version">
+                                                    v0.4.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.4#readme" class="version-selector__version">
+                                                    v0.4.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.3#readme" class="version-selector__version">
+                                                    v0.4.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.2#readme" class="version-selector__version">
+                                                    v0.4.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.1#readme" class="version-selector__version">
+                                                    v0.4.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.4.0#readme" class="version-selector__version">
+                                                    v0.4.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.3.1#readme" class="version-selector__version">
+                                                    v0.3.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.3.0#readme" class="version-selector__version">
+                                                    v0.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.2.6#readme" class="version-selector__version">
+                                                    v0.2.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.2.5#readme" class="version-selector__version">
+                                                    v0.2.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.2.3#readme" class="version-selector__version">
+                                                    v0.2.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http-client/tree/v0.2.2#readme" class="version-selector__version">
+                                                    v0.2.2
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/http-client">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../http-client/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../http-client/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/http-client:^0.5.10</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (76 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (57 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/igorw">
+                                    <img src="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=80 2x" alt="igorw" title="igorw (23 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cboden">
+                                    <img src="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=80 2x" alt="cboden" title="cboden (19 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/arnaud-lb">
+                                    <img src="https://avatars3.githubusercontent.com/u/365207?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/365207?v=4&amp;s=80 2x" alt="arnaud-lb" title="arnaud-lb (13 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (7 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/dpovshed">
+                                    <img src="https://avatars2.githubusercontent.com/u/786020?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/786020?v=4&amp;s=80 2x" alt="dpovshed" title="dpovshed (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cursedcoder">
+                                    <img src="https://avatars3.githubusercontent.com/u/899452?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/899452?v=4&amp;s=80 2x" alt="cursedcoder" title="cursedcoder (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/mdrost">
+                                    <img src="https://avatars1.githubusercontent.com/u/4083346?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/4083346?v=4&amp;s=80 2x" alt="mdrost" title="mdrost (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/djagya">
+                                    <img src="https://avatars0.githubusercontent.com/u/2600431?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/2600431?v=4&amp;s=80 2x" alt="djagya" title="djagya (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/carusogabriel">
+                                    <img src="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=80 2x" alt="carusogabriel" title="carusogabriel (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jmalloc">
+                                    <img src="https://avatars3.githubusercontent.com/u/761536?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/761536?v=4&amp;s=80 2x" alt="jmalloc" title="jmalloc (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/Th3Mouk">
+                                    <img src="https://avatars0.githubusercontent.com/u/5006899?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/5006899?v=4&amp;s=80 2x" alt="Th3Mouk" title="Th3Mouk (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/mbonneau">
+                                    <img src="https://avatars3.githubusercontent.com/u/748287?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/748287?v=4&amp;s=80 2x" alt="mbonneau" title="mbonneau (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/weichenlin">
+                                    <img src="https://avatars1.githubusercontent.com/u/3406567?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/3406567?v=4&amp;s=80 2x" alt="weichenlin" title="weichenlin (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/e3betht">
+                                    <img src="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=80 2x" alt="e3betht" title="e3betht (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/mmelvin0">
+                                    <img src="https://avatars2.githubusercontent.com/u/762247?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/762247?v=4&amp;s=80 2x" alt="mmelvin0" title="mmelvin0 (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-http-client-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-http-client-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,1 6,1 12,1 18,1 24,1 30,1 36,1 42,1 48,1 54,1 60,1 66,1 72,1 78,1 84,1 90,1 96,1 102,1 108,1 114,1 120,1 126,1 132,1 138,1 144,1 150,1 156,2 162,2 168,1 174,1 180,1 186,1 192,6 198,1 204,1 210,1 216,1 222,1 228,1 234,1 240,1 246,1 252,1 258,1 264,1 270,1 276,1 282,1 288,1 294,1 300,1 306,1" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-http-client-participation-gradient);mask:url(#reactphp-http-client-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/http/changelog.html b/http/changelog.html
new file mode 100644
index 000000000..dd98f4b99
--- /dev/null
+++ b/http/changelog.html
@@ -0,0 +1,1574 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>HTTP: Changelog - ReactPHP</title>
+
+        <meta name="description" content="Event-driven, streaming plaintext HTTP and secure HTTPS server for ReactPHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+        <link href="https://github.com/reactphp/http/releases.atom" type="application/atom+xml" rel="alternate" title="HTTP Changelog">
+    </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                    <h1>HTTP Changelog</h1>
+
+    <ul class="toc">
+            <li><a href="#2020" title="Jump to year 2020 (1 release)">2020</a></li>
+            <li><a href="#2019" title="Jump to year 2019 (2 releases)">2019</a></li>
+            <li><a href="#2018" title="Jump to year 2018 (3 releases)">2018</a></li>
+            <li><a href="#2017" title="Jump to year 2017 (10 releases)">2017</a></li>
+            <li><a href="#2016" title="Jump to year 2016 (1 release)">2016</a></li>
+            <li><a href="#2015" title="Jump to year 2015 (1 release)">2015</a></li>
+            <li><a href="#2014" title="Jump to year 2014 (1 release)">2014</a></li>
+            <li><a href="#2013" title="Jump to year 2013 (1 release)">2013</a></li>
+            <li><a href="#2012" title="Jump to year 2012 (7 releases)">2012</a></li>
+        </ul>
+
+    <h2>
+        <a id="2020" class="anchor" href="#2020" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2020
+    </h2>
+
+    
+            <h3>
+        <a id="086-2020-01-12" class="anchor" href="#086-2020-01-12" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.8.6
+
+        <small>
+            (2020-01-12)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.8.6" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix parsing Cookie request header with comma in its values (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="530559091" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/352" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/352/hovercard" href="https://github.com/reactphp/http/pull/352">#352</a> by @fiskie)</li>
+<li>Add .gitattributes to exclude dev files from exports (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="530763163" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/353" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/353/hovercard" href="https://github.com/reactphp/http/pull/353">#353</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/reedy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/reedy">@reedy</a>)</li>
+<li>Avoid unneeded warning when decoding invalid data on PHP 7.4 (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="548477670" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/357" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/357/hovercard" href="https://github.com/reactphp/http/pull/357">#357</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2019" class="anchor" href="#2019" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2019
+    </h2>
+
+    
+            <h3>
+        <a id="085-2019-10-29" class="anchor" href="#085-2019-10-29" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.8.5
+
+        <small>
+            (2019-10-29)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.8.5" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Internal refactorings and optimizations to improve request parsing performance.<br>
+Benchmarks suggest number of requests/s improved by ~30% for common <code>GET</code> requests.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="456296934" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/345" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/345/hovercard" href="https://github.com/reactphp/http/pull/345">#345</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="456649853" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/346" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/346/hovercard" href="https://github.com/reactphp/http/pull/346">#346</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="498214944" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/349" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/349/hovercard" href="https://github.com/reactphp/http/pull/349">#349</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="499118258" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/350" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/350/hovercard" href="https://github.com/reactphp/http/pull/350">#350</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Add documentation and example for JSON/XML request body and<br>
+improve documentation for concurrency and streaming requests and for error handling.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="432871220" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/341" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/341/hovercard" href="https://github.com/reactphp/http/pull/341">#341</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="434218553" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/342" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/342/hovercard" href="https://github.com/reactphp/http/pull/342">#342</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="084-2019-01-16" class="anchor" href="#084-2019-01-16" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.8.4
+
+        <small>
+            (2019-01-16)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.8.4" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: Internal refactoring to simplify response header logic (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="343679950" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/321" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/321/hovercard" href="https://github.com/reactphp/http/pull/321">#321</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Improvement: Assign Content-Length response header automatically only when size is known (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="379770949" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/329" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/329/hovercard" href="https://github.com/reactphp/http/pull/329">#329</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Improvement: Import global functions for better performance (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="380088071" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/330" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/330/hovercard" href="https://github.com/reactphp/http/pull/330">#330</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2018" class="anchor" href="#2018" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2018
+    </h2>
+
+    
+            <h3>
+        <a id="083-2018-04-11" class="anchor" href="#083-2018-04-11" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.8.3
+
+        <small>
+            (2018-04-11)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.8.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Do not pause connection stream to detect closed connections immediately.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="311933954" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/315" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/315/hovercard" href="https://github.com/reactphp/http/pull/315">#315</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Keep incoming <code>Transfer-Encoding: chunked</code> request header.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="312096531" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/316" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/316/hovercard" href="https://github.com/reactphp/http/pull/316">#316</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Reject invalid requests that contain both <code>Content-Length</code> and <code>Transfer-Encoding</code> request headers.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="312429901" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/318" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/318/hovercard" href="https://github.com/reactphp/http/pull/318">#318</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Minor internal refactoring to simplify connection close logic after sending response.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="312197164" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/317" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/317/hovercard" href="https://github.com/reactphp/http/pull/317">#317</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="082-2018-04-06" class="anchor" href="#082-2018-04-06" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.8.2
+
+        <small>
+            (2018-04-06)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.8.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Fix: Do not pass <code>$next</code> handler to final request handler.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="304832383" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/308" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/308/hovercard" href="https://github.com/reactphp/http/pull/308">#308</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Fix awaiting queued handlers when cancelling a queued handler.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="308741696" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/313" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/313/hovercard" href="https://github.com/reactphp/http/pull/313">#313</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Fix Server to skip <code>SERVER_ADDR</code> params for Unix domain sockets (UDS).<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="304829243" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/307" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/307/hovercard" href="https://github.com/reactphp/http/pull/307">#307</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Documentation for PSR-15 middleware and minor documentation improvements.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="311651592" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/314" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/314/hovercard" href="https://github.com/reactphp/http/pull/314">#314</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="286554630" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/297" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/297/hovercard" href="https://github.com/reactphp/http/pull/297">#297</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="286733141" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/298" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/298/hovercard" href="https://github.com/reactphp/http/pull/298">#298</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="307602017" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/310" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/310/hovercard" href="https://github.com/reactphp/http/pull/310">#310</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/seregazhuk/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/seregazhuk">@seregazhuk</a>)</p>
+</li>
+<li>
+<p>Minor code improvements and micro optimizations.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="288894175" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/301" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/301/hovercard" href="https://github.com/reactphp/http/pull/301">#301</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/seregazhuk/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/seregazhuk">@seregazhuk</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="291153053" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/305" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/305/hovercard" href="https://github.com/reactphp/http/pull/305">#305</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/kalessil/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kalessil">@kalessil</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="081-2018-01-05" class="anchor" href="#081-2018-01-05" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.8.1
+
+        <small>
+            (2018-01-05)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.8.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Major request handler performance improvement. Benchmarks suggest number of<br>
+requests/s improved by more than 50% for common <code>GET</code> requests!<br>
+We now avoid queuing, buffering and wrapping incoming requests in promises<br>
+when we're below limits and instead can directly process common requests.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="285206032" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/291" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/291/hovercard" href="https://github.com/reactphp/http/pull/291">#291</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="285208805" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/292" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/292/hovercard" href="https://github.com/reactphp/http/pull/292">#292</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="285229190" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/293" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/293/hovercard" href="https://github.com/reactphp/http/pull/293">#293</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="285253938" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/294" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/294/hovercard" href="https://github.com/reactphp/http/pull/294">#294</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="285939550" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/296" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/296/hovercard" href="https://github.com/reactphp/http/pull/296">#296</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Fix concurrent invoking next middleware request handlers<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="285229190" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/293" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/293/hovercard" href="https://github.com/reactphp/http/pull/293">#293</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Small code improvements<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="281678366" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/286" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/286/hovercard" href="https://github.com/reactphp/http/pull/286">#286</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/seregazhuk/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/seregazhuk">@seregazhuk</a>)</p>
+</li>
+<li>
+<p>Improve test suite to be less fragile when using <code>ext-event</code> and<br>
+fix test suite forward compatibility with upcoming EventLoop releases<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="284312569" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/288" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/288/hovercard" href="https://github.com/reactphp/http/pull/288">#288</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="284903406" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/290" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/290/hovercard" href="https://github.com/reactphp/http/pull/290">#290</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2017" class="anchor" href="#2017" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2017
+    </h2>
+
+    
+            <h3>
+        <a id="080-2017-12-12" class="anchor" href="#080-2017-12-12" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.8.0
+
+        <small>
+            (2017-12-12)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.8.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature / BC break: Add new <code>Server</code> facade that buffers and parses incoming<br>
+HTTP requests. This provides full PSR-7 compatibility, including support for<br>
+form submissions with POST fields and file uploads.<br>
+The old <code>Server</code> has been renamed to <code>StreamingServer</code> for advanced usage<br>
+and is used internally.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="276752971" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/266" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/266/hovercard" href="https://github.com/reactphp/http/pull/266">#266</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278815737" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/271" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/271/hovercard" href="https://github.com/reactphp/http/pull/271">#271</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="281031092" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/281" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/281/hovercard" href="https://github.com/reactphp/http/pull/281">#281</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="281037867" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/282" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/282/hovercard" href="https://github.com/reactphp/http/pull/282">#282</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="281216638" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/283" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/283/hovercard" href="https://github.com/reactphp/http/pull/283">#283</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="281341265" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/284" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/284/hovercard" href="https://github.com/reactphp/http/pull/284">#284</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a> and <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old: handle incomplete/streaming requests</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-smi">$handler</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new: handle complete, buffered and parsed requests</span></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new: full PSR-7 support, including POST fields and file uploads</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-smi">$handler</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new: handle incomplete/streaming requests</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">StreamingServer</span>(<span class="pl-smi">$handler</span>);</span></pre></div>
+<blockquote>
+<p>While this is technically a small BC break, this should in fact not break<br>
+most consuming code. If you rely on the old request streaming, you can<br>
+explicitly use the advanced <code>StreamingServer</code> to restore old behavior.</p>
+</blockquote>
+</li>
+<li>
+<p>Feature: Add support for middleware request handler arrays<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="255686438" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/215" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/215/hovercard" href="https://github.com/reactphp/http/pull/215">#215</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="261101834" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/228" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/228/hovercard" href="https://github.com/reactphp/http/pull/228">#228</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="261879723" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/229" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/229/hovercard" href="https://github.com/reactphp/http/pull/229">#229</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="264378362" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/236" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/236/hovercard" href="https://github.com/reactphp/http/pull/236">#236</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="264519766" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/237" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/237/hovercard" href="https://github.com/reactphp/http/pull/237">#237</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="265180156" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/238" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/238/hovercard" href="https://github.com/reactphp/http/pull/238">#238</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="274787821" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/246" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/246/hovercard" href="https://github.com/reactphp/http/pull/246">#246</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="274796358" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/247" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/247/hovercard" href="https://github.com/reactphp/http/pull/247">#247</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="280812790" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/277" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/277/hovercard" href="https://github.com/reactphp/http/pull/277">#277</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="280913484" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/279" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/279/hovercard" href="https://github.com/reactphp/http/pull/279">#279</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="281355820" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/285" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/285/hovercard" href="https://github.com/reactphp/http/pull/285">#285</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>, <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a> and <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new: middleware request handler arrays</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>, <span class="pl-k">callable</span> <span class="pl-smi">$next</span>) {</span>
+<span class="pl-s1">        <span class="pl-smi">$request</span> <span class="pl-k">=</span> <span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>withHeader(<span class="pl-s"><span class="pl-pds">'</span>Processed<span class="pl-pds">'</span></span>, <span class="pl-c1">time</span>());</span>
+<span class="pl-s1">        <span class="pl-k">return</span> $<span class="pl-smi">next</span>(<span class="pl-smi">$request</span>);</span>
+<span class="pl-s1">    },</span>
+<span class="pl-s1">    <span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) {</span>
+<span class="pl-s1">        <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>();</span>
+<span class="pl-s1">    }</span>
+<span class="pl-s1">));</span></pre></div>
+</li>
+<li>
+<p>Feature: Add support for limiting how many next request handlers can be<br>
+executed concurrently (<code>LimitConcurrentRequestsMiddleware</code>)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="280297642" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/272" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/272/hovercard" href="https://github.com/reactphp/http/pull/272">#272</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a> and <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new: explicitly limit concurrency</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">LimitConcurrentRequestsMiddleware</span>(<span class="pl-c1">10</span>),</span>
+<span class="pl-s1">    <span class="pl-smi">$handler</span></span>
+<span class="pl-s1">));</span></pre></div>
+</li>
+<li>
+<p>Feature: Add support for buffering the incoming request body<br>
+(<code>RequestBodyBufferMiddleware</code>).<br>
+This feature mimics PHP's default behavior and respects its <code>post_max_size</code><br>
+ini setting by default and allows explicit configuration.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="255725539" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/216" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/216/hovercard" href="https://github.com/reactphp/http/pull/216">#216</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="259288990" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/224" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/224/hovercard" href="https://github.com/reactphp/http/pull/224">#224</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="276282888" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/263" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/263/hovercard" href="https://github.com/reactphp/http/pull/263">#263</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="280748507" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/276" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/276/hovercard" href="https://github.com/reactphp/http/pull/276">#276</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="280814027" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/278" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/278/hovercard" href="https://github.com/reactphp/http/pull/278">#278</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="263793599" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/235" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/235/hovercard" href="https://github.com/reactphp/http/pull/235">#235</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/andig/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/andig">@andig</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new: buffer up to 10 requests with 8 MiB each</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">StreamingServer</span>(<span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">LimitConcurrentRequestsMiddleware</span>(<span class="pl-c1">10</span>),</span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">RequestBodyBufferMiddleware</span>(<span class="pl-s"><span class="pl-pds">'</span>8M<span class="pl-pds">'</span></span>),</span>
+<span class="pl-s1">    <span class="pl-smi">$handler</span></span>
+<span class="pl-s1">));</span></pre></div>
+</li>
+<li>
+<p>Feature: Add support for parsing form submissions with POST fields and file<br>
+uploads (<code>RequestBodyParserMiddleware</code>).<br>
+This feature mimics PHP's default behavior and respects its ini settings and<br>
+<code>MAX_FILE_SIZE</code> POST fields by default and allows explicit configuration.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="257175939" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/220" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/220/hovercard" href="https://github.com/reactphp/http/pull/220">#220</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="260387117" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/226" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/226/hovercard" href="https://github.com/reactphp/http/pull/226">#226</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="275759557" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/252" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/252/hovercard" href="https://github.com/reactphp/http/pull/252">#252</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="275871424" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/261" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/261/hovercard" href="https://github.com/reactphp/http/pull/261">#261</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="276473027" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/264" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/264/hovercard" href="https://github.com/reactphp/http/pull/264">#264</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="276751163" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/265" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/265/hovercard" href="https://github.com/reactphp/http/pull/265">#265</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="277471070" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/267" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/267/hovercard" href="https://github.com/reactphp/http/pull/267">#267</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278043272" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/268" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/268/hovercard" href="https://github.com/reactphp/http/pull/268">#268</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="280552347" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/274" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/274/hovercard" href="https://github.com/reactphp/http/pull/274">#274</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a> and <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new: buffer up to 10 requests with 8 MiB each</span></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> and limit to 4 uploads with 2 MiB each</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">StreamingServer</span>(<span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">LimitConcurrentRequestsMiddleware</span>(<span class="pl-c1">10</span>),</span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">RequestBodyBufferMiddleware</span>(<span class="pl-s"><span class="pl-pds">'</span>8M<span class="pl-pds">'</span></span>),</span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">RequestBodyParserMiddleware</span>(<span class="pl-s"><span class="pl-pds">'</span>2M<span class="pl-pds">'</span></span>, <span class="pl-c1">4</span>)</span>
+<span class="pl-s1">    <span class="pl-smi">$handler</span></span>
+<span class="pl-s1">));</span></pre></div>
+</li>
+<li>
+<p>Feature: Update Socket to work around sending secure HTTPS responses with PHP &lt; 7.1.4<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="273782825" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/244" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/244/hovercard" href="https://github.com/reactphp/http/pull/244">#244</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Support sending same response header multiple times (e.g. <code>Set-Cookie</code>)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="274874863" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/248" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/248/hovercard" href="https://github.com/reactphp/http/pull/248">#248</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Raise maximum request header size to 8k to match common implementations<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="275765259" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/253" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/253/hovercard" href="https://github.com/reactphp/http/pull/253">#253</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by adding forward compatibility with PHPUnit 6, test<br>
+against PHP 7.1 and PHP 7.2 and refactor and remove risky and duplicate tests.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="273192845" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/243" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/243/hovercard" href="https://github.com/reactphp/http/pull/243">#243</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278458906" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/269" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/269/hovercard" href="https://github.com/reactphp/http/pull/269">#269</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278462213" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/270" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/270/hovercard" href="https://github.com/reactphp/http/pull/270">#270</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/carusogabriel/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/carusogabriel">@carusogabriel</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="274947303" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/249" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/249/hovercard" href="https://github.com/reactphp/http/pull/249">#249</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Minor code refactoring to move internal classes to <code>React\Http\Io</code> namespace<br>
+and clean up minor code and documentation issues<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="274968317" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/251" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/251/hovercard" href="https://github.com/reactphp/http/pull/251">#251</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="260893571" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/227" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/227/hovercard" href="https://github.com/reactphp/http/pull/227">#227</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/kalessil/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kalessil">@kalessil</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="265560655" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/240" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/240/hovercard" href="https://github.com/reactphp/http/pull/240">#240</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/christoph-kluge/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/christoph-kluge">@christoph-kluge</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="262001942" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/230" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/230/hovercard" href="https://github.com/reactphp/http/pull/230">#230</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="280922134" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/280" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/280/hovercard" href="https://github.com/reactphp/http/pull/280">#280</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/andig/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/andig">@andig</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="074-2017-08-16" class="anchor" href="#074-2017-08-16" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.7.4
+
+        <small>
+            (2017-08-16)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.7.4" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: Target evenement 3.0 a long side 2.0 and 1.0<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="250354168" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/212" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/212/hovercard" href="https://github.com/reactphp/http/pull/212">#212</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="073-2017-08-14" class="anchor" href="#073-2017-08-14" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.7.3
+
+        <small>
+            (2017-08-14)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.7.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Support <code>Throwable</code> when setting previous exception from server callback<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="218201524" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/155" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/155/hovercard" href="https://github.com/reactphp/http/pull/155">#155</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</p>
+</li>
+<li>
+<p>Fix: Fixed URI parsing for origin-form requests that contain scheme separator<br>
+such as <code>/path?param=http://example.com</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="244120827" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/209" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/209/hovercard" href="https://github.com/reactphp/http/pull/209">#209</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/aaronbonneau/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/aaronbonneau">@aaronbonneau</a>)</p>
+</li>
+<li>
+<p>Improve test suite by locking Travis distro so new defaults will not break the build<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248025434" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/211" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/211/hovercard" href="https://github.com/reactphp/http/pull/211">#211</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="072-2017-07-04" class="anchor" href="#072-2017-07-04" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.7.2
+
+        <small>
+            (2017-07-04)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.7.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Fix: Stricter check for invalid request-line in HTTP requests<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="240390259" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/206" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/206/hovercard" href="https://github.com/reactphp/http/pull/206">#206</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Refactor to use HTTP response reason phrases from response object<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="240365065" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/205" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/205/hovercard" href="https://github.com/reactphp/http/pull/205">#205</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="071-2017-06-17" class="anchor" href="#071-2017-06-17" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.7.1
+
+        <small>
+            (2017-06-17)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.7.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Fix: Fix parsing CONNECT request without <code>Host</code> header<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="236290646" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/201" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/201/hovercard" href="https://github.com/reactphp/http/pull/201">#201</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Internal preparation for future PSR-7 <code>UploadedFileInterface</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="232610790" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/199" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/199/hovercard" href="https://github.com/reactphp/http/pull/199">#199</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="070-2017-05-29" class="anchor" href="#070-2017-05-29" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.7.0
+
+        <small>
+            (2017-05-29)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.7.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature / BC break: Use PSR-7 (http-message) standard and<br>
+<code>Request-In-Response-Out</code>-style request handler callback.<br>
+Pass standard PSR-7 <code>ServerRequestInterface</code> and expect any standard<br>
+PSR-7 <code>ResponseInterface</code> in return for the request handler callback.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="214687443" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/146" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/146/hovercard" href="https://github.com/reactphp/http/pull/146">#146</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="217026459" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/152" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/152/hovercard" href="https://github.com/reactphp/http/pull/152">#152</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="222915507" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/170" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/170/hovercard" href="https://github.com/reactphp/http/pull/170">#170</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/legionth/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/legionth">@legionth</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old</span></span>
+<span class="pl-s1"><span class="pl-smi">$app</span> <span class="pl-k">=</span> <span class="pl-k">function</span> (<span class="pl-c1">Request</span> <span class="pl-smi">$request</span>, <span class="pl-c1">Response</span> <span class="pl-smi">$response</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$response</span><span class="pl-k">-&gt;</span>writeHead(<span class="pl-c1">200</span>, <span class="pl-c1">array</span>(<span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>text/plain<span class="pl-pds">'</span></span>));</span>
+<span class="pl-s1">    <span class="pl-smi">$response</span><span class="pl-k">-&gt;</span>end(<span class="pl-s"><span class="pl-pds">"</span>Hello world!<span class="pl-cce">\n</span><span class="pl-pds">"</span></span>);</span>
+<span class="pl-s1">};</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new</span></span>
+<span class="pl-s1"><span class="pl-smi">$app</span> <span class="pl-k">=</span> <span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) {</span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(</span>
+<span class="pl-s1">        <span class="pl-c1">200</span>,</span>
+<span class="pl-s1">        <span class="pl-c1">array</span>(<span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>text/plain<span class="pl-pds">'</span></span>),</span>
+<span class="pl-s1">        <span class="pl-s"><span class="pl-pds">"</span>Hello world!<span class="pl-cce">\n</span><span class="pl-pds">"</span></span></span>
+<span class="pl-s1">    );</span>
+<span class="pl-s1">};</span></pre></div>
+<p>A <code>Content-Length</code> header will automatically be included if the size can be<br>
+determined from the response body.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="220269422" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/164" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/164/hovercard" href="https://github.com/reactphp/http/pull/164">#164</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/maciejmrozinski/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/maciejmrozinski">@maciejmrozinski</a>)</p>
+<p>The request handler callback will automatically make sure that responses to<br>
+HEAD requests and certain status codes, such as <code>204</code> (No Content), never<br>
+contain a response body.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="218356880" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/156" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/156/hovercard" href="https://github.com/reactphp/http/pull/156">#156</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>The intermediary <code>100 Continue</code> response will automatically be sent if<br>
+demanded by a HTTP/1.1 client.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="213033632" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/144" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/144/hovercard" href="https://github.com/reactphp/http/pull/144">#144</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/legionth/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/legionth">@legionth</a>)</p>
+<p>The request handler callback can now return a standard <code>Promise</code> if<br>
+processing the request needs some time, such as when querying a database.<br>
+Similarly, the request handler may return a streaming response if the<br>
+response body comes from a <code>ReadableStreamInterface</code> or its size is<br>
+unknown in advance.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old</span></span>
+<span class="pl-s1"><span class="pl-smi">$app</span> <span class="pl-k">=</span> <span class="pl-k">function</span> (<span class="pl-c1">Request</span> <span class="pl-smi">$request</span>, <span class="pl-c1">Response</span> <span class="pl-smi">$response</span>) <span class="pl-k">use</span> (<span class="pl-smi">$db</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$db</span><span class="pl-k">-&gt;</span>query()<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$result</span>) <span class="pl-k">use</span> (<span class="pl-smi">$response</span>) {</span>
+<span class="pl-s1">        <span class="pl-smi">$response</span><span class="pl-k">-&gt;</span>writeHead(<span class="pl-c1">200</span>, <span class="pl-c1">array</span>(<span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>text/plain<span class="pl-pds">'</span></span>));</span>
+<span class="pl-s1">        <span class="pl-smi">$response</span><span class="pl-k">-&gt;</span>end(<span class="pl-smi">$result</span>);</span>
+<span class="pl-s1">    });</span>
+<span class="pl-s1">};</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new</span></span>
+<span class="pl-s1"><span class="pl-smi">$app</span> <span class="pl-k">=</span> <span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) <span class="pl-k">use</span> (<span class="pl-smi">$db</span>) {</span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-smi">$db</span><span class="pl-k">-&gt;</span>query()<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$result</span>) {</span>
+<span class="pl-s1">        <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(</span>
+<span class="pl-s1">            <span class="pl-c1">200</span>,</span>
+<span class="pl-s1">            <span class="pl-c1">array</span>(<span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>text/plain<span class="pl-pds">'</span></span>),</span>
+<span class="pl-s1">            <span class="pl-smi">$result</span></span>
+<span class="pl-s1">        );</span>
+<span class="pl-s1">    });</span>
+<span class="pl-s1">};</span></pre></div>
+<p>Pending promies and response streams will automatically be canceled once the<br>
+client connection closes.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="230244362" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/187" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/187/hovercard" href="https://github.com/reactphp/http/pull/187">#187</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="230671651" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/188" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/188/hovercard" href="https://github.com/reactphp/http/pull/188">#188</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>The <code>ServerRequestInterface</code> contains the full effective request URI,<br>
+server-side parameters, query parameters and parsed cookies values as<br>
+defined in PSR-7.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="221799562" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/167" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/167/hovercard" href="https://github.com/reactphp/http/pull/167">#167</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="223610699" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/174" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/174/hovercard" href="https://github.com/reactphp/http/pull/174">#174</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="223610861" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/175" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/175/hovercard" href="https://github.com/reactphp/http/pull/175">#175</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="224599574" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/180" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/180/hovercard" href="https://github.com/reactphp/http/pull/180">#180</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/legionth/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/legionth">@legionth</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$app</span> <span class="pl-k">=</span> <span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) {</span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(</span>
+<span class="pl-s1">        <span class="pl-c1">200</span>,</span>
+<span class="pl-s1">        <span class="pl-c1">array</span>(<span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>text/plain<span class="pl-pds">'</span></span>),</span>
+<span class="pl-s1">        <span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>getUri()<span class="pl-k">-&gt;</span>getScheme()</span>
+<span class="pl-s1">    );</span>
+<span class="pl-s1">};</span></pre></div>
+<p>Advanced: Support duplex stream response for <code>Upgrade</code> requests such as<br>
+<code>Upgrade: WebSocket</code> or custom protocols and <code>CONNECT</code> requests<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="230949551" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/189" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/189/hovercard" href="https://github.com/reactphp/http/pull/189">#189</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="231333351" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/190" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/190/hovercard" href="https://github.com/reactphp/http/pull/190">#190</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<blockquote>
+<p>Note that the request body will currently not be buffered and parsed by<br>
+default, which depending on your particilar use-case, may limit<br>
+interoperability with the PSR-7 (http-message) ecosystem.<br>
+The provided streaming request body interfaces allow you to perform<br>
+buffering and parsing as needed in the request handler callback.<br>
+See also the README and examples for more details.</p>
+</blockquote>
+</li>
+<li>
+<p>Feature / BC break: Replace <code>request</code> listener with callback function and<br>
+use <code>listen()</code> method to support multiple listening sockets<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206161976" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/97" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/97/hovercard" href="https://github.com/reactphp/http/pull/97">#97</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/legionth/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/legionth">@legionth</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="231876511" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/193" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/193/hovercard" href="https://github.com/reactphp/http/pull/193">#193</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-smi">$socket</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>request<span class="pl-pds">'</span></span>, <span class="pl-smi">$app</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-smi">$app</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>listen(<span class="pl-smi">$socket</span>);</span></pre></div>
+</li>
+<li>
+<p>Feature: Support the more advanced HTTP requests, such as<br>
+<code>OPTIONS * HTTP/1.1</code> (<code>OPTIONS</code> method in asterisk-form),<br>
+<code>GET http://example.com/path HTTP/1.1</code> (plain proxy requests in absolute-form),<br>
+<code>CONNECT example.com:443 HTTP/1.1</code> (<code>CONNECT</code> proxy requests in authority-form)<br>
+and sanitize <code>Host</code> header value across all requests.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="218363832" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/157" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/157/hovercard" href="https://github.com/reactphp/http/pull/157">#157</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="218456601" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/158" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/158/hovercard" href="https://github.com/reactphp/http/pull/158">#158</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="218974256" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/161" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/161/hovercard" href="https://github.com/reactphp/http/pull/161">#161</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="220665434" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/165" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/165/hovercard" href="https://github.com/reactphp/http/pull/165">#165</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="222474879" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/169" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/169/hovercard" href="https://github.com/reactphp/http/pull/169">#169</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="223517004" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/173" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/173/hovercard" href="https://github.com/reactphp/http/pull/173">#173</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Forward compatibility with Socket v1.0, v0.8, v0.7 and v0.6 and<br>
+forward compatibility with Stream v1.0 and v0.7<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="218201458" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/154" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/154/hovercard" href="https://github.com/reactphp/http/pull/154">#154</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="220031156" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/163" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/163/hovercard" href="https://github.com/reactphp/http/pull/163">#163</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="228459182" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/183" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/183/hovercard" href="https://github.com/reactphp/http/pull/183">#183</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="228491007" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/184" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/184/hovercard" href="https://github.com/reactphp/http/pull/184">#184</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="231620998" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/191" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/191/hovercard" href="https://github.com/reactphp/http/pull/191">#191</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Simplify examples to ease getting started and<br>
+add benchmarking example<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="216745046" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/151" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/151/hovercard" href="https://github.com/reactphp/http/pull/151">#151</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="220016609" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/162" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/162/hovercard" href="https://github.com/reactphp/http/pull/162">#162</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by adding tests for case insensitive chunked transfer<br>
+encoding and ignoring HHVM test failures until Travis tests work again.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="215422488" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/150" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/150/hovercard" href="https://github.com/reactphp/http/pull/150">#150</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/legionth/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/legionth">@legionth</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="228868611" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/185" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/185/hovercard" href="https://github.com/reactphp/http/pull/185">#185</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="060-2017-03-09" class="anchor" href="#060-2017-03-09" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.6.0
+
+        <small>
+            (2017-03-09)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.6.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature / BC break: The <code>Request</code> and <code>Response</code> objects now follow strict<br>
+stream semantics and their respective methods and events.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="207239007" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/116" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/116/hovercard" href="https://github.com/reactphp/http/pull/116">#116</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="208724675" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/129" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/129/hovercard" href="https://github.com/reactphp/http/pull/129">#129</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="209625936" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/133" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/133/hovercard" href="https://github.com/reactphp/http/pull/133">#133</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="210935826" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/135" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/135/hovercard" href="https://github.com/reactphp/http/pull/135">#135</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="211263684" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/136" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/136/hovercard" href="https://github.com/reactphp/http/pull/136">#136</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="211716146" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/137" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/137/hovercard" href="https://github.com/reactphp/http/pull/137">#137</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="211731585" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/138" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/138/hovercard" href="https://github.com/reactphp/http/pull/138">#138</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="212087702" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/140" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/140/hovercard" href="https://github.com/reactphp/http/pull/140">#140</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="212137195" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/141" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/141/hovercard" href="https://github.com/reactphp/http/pull/141">#141</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/legionth/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/legionth">@legionth</a><br>
+and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="208419267" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/122" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/122/hovercard" href="https://github.com/reactphp/http/pull/122">#122</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="208423792" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/123" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/123/hovercard" href="https://github.com/reactphp/http/pull/123">#123</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="208880989" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/130" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/130/hovercard" href="https://github.com/reactphp/http/pull/130">#130</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="209072039" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/131" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/131/hovercard" href="https://github.com/reactphp/http/pull/131">#131</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="209106037" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/132" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/132/hovercard" href="https://github.com/reactphp/http/pull/132">#132</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="212765376" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/142" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/142/hovercard" href="https://github.com/reactphp/http/pull/142">#142</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>This implies that the <code>Server</code> now supports proper detection of the request<br>
+message body stream, such as supporting decoding chunked transfer encoding,<br>
+delimiting requests with an explicit <code>Content-Length</code> header<br>
+and those with an empty request message body.</p>
+<p>These streaming semantics are compatible with previous Stream v0.5, future<br>
+compatible with v0.5 and upcoming v0.6 versions and can be used like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$http</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>request<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-c1">Request</span> <span class="pl-smi">$request</span>, <span class="pl-c1">Response</span> <span class="pl-smi">$response</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$contentLength</span> <span class="pl-k">=</span> <span class="pl-c1">0</span>;</span>
+<span class="pl-s1">    <span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>data<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-smi">$data</span>) <span class="pl-k">use</span> (<span class="pl-k">&amp;</span><span class="pl-smi">$contentLength</span>) {</span>
+<span class="pl-s1">        <span class="pl-smi">$contentLength</span> <span class="pl-k">+</span><span class="pl-k">=</span> <span class="pl-c1">strlen</span>(<span class="pl-smi">$data</span>);</span>
+<span class="pl-s1">    });</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>end<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> () <span class="pl-k">use</span> (<span class="pl-smi">$response</span>, <span class="pl-k">&amp;</span><span class="pl-smi">$contentLength</span>){</span>
+<span class="pl-s1">        <span class="pl-smi">$response</span><span class="pl-k">-&gt;</span>writeHead(<span class="pl-c1">200</span>, <span class="pl-c1">array</span>(<span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>text/plain<span class="pl-pds">'</span></span>));</span>
+<span class="pl-s1">        <span class="pl-smi">$response</span><span class="pl-k">-&gt;</span>end(<span class="pl-s"><span class="pl-pds">"</span>The length of the submitted request body is: <span class="pl-pds">"</span></span> <span class="pl-k">.</span> <span class="pl-smi">$contentLength</span>);</span>
+<span class="pl-s1">    });</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> an error occured</span></span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> e.g. on invalid chunked encoded data or an unexpected 'end' event </span></span>
+<span class="pl-s1">    <span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>error<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-c1">\Exception</span> <span class="pl-smi">$exception</span>) <span class="pl-k">use</span> (<span class="pl-smi">$response</span>, <span class="pl-k">&amp;</span><span class="pl-smi">$contentLength</span>) {</span>
+<span class="pl-s1">        <span class="pl-smi">$response</span><span class="pl-k">-&gt;</span>writeHead(<span class="pl-c1">400</span>, <span class="pl-c1">array</span>(<span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>text/plain<span class="pl-pds">'</span></span>));</span>
+<span class="pl-s1">        <span class="pl-smi">$response</span><span class="pl-k">-&gt;</span>end(<span class="pl-s"><span class="pl-pds">"</span>An error occured while reading at length: <span class="pl-pds">"</span></span> <span class="pl-k">.</span> <span class="pl-smi">$contentLength</span>);</span>
+<span class="pl-s1">    });</span>
+<span class="pl-s1">});</span></pre></div>
+<p>Similarly, the <code>Request</code> and <code>Response</code> now strictly follow the<br>
+<code>close()</code> method and <code>close</code> event semantics.<br>
+Closing the <code>Request</code> does not interrupt the underlying TCP/IP in<br>
+order to allow still sending back a valid response message.<br>
+Closing the <code>Response</code> does terminate the underlying TCP/IP<br>
+connection in order to clean up resources.</p>
+<p>You should make sure to always attach a <code>request</code> event listener<br>
+like above. The <code>Server</code> will not respond to an incoming HTTP<br>
+request otherwise and keep the TCP/IP connection pending until the<br>
+other side chooses to close the connection.</p>
+</li>
+<li>
+<p>Feature: Support <code>HTTP/1.1</code> and <code>HTTP/1.0</code> for <code>Request</code> and <code>Response</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="208556363" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/124" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/124/hovercard" href="https://github.com/reactphp/http/pull/124">#124</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="208720503" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/125" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/125/hovercard" href="https://github.com/reactphp/http/pull/125">#125</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="208721647" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/126" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/126/hovercard" href="https://github.com/reactphp/http/pull/126">#126</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="208722894" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/127" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/127/hovercard" href="https://github.com/reactphp/http/pull/127">#127</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="208723975" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/128" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/128/hovercard" href="https://github.com/reactphp/http/pull/128">#128</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="212002539" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/139" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/139/hovercard" href="https://github.com/reactphp/http/pull/139">#139</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/legionth/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/legionth">@legionth</a>)</p>
+<p>The outgoing <code>Response</code> will automatically use the same HTTP version as the<br>
+incoming <code>Request</code> message and will only apply <code>HTTP/1.1</code> semantics if<br>
+applicable. This includes that the <code>Response</code> will automatically attach a<br>
+<code>Date</code> and <code>Connection: close</code> header if applicable.</p>
+<p>This implies that the <code>Server</code> now automatically responds with HTTP error<br>
+messages for invalid requests (status 400) and those exceeding internal<br>
+request header limits (status 431).</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="050-2017-02-16" class="anchor" href="#050-2017-02-16" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.5.0
+
+        <small>
+            (2017-02-16)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.5.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature / BC break: Change <code>Request</code> methods to be in line with PSR-7<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="207728274" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/117" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/117/hovercard" href="https://github.com/reactphp/http/pull/117">#117</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<ul>
+<li>Rename <code>getQuery()</code> to <code>getQueryParams()</code></li>
+<li>Rename <code>getHttpVersion()</code> to <code>getProtocolVersion()</code></li>
+<li>Change <code>getHeaders()</code> to always return an array of string values<br>
+for each header</li>
+</ul>
+</li>
+<li>
+<p>Feature / BC break: Update Socket component to v0.5 and<br>
+add secure HTTPS server support<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="205507446" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/90" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/90/hovercard" href="https://github.com/reactphp/http/pull/90">#90</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="208097779" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/119" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/119/hovercard" href="https://github.com/reactphp/http/pull/119">#119</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old plaintext HTTP server</span></span>
+<span class="pl-s1"><span class="pl-smi">$socket</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Server</span>(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$socket</span><span class="pl-k">-&gt;</span>listen(<span class="pl-c1">8080</span>, <span class="pl-s"><span class="pl-pds">'</span>127.0.0.1<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"><span class="pl-smi">$http</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Http\</span><span class="pl-c1">Server</span>(<span class="pl-smi">$socket</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new plaintext HTTP server</span></span>
+<span class="pl-s1"><span class="pl-smi">$socket</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Server</span>(<span class="pl-s"><span class="pl-pds">'</span>127.0.0.1:8080<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$http</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Http\</span><span class="pl-c1">Server</span>(<span class="pl-smi">$socket</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new secure HTTPS server</span></span>
+<span class="pl-s1"><span class="pl-smi">$socket</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Server</span>(<span class="pl-s"><span class="pl-pds">'</span>127.0.0.1:8080<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$socket</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">SecureServer</span>(<span class="pl-smi">$socket</span>, <span class="pl-smi">$loop</span>, <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>local_cert<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">__DIR__</span> <span class="pl-k">.</span> <span class="pl-s"><span class="pl-pds">'</span>/localhost.pem<span class="pl-pds">'</span></span></span>
+<span class="pl-s1">));</span>
+<span class="pl-s1"><span class="pl-smi">$http</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Http\</span><span class="pl-c1">Server</span>(<span class="pl-smi">$socket</span>);</span></pre></div>
+</li>
+<li>
+<p>BC break: Mark internal APIs as internal or private and<br>
+remove unneeded <code>ServerInterface</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="207736752" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/118" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/118/hovercard" href="https://github.com/reactphp/http/pull/118">#118</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="205866427" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/95" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/95/hovercard" href="https://github.com/reactphp/http/pull/95">#95</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/legionth/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/legionth">@legionth</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="044-2017-02-13" class="anchor" href="#044-2017-02-13" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.4
+
+        <small>
+            (2017-02-13)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.4.4" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Add request header accessors (à la PSR-7)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206525234" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/103" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/103/hovercard" href="https://github.com/reactphp/http/pull/103">#103</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> get value of host header</span></span>
+<span class="pl-s1"><span class="pl-smi">$host</span> <span class="pl-k">=</span> <span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>getHeaderLine(<span class="pl-s"><span class="pl-pds">'</span>Host<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> get list of all cookie headers</span></span>
+<span class="pl-s1"><span class="pl-smi">$cookies</span> <span class="pl-k">=</span> <span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>getHeader(<span class="pl-s"><span class="pl-pds">'</span>Cookie<span class="pl-pds">'</span></span>);</span></pre></div>
+</li>
+<li>
+<p>Feature: Forward <code>pause()</code> and <code>resume()</code> from <code>Request</code> to underlying connection<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206817301" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/110" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/110/hovercard" href="https://github.com/reactphp/http/pull/110">#110</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> support back-pressure when piping request into slower destination</span></span>
+<span class="pl-s1"><span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>pipe(<span class="pl-smi">$dest</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> manually pause/resume request</span></span>
+<span class="pl-s1"><span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>pause();</span>
+<span class="pl-s1"><span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>resume();</span></pre></div>
+</li>
+<li>
+<p>Fix: Fix <code>100-continue</code> to be handled case-insensitive and ignore it for HTTP/1.0.<br>
+Similarly, outgoing response headers are now handled case-insensitive, e.g<br>
+we no longer apply chunked transfer encoding with mixed-case <code>Content-Length</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206791192" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/107" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/107/hovercard" href="https://github.com/reactphp/http/pull/107">#107</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> now handled case-insensitive</span></span>
+<span class="pl-s1"><span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>expectsContinue();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> now works just like properly-cased header</span></span>
+<span class="pl-s1"><span class="pl-smi">$response</span><span class="pl-k">-&gt;</span>writeHead(<span class="pl-smi">$status</span>, <span class="pl-c1">array</span>(<span class="pl-s"><span class="pl-pds">'</span>content-length<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">0</span>));</span></pre></div>
+</li>
+<li>
+<p>Fix: Do not emit empty <code>data</code> events and ignore empty writes in order to<br>
+not mess up chunked transfer encoding<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206791835" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/108" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/108/hovercard" href="https://github.com/reactphp/http/pull/108">#108</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206982814" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/112" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/112/hovercard" href="https://github.com/reactphp/http/pull/112">#112</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Lock and test minimum required dependency versions and support PHPUnit v5<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206984349" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/113" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/113/hovercard" href="https://github.com/reactphp/http/pull/113">#113</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206989128" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/115" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/115/hovercard" href="https://github.com/reactphp/http/pull/115">#115</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206985941" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/114" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/114/hovercard" href="https://github.com/reactphp/http/pull/114">#114</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/andig/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/andig">@andig</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="043-2017-02-10" class="anchor" href="#043-2017-02-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.3
+
+        <small>
+            (2017-02-10)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.4.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix: Do not take start of body into account when checking maximum header size<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="205440658" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/88" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/88/hovercard" href="https://github.com/reactphp/http/pull/88">#88</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/nopolabs/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nopolabs">@nopolabs</a>)</li>
+<li>Fix: Remove <code>data</code> listener if <code>HeaderParser</code> emits an error<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="189686153" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/83" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/83/hovercard" href="https://github.com/reactphp/http/pull/83">#83</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/nick4fake/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nick4fake">@nick4fake</a>)</li>
+<li>First class support for PHP 5.3 through PHP 7 and HHVM<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206488535" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/101" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/101/hovercard" href="https://github.com/reactphp/http/pull/101">#101</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206489531" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/102" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/102/hovercard" href="https://github.com/reactphp/http/pull/102">#102</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="174904804" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/66" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/66/hovercard" href="https://github.com/reactphp/http/pull/66">#66</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</li>
+<li>Improve test suite by adding PHPUnit to require-dev,<br>
+improving forward compatibility with newer PHPUnit versions<br>
+and replacing unneeded test stubs<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="205508812" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/92" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/92/hovercard" href="https://github.com/reactphp/http/pull/92">#92</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="205510801" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/93" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/93/hovercard" href="https://github.com/reactphp/http/pull/93">#93</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/nopolabs/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nopolabs">@nopolabs</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206474206" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/100" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/100/hovercard" href="https://github.com/reactphp/http/pull/100">#100</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/legionth/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/legionth">@legionth</a>)</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2016" class="anchor" href="#2016" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2016
+    </h2>
+
+    
+            <h3>
+        <a id="042-2016-11-09" class="anchor" href="#042-2016-11-09" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.2
+
+        <small>
+            (2016-11-09)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.4.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Remove all listeners after emitting error in RequestHeaderParser <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="175987283" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/68" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/68/hovercard" href="https://github.com/reactphp/http/pull/68">#68</a> <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a></li>
+<li>Catch Guzzle parse request errors <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="174901089" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/65" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/65/hovercard" href="https://github.com/reactphp/http/pull/65">#65</a> <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a></li>
+<li>Remove branch-alias definition as per <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="137404090" data-permission-text="Title is private" data-url="https://github.com/reactphp/reactphp/issues/343" data-hovercard-type="issue" data-hovercard-url="/reactphp/reactphp/issues/343/hovercard" href="https://github.com/reactphp/reactphp/issues/343">reactphp/reactphp#343</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="164108691" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/58" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/58/hovercard" href="https://github.com/reactphp/http/pull/58">#58</a> <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a></li>
+<li>Add functional example to ease getting started <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="174846779" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/64" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/64/hovercard" href="https://github.com/reactphp/http/pull/64">#64</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a></li>
+<li>Naming, immutable array manipulation <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="102646873" data-permission-text="Title is private" data-url="https://github.com/reactphp/http/issues/37" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/http/pull/37/hovercard" href="https://github.com/reactphp/http/pull/37">#37</a> <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/cboden/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cboden">@cboden</a></li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2015" class="anchor" href="#2015" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2015
+    </h2>
+
+    
+            <h3>
+        <a id="041-2015-05-21" class="anchor" href="#041-2015-05-21" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.1
+
+        <small>
+            (2015-05-21)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.4.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Replaced guzzle/parser with guzzlehttp/psr7 by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/cboden/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cboden">@cboden</a></li>
+<li>FIX Continue Header by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/iannsp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/iannsp">@iannsp</a></li>
+<li>Missing type hint by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/marenzo/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/marenzo">@marenzo</a></li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2014" class="anchor" href="#2014" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2014
+    </h2>
+
+    
+            <h3>
+        <a id="040-2014-02-02" class="anchor" href="#040-2014-02-02" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.0
+
+        <small>
+            (2014-02-02)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.4.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>BC break: Bump minimum PHP version to PHP 5.4, remove 5.3 specific hacks</li>
+<li>BC break: Update to React/Promise 2.0</li>
+<li>BC break: Update to Evenement 2.0</li>
+<li>Dependency: Autoloading and filesystem structure now PSR-4 instead of PSR-0</li>
+<li>Bump React dependencies to v0.4</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2013" class="anchor" href="#2013" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2013
+    </h2>
+
+    
+            <h3>
+        <a id="030-2013-02-24" class="anchor" href="#030-2013-02-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.3.0
+
+        <small>
+            (2013-02-24)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.3.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bump React dependencies to v0.3</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2012" class="anchor" href="#2012" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2012
+    </h2>
+
+    
+            <h3>
+        <a id="026-2012-12-26" class="anchor" href="#026-2012-12-26" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.2.6
+
+        <small>
+            (2012-12-26)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.2.6" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: Emit end event when Response closes (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/beaucollins/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/beaucollins">@beaucollins</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="023-2012-11-10" class="anchor" href="#023-2012-11-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.2.3
+
+        <small>
+            (2012-11-10)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.2.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: Forward drain events from HTTP response (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/cs278/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cs278">@cs278</a>)</li>
+<li>Dependency: Updated guzzle deps to <code>3.0.*</code></li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="022-2012-10-28" class="anchor" href="#022-2012-10-28" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.2.2
+
+        <small>
+            (2012-10-28)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.2.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="021-2012-10-02" class="anchor" href="#021-2012-10-02" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.2.1
+
+        <small>
+            (2012-10-02)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.2.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Support HTTP 1.1 continue</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="020-2012-09-10" class="anchor" href="#020-2012-09-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.2.0
+
+        <small>
+            (2012-09-10)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.2.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bump React dependencies to v0.2</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="011-2012-07-12" class="anchor" href="#011-2012-07-12" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.1.1
+
+        <small>
+            (2012-07-12)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.1.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="010-2012-07-11" class="anchor" href="#010-2012-07-11" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.1.0
+
+        <small>
+            (2012-07-11)
+            <a href="https://github.com/reactphp/http/releases/tag/v0.1.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>First tagged release</li>
+</ul>
+
+    <hr>
+    
+    <ul class="links">
+        <li>
+            <a href="https://github.com/reactphp/http/releases.atom">
+                <i class="icon-feed" aria-hidden="true"></i>
+                Subscribe to the Changelog feed
+            </a>
+        </li>
+    </ul>
+                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../http/">HTTP</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v0.8.6
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/http#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.8.5#readme" class="version-selector__version">
+                                                    v0.8.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.8.4#readme" class="version-selector__version">
+                                                    v0.8.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.8.3#readme" class="version-selector__version">
+                                                    v0.8.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.8.2#readme" class="version-selector__version">
+                                                    v0.8.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.8.1#readme" class="version-selector__version">
+                                                    v0.8.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.8.0#readme" class="version-selector__version">
+                                                    v0.8.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.7.4#readme" class="version-selector__version">
+                                                    v0.7.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.7.3#readme" class="version-selector__version">
+                                                    v0.7.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.7.2#readme" class="version-selector__version">
+                                                    v0.7.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.7.1#readme" class="version-selector__version">
+                                                    v0.7.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.7.0#readme" class="version-selector__version">
+                                                    v0.7.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.6.0#readme" class="version-selector__version">
+                                                    v0.6.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.5.0#readme" class="version-selector__version">
+                                                    v0.5.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.4.4#readme" class="version-selector__version">
+                                                    v0.4.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.4.3#readme" class="version-selector__version">
+                                                    v0.4.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.4.2#readme" class="version-selector__version">
+                                                    v0.4.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.4.1#readme" class="version-selector__version">
+                                                    v0.4.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.4.0#readme" class="version-selector__version">
+                                                    v0.4.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.3.0#readme" class="version-selector__version">
+                                                    v0.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.2.6#readme" class="version-selector__version">
+                                                    v0.2.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.2.3#readme" class="version-selector__version">
+                                                    v0.2.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.2.2#readme" class="version-selector__version">
+                                                    v0.2.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.2.1#readme" class="version-selector__version">
+                                                    v0.2.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.2.0#readme" class="version-selector__version">
+                                                    v0.2.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.1.1#readme" class="version-selector__version">
+                                                    v0.1.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.1.0#readme" class="version-selector__version">
+                                                    v0.1.0
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/http">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../http/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../http/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/http:^0.8.6</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (202 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (145 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (44 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/legionth">
+                                    <img src="https://avatars0.githubusercontent.com/u/1578709?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/1578709?v=4&amp;s=80 2x" alt="legionth" title="legionth (43 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/igorw">
+                                    <img src="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=80 2x" alt="igorw" title="igorw (40 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cboden">
+                                    <img src="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=80 2x" alt="cboden" title="cboden (30 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/arnaud-lb">
+                                    <img src="https://avatars3.githubusercontent.com/u/365207?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/365207?v=4&amp;s=80 2x" alt="arnaud-lb" title="arnaud-lb (23 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/andig">
+                                    <img src="https://avatars1.githubusercontent.com/u/184815?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/184815?v=4&amp;s=80 2x" alt="andig" title="andig (8 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/onigoetz">
+                                    <img src="https://avatars0.githubusercontent.com/u/309594?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/309594?v=4&amp;s=80 2x" alt="onigoetz" title="onigoetz (6 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/seregazhuk">
+                                    <img src="https://avatars3.githubusercontent.com/u/9959761?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/9959761?v=4&amp;s=80 2x" alt="seregazhuk" title="seregazhuk (5 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/carusogabriel">
+                                    <img src="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=80 2x" alt="carusogabriel" title="carusogabriel (4 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/kalessil">
+                                    <img src="https://avatars2.githubusercontent.com/u/1577185?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/1577185?v=4&amp;s=80 2x" alt="kalessil" title="kalessil (4 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/nopolabs">
+                                    <img src="https://avatars2.githubusercontent.com/u/815864?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/815864?v=4&amp;s=80 2x" alt="nopolabs" title="nopolabs (3 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/slava-vishnyakov">
+                                    <img src="https://avatars0.githubusercontent.com/u/817931?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/817931?v=4&amp;s=80 2x" alt="slava-vishnyakov" title="slava-vishnyakov (3 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/aaronbonneau">
+                                    <img src="https://avatars0.githubusercontent.com/u/8574061?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/8574061?v=4&amp;s=80 2x" alt="aaronbonneau" title="aaronbonneau (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/iannsp">
+                                    <img src="https://avatars2.githubusercontent.com/u/40551?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/40551?v=4&amp;s=80 2x" alt="iannsp" title="iannsp (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/beaucollins">
+                                    <img src="https://avatars0.githubusercontent.com/u/19795?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/19795?v=4&amp;s=80 2x" alt="beaucollins" title="beaucollins (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/greevex">
+                                    <img src="https://avatars3.githubusercontent.com/u/148401?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/148401?v=4&amp;s=80 2x" alt="greevex" title="greevex (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/marenzo">
+                                    <img src="https://avatars3.githubusercontent.com/u/1208453?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/1208453?v=4&amp;s=80 2x" alt="marenzo" title="marenzo (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/PabloJoan">
+                                    <img src="https://avatars0.githubusercontent.com/u/9193314?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/9193314?v=4&amp;s=80 2x" alt="PabloJoan" title="PabloJoan (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/ojhaujjwal">
+                                    <img src="https://avatars3.githubusercontent.com/u/4995501?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/4995501?v=4&amp;s=80 2x" alt="ojhaujjwal" title="ojhaujjwal (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/e3betht">
+                                    <img src="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=80 2x" alt="e3betht" title="e3betht (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-http-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-http-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,1 6,1 12,6 18,1 24,1 30,1 36,1 42,1 48,1 54,1 60,2 66,1 72,1 78,1 84,1 90,1 96,1 102,2 108,1 114,1 120,1 126,3 132,1 138,1 144,1 150,1 156,4 162,2 168,1 174,1 180,1 186,1 192,3 198,1 204,1 210,1 216,1 222,1 228,1 234,1 240,1 246,1 252,1 258,1 264,1 270,1 276,1 282,1 288,1 294,1 300,1 306,1" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-http-participation-gradient);mask:url(#reactphp-http-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/http/index.html b/http/index.html
new file mode 100644
index 000000000..dbc6204ef
--- /dev/null
+++ b/http/index.html
@@ -0,0 +1,1803 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>HTTP: 
+Http - ReactPHP</title>
+
+        <meta name="description" content="Event-driven, streaming plaintext HTTP and secure HTTPS server for ReactPHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+            </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                                    <h1>HTTP</h1>
+
+                    
+<p><a href="https://travis-ci.org/reactphp/http" rel="nofollow"><img src="https://camo.githubusercontent.com/659589f9f68532b51e5460a93dde82ff4fec20de/68747470733a2f2f7472617669732d63692e6f72672f72656163747068702f687474702e7376673f6272616e63683d6d6173746572" alt="Build Status" data-canonical-src="https://travis-ci.org/reactphp/http.svg?branch=master" style="max-width:100%;"></a></p>
+<p>Event-driven, streaming plaintext HTTP and secure HTTPS server for <a href="https://reactphp.org/" rel="nofollow">ReactPHP</a>.</p>
+<p><strong>Table of Contents</strong></p>
+<ul>
+<li><a href="#quickstart-example">Quickstart example</a></li>
+<li>
+<a href="#usage">Usage</a>
+<ul>
+<li><a href="#server">Server</a></li>
+<li><a href="#streamingserver">StreamingServer</a></li>
+<li><a href="#listen">listen()</a></li>
+<li>
+<a href="#request">Request</a>
+<ul>
+<li><a href="#request-parameters">Request parameters</a></li>
+<li><a href="#query-parameters">Query parameters</a></li>
+<li><a href="#request-body">Request body</a></li>
+<li><a href="#streaming-request">Streaming request</a></li>
+<li><a href="#request-method">Request method</a></li>
+<li><a href="#cookie-parameters">Cookie parameters</a></li>
+<li><a href="#invalid-request">Invalid request</a></li>
+</ul>
+</li>
+<li>
+<a href="#response">Response</a>
+<ul>
+<li><a href="#deferred-response">Deferred response</a></li>
+<li><a href="#streaming-response">Streaming response</a></li>
+<li><a href="#response-length">Response length</a></li>
+<li><a href="#invalid-response">Invalid response</a></li>
+<li><a href="#default-response-headers">Default response headers</a></li>
+</ul>
+</li>
+<li>
+<a href="#middleware">Middleware</a>
+<ul>
+<li><a href="#limitconcurrentrequestsmiddleware">LimitConcurrentRequestsMiddleware</a></li>
+<li><a href="#requestbodybuffermiddleware">RequestBodyBufferMiddleware</a></li>
+<li><a href="#requestbodyparsermiddleware">RequestBodyParserMiddleware</a></li>
+<li><a href="#third-party-middleware">Third-Party Middleware</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li><a href="#install">Install</a></li>
+<li><a href="#tests">Tests</a></li>
+<li><a href="#license">License</a></li>
+</ul>
+<h2>
+<a id="quickstart-example" class="anchor" href="#quickstart-example" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Quickstart example</h2>
+<p>This is an HTTP server which responds with <code>Hello World!</code> to every request.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$loop</span> <span class="pl-k">=</span> <span class="pl-c1">React\EventLoop\</span><span class="pl-c1">Factory</span><span class="pl-k">::</span>create();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) {</span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(</span>
+<span class="pl-s1">        <span class="pl-c1">200</span>,</span>
+<span class="pl-s1">        <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">            <span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>text/plain<span class="pl-pds">'</span></span></span>
+<span class="pl-s1">        ),</span>
+<span class="pl-s1">        <span class="pl-s"><span class="pl-pds">"</span>Hello World!<span class="pl-cce">\n</span><span class="pl-pds">"</span></span></span>
+<span class="pl-s1">    );</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$socket</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Server</span>(<span class="pl-c1">8080</span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>listen(<span class="pl-smi">$socket</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>run();</span></pre></div>
+<p>See also the <a href="https://github.com/reactphp/http/blob/v0.8.6/examples">examples</a>.</p>
+<h2>
+<a id="usage" class="anchor" href="#usage" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Usage</h2>
+<h3>
+<a id="server" class="anchor" href="#server" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Server</h3>
+<p>The <code>Server</code> class is responsible for handling incoming connections and then
+processing each incoming HTTP request.</p>
+<p>It buffers and parses the complete incoming HTTP request in memory. Once the
+complete request has been received, it will invoke the request handler function.
+This request handler function needs to be passed to the constructor and will be
+invoked with the respective <a href="#request">request</a> object and expects a
+<a href="#response">response</a> object in return:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) {</span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(</span>
+<span class="pl-s1">        <span class="pl-c1">200</span>,</span>
+<span class="pl-s1">        <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">            <span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>text/plain<span class="pl-pds">'</span></span></span>
+<span class="pl-s1">        ),</span>
+<span class="pl-s1">        <span class="pl-s"><span class="pl-pds">"</span>Hello World!<span class="pl-cce">\n</span><span class="pl-pds">"</span></span></span>
+<span class="pl-s1">    );</span>
+<span class="pl-s1">});</span></pre></div>
+<p>Each incoming HTTP request message is always represented by the
+<a href="https://www.php-fig.org/psr/psr-7/#321-psrhttpmessageserverrequestinterface" rel="nofollow">PSR-7 <code>ServerRequestInterface</code></a>,
+see also following <a href="#request">request</a> chapter for more details.
+Each outgoing HTTP response message is always represented by the
+<a href="https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface" rel="nofollow">PSR-7 <code>ResponseInterface</code></a>,
+see also following <a href="#response">response</a> chapter for more details.</p>
+<p>In order to process any connections, the server needs to be attached to an
+instance of <code>React\Socket\ServerInterface</code> through the <a href="#listen"><code>listen()</code></a> method
+as described in the following chapter. In its most simple form, you can attach
+this to a <a href="../socket/#server"><code>React\Socket\Server</code></a>
+in order to start a plaintext HTTP server like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-smi">$handler</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$socket</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Server</span>(<span class="pl-s"><span class="pl-pds">'</span>0.0.0.0:8080<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>listen(<span class="pl-smi">$socket</span>);</span></pre></div>
+<p>See also the <a href="#listen"><code>listen()</code></a> method and the <a href="https://github.com/reactphp/http/blob/v0.8.6/examples">first example</a> for more details.</p>
+<p>The <code>Server</code> class is built as a facade around the underlying
+<a href="#streamingserver"><code>StreamingServer</code></a> to provide sane defaults for 80% of the
+use cases and is the recommended way to use this library unless you're sure
+you know what you're doing.</p>
+<p>Unlike the underlying <a href="#streamingserver"><code>StreamingServer</code></a>, this class
+buffers and parses the complete incoming HTTP request in memory. Once the
+complete request has been received, it will invoke the request handler
+function. This means the <a href="#request">request</a> passed to your request handler
+function will be fully compatible with PSR-7.</p>
+<p>On the other hand, buffering complete HTTP requests in memory until they can
+be processed by your request handler function means that this class has to
+employ a number of limits to avoid consuming too much memory. In order to
+take the more advanced configuration out your hand, it respects setting from
+your <a href="https://www.php.net/manual/en/ini.core.php" rel="nofollow"><code>php.ini</code></a> to apply its
+default settings. This is a list of PHP settings this class respects with
+their respective default values:</p>
+<pre><code>memory_limit 128M
+post_max_size 8M
+enable_post_data_reading 1
+max_input_nesting_level 64
+max_input_vars 1000
+
+file_uploads 1
+upload_max_filesize 2M
+max_file_uploads 20
+</code></pre>
+<p>In particular, the <code>post_max_size</code> setting limits how much memory a single HTTP
+request is allowed to consume while buffering its request body. On top of
+this, this class will try to avoid consuming more than 1/4 of your
+<code>memory_limit</code> for buffering multiple concurrent HTTP requests. As such, with
+the above default settings of <code>128M</code> max, it will try to consume no more than
+<code>32M</code> for buffering multiple concurrent HTTP requests. As a consequence, it
+will limit the concurrency to 4 HTTP requests with the above defaults.</p>
+<p>It is imperative that you assign reasonable values to your PHP ini settings.
+It is usually recommended to either reduce the memory a single request is
+allowed to take (set <code>post_max_size 1M</code> or less) or to increase the total memory
+limit to allow for more concurrent requests (set <code>memory_limit 512M</code> or more).
+Failure to do so means that this class may have to disable concurrency and
+only handle one request at a time.</p>
+<p>Internally, this class automatically assigns these limits to the
+<a href="#middleware">middleware</a> request handlers as described below. For more
+advanced use cases, you may also use the advanced
+<a href="#streamingserver"><code>StreamingServer</code></a> and assign these middleware request
+handlers yourself as described in the following chapters.</p>
+<h3>
+<a id="streamingserver" class="anchor" href="#streamingserver" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>StreamingServer</h3>
+<p>The advanced <code>StreamingServer</code> class is responsible for handling incoming connections and then
+processing each incoming HTTP request.</p>
+<p>Unlike the <a href="#server"><code>Server</code></a> class, it does not buffer and parse the incoming
+HTTP request body by default. This means that the request handler will be
+invoked with a streaming request body. Once the request headers have been
+received, it will invoke the request handler function. This request handler
+function needs to be passed to the constructor and will be invoked with the
+respective <a href="#request">request</a> object and expects a <a href="#response">response</a>
+object in return:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">StreamingServer</span>(<span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) {</span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(</span>
+<span class="pl-s1">        <span class="pl-c1">200</span>,</span>
+<span class="pl-s1">        <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">            <span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>text/plain<span class="pl-pds">'</span></span></span>
+<span class="pl-s1">        ),</span>
+<span class="pl-s1">        <span class="pl-s"><span class="pl-pds">"</span>Hello World!<span class="pl-cce">\n</span><span class="pl-pds">"</span></span></span>
+<span class="pl-s1">    );</span>
+<span class="pl-s1">});</span></pre></div>
+<p>Each incoming HTTP request message is always represented by the
+<a href="https://www.php-fig.org/psr/psr-7/#321-psrhttpmessageserverrequestinterface" rel="nofollow">PSR-7 <code>ServerRequestInterface</code></a>,
+see also following <a href="#request">request</a> chapter for more details.
+Each outgoing HTTP response message is always represented by the
+<a href="https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface" rel="nofollow">PSR-7 <code>ResponseInterface</code></a>,
+see also following <a href="#response">response</a> chapter for more details.</p>
+<p>In order to process any connections, the server needs to be attached to an
+instance of <code>React\Socket\ServerInterface</code> through the <a href="#listen"><code>listen()</code></a> method
+as described in the following chapter. In its most simple form, you can attach
+this to a <a href="../socket/#server"><code>React\Socket\Server</code></a>
+in order to start a plaintext HTTP server like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">StreamingServer</span>(<span class="pl-smi">$handler</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$socket</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Server</span>(<span class="pl-s"><span class="pl-pds">'</span>0.0.0.0:8080<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>listen(<span class="pl-smi">$socket</span>);</span></pre></div>
+<p>See also the <a href="#listen"><code>listen()</code></a> method and the <a href="https://github.com/reactphp/http/blob/v0.8.6/examples">first example</a> for more details.</p>
+<p>The <code>StreamingServer</code> class is considered advanced usage and unless you know
+what you're doing, you're recommended to use the <a href="#server"><code>Server</code></a> class
+instead. The <code>StreamingServer</code> class is specifically designed to help with
+more advanced use cases where you want to have full control over consuming
+the incoming HTTP request body and concurrency settings.</p>
+<p>In particular, this class does not buffer and parse the incoming HTTP request
+in memory. It will invoke the request handler function once the HTTP request
+headers have been received, i.e. before receiving the potentially much larger
+HTTP request body. This means the <a href="#request">request</a> passed to your request
+handler function may not be fully compatible with PSR-7. See also
+<a href="#streaming-request">streaming request</a> below for more details.</p>
+<h3>
+<a id="listen" class="anchor" href="#listen" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>listen()</h3>
+<p>The <code>listen(React\Socket\ServerInterface $socket): void</code> method can be used to
+start processing connections from the given socket server.
+The given <a href="../socket/#serverinterface"><code>React\Socket\ServerInterface</code></a>
+is responsible for emitting the underlying streaming connections.
+This HTTP server needs to be attached to it in order to process any connections
+and pase incoming streaming data as incoming HTTP request messages.
+In its most common form, you can attach this to a
+<a href="../socket/#server"><code>React\Socket\Server</code></a>
+in order to start a plaintext HTTP server like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-smi">$handler</span>);</span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> or</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">StreamingServer</span>(<span class="pl-smi">$handler</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$socket</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Server</span>(<span class="pl-s"><span class="pl-pds">'</span>0.0.0.0:8080<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>listen(<span class="pl-smi">$socket</span>);</span></pre></div>
+<p>This example will start listening for HTTP requests on the alternative HTTP port
+<code>8080</code> on all interfaces (publicly). As an alternative, it is very common to use
+a reverse proxy and let this HTTP server listen on the localhost (loopback)
+interface only by using the listen address <code>127.0.0.1:8080</code> instead. This way, you
+host your application(s) on the default HTTP port <code>80</code> and only route specific
+requests to this HTTP server.</p>
+<p>Likewise, it's usually recommended to use a reverse proxy setup to accept
+secure HTTPS requests on default HTTPS port <code>443</code> (TLS termination) and only
+route plaintext requests to this HTTP server. As an alternative, you can also
+accept secure HTTPS requests with this HTTP server by attaching this to a
+<a href="../socket/#server"><code>React\Socket\Server</code></a> using a
+secure TLS listen address, a certificate file and optional <code>passphrase</code> like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-smi">$handler</span>);</span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> or</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">StreamingServer</span>(<span class="pl-smi">$handler</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$socket</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Server</span>(<span class="pl-s"><span class="pl-pds">'</span>tls://0.0.0.0:8443<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>, <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>local_cert<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">__DIR__</span> <span class="pl-k">.</span> <span class="pl-s"><span class="pl-pds">'</span>/localhost.pem<span class="pl-pds">'</span></span></span>
+<span class="pl-s1">));</span>
+<span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>listen(<span class="pl-smi">$socket</span>);</span></pre></div>
+<p>See also <a href="https://github.com/reactphp/http/blob/v0.8.6/examples">example #11</a> for more details.</p>
+<h3>
+<a id="request" class="anchor" href="#request" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Request</h3>
+<p>As seen above, the <a href="#server"><code>Server</code></a> and <a href="#streamingserver"><code>StreamingServer</code></a>
+classes are responsible for handling incoming connections and then processing
+each incoming HTTP request.</p>
+<p>The request object will be processed once the request has
+been received by the client.
+This request object implements the
+<a href="https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-7-http-message.md#321-psrhttpmessageserverrequestinterface">PSR-7 ServerRequestInterface</a>
+which in turn extends the
+<a href="https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-7-http-message.md#32-psrhttpmessagerequestinterface">PSR-7 RequestInterface</a>
+and will be passed to the callback function like this.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) {</span>
+<span class="pl-s1">   <span class="pl-smi">$body</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>The method of the request is: <span class="pl-pds">"</span></span> <span class="pl-k">.</span> <span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>getMethod();</span>
+<span class="pl-s1">   <span class="pl-smi">$body</span> <span class="pl-k">.=</span> <span class="pl-s"><span class="pl-pds">"</span>The requested path is: <span class="pl-pds">"</span></span> <span class="pl-k">.</span> <span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>getUri()<span class="pl-k">-&gt;</span>getPath();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">   <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(</span>
+<span class="pl-s1">       <span class="pl-c1">200</span>,</span>
+<span class="pl-s1">       <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">           <span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>text/plain<span class="pl-pds">'</span></span></span>
+<span class="pl-s1">       ),</span>
+<span class="pl-s1">       <span class="pl-smi">$body</span></span>
+<span class="pl-s1">   );</span>
+<span class="pl-s1">});</span></pre></div>
+<p>For more details about the request object, also check out the documentation of
+<a href="https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-7-http-message.md#321-psrhttpmessageserverrequestinterface">PSR-7 ServerRequestInterface</a>
+and
+<a href="https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-7-http-message.md#32-psrhttpmessagerequestinterface">PSR-7 RequestInterface</a>.</p>
+<h4>
+<a id="request-parameters" class="anchor" href="#request-parameters" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Request parameters</h4>
+<p>The <code>getServerParams(): mixed[]</code> method can be used to
+get server-side parameters similar to the <code>$_SERVER</code> variable.
+The following parameters are currently available:</p>
+<ul>
+<li>
+<code>REMOTE_ADDR</code>
+The IP address of the request sender</li>
+<li>
+<code>REMOTE_PORT</code>
+Port of the request sender</li>
+<li>
+<code>SERVER_ADDR</code>
+The IP address of the server</li>
+<li>
+<code>SERVER_PORT</code>
+The port of the server</li>
+<li>
+<code>REQUEST_TIME</code>
+Unix timestamp when the complete request header has been received,
+as integer similar to <code>time()</code>
+</li>
+<li>
+<code>REQUEST_TIME_FLOAT</code>
+Unix timestamp when the complete request header has been received,
+as float similar to <code>microtime(true)</code>
+</li>
+<li>
+<code>HTTPS</code>
+Set to 'on' if the request used HTTPS, otherwise it won't be set</li>
+</ul>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$body</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>Your IP is: <span class="pl-pds">"</span></span> <span class="pl-k">.</span> <span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>getServerParams()[<span class="pl-s"><span class="pl-pds">'</span>REMOTE_ADDR<span class="pl-pds">'</span></span>];</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(</span>
+<span class="pl-s1">        <span class="pl-c1">200</span>,</span>
+<span class="pl-s1">        <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">            <span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>text/plain<span class="pl-pds">'</span></span></span>
+<span class="pl-s1">        ),</span>
+<span class="pl-s1">        <span class="pl-smi">$body</span></span>
+<span class="pl-s1">    );</span>
+<span class="pl-s1">});</span></pre></div>
+<p>See also <a href="https://github.com/reactphp/http/blob/v0.8.6/examples">example #3</a>.</p>
+<blockquote>
+<p>Advanced: Note that address parameters will not be set if you're listening on
+a Unix domain socket (UDS) path as this protocol lacks the concept of
+host/port.</p>
+</blockquote>
+<h4>
+<a id="query-parameters" class="anchor" href="#query-parameters" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Query parameters</h4>
+<p>The <code>getQueryParams(): array</code> method can be used to get the query parameters
+similiar to the <code>$_GET</code> variable.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$queryParams</span> <span class="pl-k">=</span> <span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>getQueryParams();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-smi">$body</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>The query parameter "foo" is not set. Click the following link <span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1">    <span class="pl-smi">$body</span> <span class="pl-k">.=</span> <span class="pl-s"><span class="pl-pds">'</span>&lt;a href="/?foo=bar"&gt;to use query parameter in your request&lt;/a&gt;<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-k">if</span> (<span class="pl-c1">isset</span>(<span class="pl-smi">$queryParams</span>[<span class="pl-s"><span class="pl-pds">'</span>foo<span class="pl-pds">'</span></span>])) {</span>
+<span class="pl-s1">        <span class="pl-smi">$body</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>The value of "foo" is: <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-c1">htmlspecialchars</span>(<span class="pl-smi">$queryParams</span>[<span class="pl-s"><span class="pl-pds">'</span>foo<span class="pl-pds">'</span></span>]);</span>
+<span class="pl-s1">    }</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(</span>
+<span class="pl-s1">        <span class="pl-c1">200</span>,</span>
+<span class="pl-s1">        <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">            <span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>text/html<span class="pl-pds">'</span></span></span>
+<span class="pl-s1">        ),</span>
+<span class="pl-s1">        <span class="pl-smi">$body</span></span>
+<span class="pl-s1">    );</span>
+<span class="pl-s1">});</span></pre></div>
+<p>The response in the above example will return a response body with a link.
+The URL contains the query parameter <code>foo</code> with the value <code>bar</code>.
+Use <a href="https://www.php.net/manual/en/function.htmlentities.php" rel="nofollow"><code>htmlentities</code></a>
+like in this example to prevent
+<a href="https://en.wikipedia.org/wiki/Cross-site_scripting" rel="nofollow">Cross-Site Scripting (abbreviated as XSS)</a>.</p>
+<p>See also <a href="https://github.com/reactphp/http/blob/v0.8.6/examples">example #4</a>.</p>
+<h4>
+<a id="request-body" class="anchor" href="#request-body" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Request body</h4>
+<p>If you're using the <a href="#server"><code>Server</code></a>, then the request object will be
+buffered and parsed in memory and contains the full request body.
+This includes the parsed request body and any file uploads.</p>
+<blockquote>
+<p>If you're using the advanced <a href="#streamingserver"><code>StreamingServer</code></a> class, jump
+to the next chapter to learn more about how to process a
+<a href="#streaming-request">streaming request</a>.</p>
+</blockquote>
+<p>As stated above, each incoming HTTP request is always represented by the
+<a href="https://www.php-fig.org/psr/psr-7/#321-psrhttpmessageserverrequestinterface" rel="nofollow">PSR-7 <code>ServerRequestInterface</code></a>.
+This interface provides several methods that are useful when working with the
+incoming request body as described below.</p>
+<p>The <code>getParsedBody(): null|array|object</code> method can be used to
+get the parsed request body, similar to
+<a href="https://www.php.net/manual/en/reserved.variables.post.php" rel="nofollow">PHP's <code>$_POST</code> variable</a>.
+This method may return a (possibly nested) array structure with all body
+parameters or a <code>null</code> value if the request body could not be parsed.
+By default, this method will only return parsed data for requests using
+<code>Content-Type: application/x-www-form-urlencoded</code> or <code>Content-Type: multipart/form-data</code>
+request headers (commonly used for <code>POST</code> requests for HTML form submission data).</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$name</span> <span class="pl-k">=</span> <span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>getParsedBody()[<span class="pl-s"><span class="pl-pds">'</span>name<span class="pl-pds">'</span></span>] ?? <span class="pl-s"><span class="pl-pds">'</span>anonymous<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(</span>
+<span class="pl-s1">        <span class="pl-c1">200</span>,</span>
+<span class="pl-s1">        <span class="pl-c1">array</span>(),</span>
+<span class="pl-s1">        <span class="pl-s"><span class="pl-pds">"</span>Hello <span class="pl-smi">$name</span>!<span class="pl-cce">\n</span><span class="pl-pds">"</span></span></span>
+<span class="pl-s1">    );</span>
+<span class="pl-s1">});</span></pre></div>
+<p>See also <a href="https://github.com/reactphp/http/blob/v0.8.6/examples">example #12</a> for more details.</p>
+<p>The <code>getBody(): StreamInterface</code> method can be used to
+get the raw data from this request body, similar to
+<a href="https://www.php.net/manual/en/wrappers.php.php#wrappers.php.input" rel="nofollow">PHP's <code>php://input</code> stream</a>.
+This method returns an instance of the request body represented by the
+<a href="https://www.php-fig.org/psr/psr-7/#34-psrhttpmessagestreaminterface" rel="nofollow">PSR-7 <code>StreamInterface</code></a>.
+This is particularly useful when using a custom request body that will not
+otherwise be parsed by default, such as a JSON (<code>Content-Type: application/json</code>) or
+an XML (<code>Content-Type: application/xml</code>) request body (which is commonly used for
+<code>POST</code>, <code>PUT</code> or <code>PATCH</code> requests in JSON-based or RESTful/RESTish APIs).</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$data</span> <span class="pl-k">=</span> <span class="pl-c1">json_decode</span>((<span class="pl-k">string</span>)<span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>getBody());</span>
+<span class="pl-s1">    <span class="pl-smi">$name</span> <span class="pl-k">=</span> <span class="pl-smi">$data</span><span class="pl-k">-&gt;</span><span class="pl-smi">name</span> ?? <span class="pl-s"><span class="pl-pds">'</span>anonymous<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(</span>
+<span class="pl-s1">        <span class="pl-c1">200</span>,</span>
+<span class="pl-s1">        <span class="pl-c1">array</span>(<span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>application/json<span class="pl-pds">'</span></span>),</span>
+<span class="pl-s1">        <span class="pl-c1">json_encode</span>([<span class="pl-s"><span class="pl-pds">'</span>message<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">"</span>Hello <span class="pl-smi">$name</span>!<span class="pl-pds">"</span></span>])</span>
+<span class="pl-s1">    );</span>
+<span class="pl-s1">});</span></pre></div>
+<p>See also <a href="https://github.com/reactphp/http/blob/v0.8.6/examples">example #9</a> for more details.</p>
+<p>The <code>getUploadedFiles(): array</code> method can be used to
+get the uploaded files in this request, similar to
+<a href="https://www.php.net/manual/en/reserved.variables.files.php" rel="nofollow">PHP's <code>$_FILES</code> variable</a>.
+This method returns a (possibly nested) array structure with all file uploads, each represented by the
+<a href="https://www.php-fig.org/psr/psr-7/#36-psrhttpmessageuploadedfileinterface" rel="nofollow">PSR-7 <code>UploadedFileInterface</code></a>.
+This array will only be filled when using the <code>Content-Type: multipart/form-data</code>
+request header (commonly used for <code>POST</code> requests for HTML file uploads).</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$files</span> <span class="pl-k">=</span> <span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>getUploadedFiles();</span>
+<span class="pl-s1">    <span class="pl-smi">$name</span> <span class="pl-k">=</span> <span class="pl-c1">isset</span>(<span class="pl-smi">$files</span>[<span class="pl-s"><span class="pl-pds">'</span>avatar<span class="pl-pds">'</span></span>]) ? <span class="pl-smi">$files</span>[<span class="pl-s"><span class="pl-pds">'</span>avatar<span class="pl-pds">'</span></span>]<span class="pl-k">-&gt;</span>getClientFilename() : <span class="pl-s"><span class="pl-pds">'</span>nothing<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(</span>
+<span class="pl-s1">        <span class="pl-c1">200</span>,</span>
+<span class="pl-s1">        <span class="pl-c1">array</span>(),</span>
+<span class="pl-s1">        <span class="pl-s"><span class="pl-pds">"</span>Uploaded <span class="pl-smi">$name</span><span class="pl-cce">\n</span><span class="pl-pds">"</span></span></span>
+<span class="pl-s1">    );</span>
+<span class="pl-s1">});</span></pre></div>
+<p>See also <a href="https://github.com/reactphp/http/blob/v0.8.6/examples">example #12</a> for more details.</p>
+<p>The <code>getSize(): ?int</code> method can be used to
+get the size of the request body, similar to PHP's <code>$_SERVER['CONTENT_LENGTH']</code> variable.
+This method returns the complete size of the request body measured in number
+of bytes as defined by the message boundaries.
+This value may be <code>0</code> if the request message does not contain a request body
+(such as a simple <code>GET</code> request).
+This method operates on the buffered request body, i.e. the request body size
+is always known, even when the request does not specify a <code>Content-Length</code> request
+header or when using <code>Transfer-Encoding: chunked</code> for HTTP/1.1 requests.</p>
+<blockquote>
+<p>Note: The <code>Server</code> automatically takes care of handling requests with the
+additional <code>Expect: 100-continue</code> request header. When HTTP/1.1 clients want to
+send a bigger request body, they MAY send only the request headers with an
+additional <code>Expect: 100-continue</code> request header and wait before sending the actual
+(large) message body. In this case the server will automatically send an
+intermediary <code>HTTP/1.1 100 Continue</code> response to the client. This ensures you
+will receive the request body without a delay as expected.</p>
+</blockquote>
+<h4>
+<a id="streaming-request" class="anchor" href="#streaming-request" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Streaming request</h4>
+<p>If you're using the advanced <a href="#streamingserver"><code>StreamingServer</code></a>, the
+request object will be processed once the request headers have been received.
+This means that this happens irrespective of (i.e. <em>before</em>) receiving the
+(potentially much larger) request body.</p>
+<blockquote>
+<p>If you're using the <a href="#server"><code>Server</code></a> class, jump to the previous chapter
+to learn more about how to process a buffered <a href="#request-body">request body</a>.</p>
+</blockquote>
+<p>While this may be uncommon in the PHP ecosystem, this is actually a very powerful
+approach that gives you several advantages not otherwise possible:</p>
+<ul>
+<li>React to requests <em>before</em> receiving a large request body,
+such as rejecting an unauthenticated request or one that exceeds allowed
+message lengths (file uploads).</li>
+<li>Start processing parts of the request body before the remainder of the request
+body arrives or if the sender is slowly streaming data.</li>
+<li>Process a large request body without having to buffer anything in memory,
+such as accepting a huge file upload or possibly unlimited request body stream.</li>
+</ul>
+<p>The <code>getBody(): StreamInterface</code> method can be used to
+access the request body stream.
+In the streaming mode, this method returns a stream instance that implements both the
+<a href="https://www.php-fig.org/psr/psr-7/#34-psrhttpmessagestreaminterface" rel="nofollow">PSR-7 <code>StreamInterface</code></a>
+and the <a href="../stream/#readablestreaminterface">ReactPHP <code>ReadableStreamInterface</code></a>.
+However, most of the PSR-7 <code>StreamInterface</code> methods have been
+designed under the assumption of being in control of a synchronous request body.
+Given that this does not apply to this server, the following
+PSR-7 <code>StreamInterface</code> methods are not used and SHOULD NOT be called:
+<code>tell()</code>, <code>eof()</code>, <code>seek()</code>, <code>rewind()</code>, <code>write()</code> and <code>read()</code>.
+If this is an issue for your use case and/or you want to access uploaded files,
+it's highly recommended to use a buffered <a href="#request-body">request body</a> or use the
+<a href="#requestbodybuffermiddleware"><code>RequestBodyBufferMiddleware</code></a> instead.
+The ReactPHP <code>ReadableStreamInterface</code> gives you access to the incoming
+request body as the individual chunks arrive:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">StreamingServer</span>(<span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) {</span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Promise</span>(<span class="pl-k">function</span> (<span class="pl-smi">$resolve</span>, <span class="pl-smi">$reject</span>) <span class="pl-k">use</span> (<span class="pl-smi">$request</span>) {</span>
+<span class="pl-s1">        <span class="pl-smi">$contentLength</span> <span class="pl-k">=</span> <span class="pl-c1">0</span>;</span>
+<span class="pl-s1">        <span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>getBody()<span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>data<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-smi">$data</span>) <span class="pl-k">use</span> (<span class="pl-k">&amp;</span><span class="pl-smi">$contentLength</span>) {</span>
+<span class="pl-s1">            <span class="pl-smi">$contentLength</span> <span class="pl-k">+</span><span class="pl-k">=</span> <span class="pl-c1">strlen</span>(<span class="pl-smi">$data</span>);</span>
+<span class="pl-s1">        });</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">        <span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>getBody()<span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>end<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> () <span class="pl-k">use</span> (<span class="pl-smi">$resolve</span>, <span class="pl-k">&amp;</span><span class="pl-smi">$contentLength</span>){</span>
+<span class="pl-s1">            <span class="pl-smi">$response</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(</span>
+<span class="pl-s1">                <span class="pl-c1">200</span>,</span>
+<span class="pl-s1">                <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">                    <span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>text/plain<span class="pl-pds">'</span></span></span>
+<span class="pl-s1">                ),</span>
+<span class="pl-s1">                <span class="pl-s"><span class="pl-pds">"</span>The length of the submitted request body is: <span class="pl-pds">"</span></span> <span class="pl-k">.</span> <span class="pl-smi">$contentLength</span></span>
+<span class="pl-s1">            );</span>
+<span class="pl-s1">            $<span class="pl-smi">resolve</span>(<span class="pl-smi">$response</span>);</span>
+<span class="pl-s1">        });</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">        <span class="pl-c"><span class="pl-c">//</span> an error occures e.g. on invalid chunked encoded data or an unexpected 'end' event</span></span>
+<span class="pl-s1">        <span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>getBody()<span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>error<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-c1">\Exception</span> <span class="pl-smi">$exception</span>) <span class="pl-k">use</span> (<span class="pl-smi">$resolve</span>, <span class="pl-k">&amp;</span><span class="pl-smi">$contentLength</span>) {</span>
+<span class="pl-s1">            <span class="pl-smi">$response</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(</span>
+<span class="pl-s1">                <span class="pl-c1">400</span>,</span>
+<span class="pl-s1">                <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">                    <span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>text/plain<span class="pl-pds">'</span></span></span>
+<span class="pl-s1">                ),</span>
+<span class="pl-s1">                <span class="pl-s"><span class="pl-pds">"</span>An error occured while reading at length: <span class="pl-pds">"</span></span> <span class="pl-k">.</span> <span class="pl-smi">$contentLength</span></span>
+<span class="pl-s1">            );</span>
+<span class="pl-s1">            $<span class="pl-smi">resolve</span>(<span class="pl-smi">$response</span>);</span>
+<span class="pl-s1">        });</span>
+<span class="pl-s1">    });</span>
+<span class="pl-s1">});</span></pre></div>
+<p>The above example simply counts the number of bytes received in the request body.
+This can be used as a skeleton for buffering or processing the request body.</p>
+<p>See also <a href="https://github.com/reactphp/http/blob/v0.8.6/examples">example #13</a> for more details.</p>
+<p>The <code>data</code> event will be emitted whenever new data is available on the request
+body stream.
+The server also automatically takes care of decoding any incoming requests using
+<code>Transfer-Encoding: chunked</code> and will only emit the actual payload as data.</p>
+<p>The <code>end</code> event will be emitted when the request body stream terminates
+successfully, i.e. it was read until its expected end.</p>
+<p>The <code>error</code> event will be emitted in case the request stream contains invalid
+data for <code>Transfer-Encoding: chunked</code> or when the connection closes before
+the complete request stream has been received.
+The server will automatically stop reading from the connection and discard all
+incoming data instead of closing it.
+A response message can still be sent (unless the connection is already closed).</p>
+<p>A <code>close</code> event will be emitted after an <code>error</code> or <code>end</code> event.</p>
+<p>For more details about the request body stream, check out the documentation of
+<a href="../stream/#readablestreaminterface">ReactPHP ReadableStreamInterface</a>.</p>
+<p>The <code>getSize(): ?int</code> method can be used to
+get the size of the request body, similar to PHP's <code>$_SERVER['CONTENT_LENGTH']</code> variable.
+This method returns the complete size of the request body measured in number
+of bytes as defined by the message boundaries.
+This value may be <code>0</code> if the request message does not contain a request body
+(such as a simple <code>GET</code> request).
+This method operates on the streaming request body, i.e. the request body size
+may be unknown (<code>null</code>) when using <code>Transfer-Encoding: chunked</code> for HTTP/1.1 requests.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">StreamingServer</span>(<span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$size</span> <span class="pl-k">=</span> <span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>getBody()<span class="pl-k">-&gt;</span>getSize();</span>
+<span class="pl-s1">    <span class="pl-k">if</span> (<span class="pl-smi">$size</span> <span class="pl-k">===</span> <span class="pl-c1">null</span>) {</span>
+<span class="pl-s1">        <span class="pl-smi">$body</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>The request does not contain an explicit length.<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1">        <span class="pl-smi">$body</span> <span class="pl-k">.=</span> <span class="pl-s"><span class="pl-pds">'</span>This example does not accept chunked transfer encoding.<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">        <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(</span>
+<span class="pl-s1">            <span class="pl-c1">411</span>,</span>
+<span class="pl-s1">            <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">                <span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>text/plain<span class="pl-pds">'</span></span></span>
+<span class="pl-s1">            ),</span>
+<span class="pl-s1">            <span class="pl-smi">$body</span></span>
+<span class="pl-s1">        );</span>
+<span class="pl-s1">    }</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(</span>
+<span class="pl-s1">        <span class="pl-c1">200</span>,</span>
+<span class="pl-s1">        <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">            <span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>text/plain<span class="pl-pds">'</span></span></span>
+<span class="pl-s1">        ),</span>
+<span class="pl-s1">        <span class="pl-s"><span class="pl-pds">"</span>Request body size: <span class="pl-pds">"</span></span> <span class="pl-k">.</span> <span class="pl-smi">$size</span> <span class="pl-k">.</span> <span class="pl-s"><span class="pl-pds">"</span> bytes<span class="pl-cce">\n</span><span class="pl-pds">"</span></span></span>
+<span class="pl-s1">    );</span>
+<span class="pl-s1">});</span></pre></div>
+<blockquote>
+<p>Note: The <code>StreamingServer</code> automatically takes care of handling requests with the
+additional <code>Expect: 100-continue</code> request header. When HTTP/1.1 clients want to
+send a bigger request body, they MAY send only the request headers with an
+additional <code>Expect: 100-continue</code> request header and wait before sending the actual
+(large) message body. In this case the server will automatically send an
+intermediary <code>HTTP/1.1 100 Continue</code> response to the client. This ensures you
+will receive the streaming request body without a delay as expected.</p>
+</blockquote>
+<h4>
+<a id="request-method" class="anchor" href="#request-method" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Request method</h4>
+<p>Note that the server supports <em>any</em> request method (including custom and non-
+standard ones) and all request-target formats defined in the HTTP specs for each
+respective method, including <em>normal</em> <code>origin-form</code> requests as well as
+proxy requests in <code>absolute-form</code> and <code>authority-form</code>.
+The <code>getUri(): UriInterface</code> method can be used to get the effective request
+URI which provides you access to individiual URI components.
+Note that (depending on the given <code>request-target</code>) certain URI components may
+or may not be present, for example the <code>getPath(): string</code> method will return
+an empty string for requests in <code>asterisk-form</code> or <code>authority-form</code>.
+Its <code>getHost(): string</code> method will return the host as determined by the
+effective request URI, which defaults to the local socket address if a HTTP/1.0
+client did not specify one (i.e. no <code>Host</code> header).
+Its <code>getScheme(): string</code> method will return <code>http</code> or <code>https</code> depending
+on whether the request was made over a secure TLS connection to the target host.</p>
+<p>The <code>Host</code> header value will be sanitized to match this host component plus the
+port component only if it is non-standard for this URI scheme.</p>
+<p>You can use <code>getMethod(): string</code> and <code>getRequestTarget(): string</code> to
+check this is an accepted request and may want to reject other requests with
+an appropriate error code, such as <code>400</code> (Bad Request) or <code>405</code> (Method Not
+Allowed).</p>
+<blockquote>
+<p>The <code>CONNECT</code> method is useful in a tunneling setup (HTTPS proxy) and not
+something most HTTP servers would want to care about.
+Note that if you want to handle this method, the client MAY send a different
+request-target than the <code>Host</code> header value (such as removing default ports)
+and the request-target MUST take precendence when forwarding.</p>
+</blockquote>
+<h4>
+<a id="cookie-parameters" class="anchor" href="#cookie-parameters" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Cookie parameters</h4>
+<p>The <code>getCookieParams(): string[]</code> method can be used to
+get all cookies sent with the current request.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$key</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>react\php<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-k">if</span> (<span class="pl-c1">isset</span>(<span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>getCookieParams()[<span class="pl-smi">$key</span>])) {</span>
+<span class="pl-s1">        <span class="pl-smi">$body</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>Your cookie value is: <span class="pl-pds">"</span></span> <span class="pl-k">.</span> <span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>getCookieParams()[<span class="pl-smi">$key</span>];</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">        <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(</span>
+<span class="pl-s1">            <span class="pl-c1">200</span>,</span>
+<span class="pl-s1">            <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">                <span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>text/plain<span class="pl-pds">'</span></span></span>
+<span class="pl-s1">            ),</span>
+<span class="pl-s1">            <span class="pl-smi">$body</span></span>
+<span class="pl-s1">        );</span>
+<span class="pl-s1">    }</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(</span>
+<span class="pl-s1">        <span class="pl-c1">200</span>,</span>
+<span class="pl-s1">        <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">            <span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>text/plain<span class="pl-pds">'</span></span>,</span>
+<span class="pl-s1">            <span class="pl-s"><span class="pl-pds">'</span>Set-Cookie<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">urlencode</span>(<span class="pl-smi">$key</span>) <span class="pl-k">.</span> <span class="pl-s"><span class="pl-pds">'</span>=<span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-c1">urlencode</span>(<span class="pl-s"><span class="pl-pds">'</span>test;more<span class="pl-pds">'</span></span>)</span>
+<span class="pl-s1">        ),</span>
+<span class="pl-s1">        <span class="pl-s"><span class="pl-pds">"</span>Your cookie has been set.<span class="pl-pds">"</span></span></span>
+<span class="pl-s1">    );</span>
+<span class="pl-s1">});</span></pre></div>
+<p>The above example will try to set a cookie on first access and
+will try to print the cookie value on all subsequent tries.
+Note how the example uses the <code>urlencode()</code> function to encode
+non-alphanumeric characters.
+This encoding is also used internally when decoding the name and value of cookies
+(which is in line with other implementations, such as PHP's cookie functions).</p>
+<p>See also <a href="https://github.com/reactphp/http/blob/v0.8.6/examples">example #5</a> for more details.</p>
+<h4>
+<a id="invalid-request" class="anchor" href="#invalid-request" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Invalid request</h4>
+<p>The <code>Server</code> and <code>StreamingServer</code> classes support both HTTP/1.1 and HTTP/1.0 request
+messages. If a client sends an invalid request message, uses an invalid HTTP
+protocol version or sends an invalid <code>Transfer-Encoding</code> request header value,
+the server will automatically send a <code>400</code> (Bad Request) HTTP error response
+to the client and close the connection.
+On top of this, it will emit an <code>error</code> event that can be used for logging
+purposes like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>error<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-c1">Exception</span> <span class="pl-smi">$e</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>Error: <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$e</span><span class="pl-k">-&gt;</span>getMessage() <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">});</span></pre></div>
+<p>Note that the server will also emit an <code>error</code> event if you do not return a
+valid response object from your request handler function. See also
+<a href="#invalid-response">invalid response</a> for more details.</p>
+<h3>
+<a id="response" class="anchor" href="#response" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Response</h3>
+<p>The callback function passed to the constructor of the <a href="#server"><code>Server</code></a> or
+advanced <a href="#server"><code>StreamingServer</code></a> is responsible for processing the request
+and returning a response, which will be delivered to the client.
+This function MUST return an instance implementing
+<a href="https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-7-http-message.md#33-psrhttpmessageresponseinterface">PSR-7 ResponseInterface</a>
+object or a
+<a href="../promise/#reactpromise">ReactPHP Promise</a>
+which will resolve a <code>PSR-7 ResponseInterface</code> object.</p>
+<p>You will find a <code>Response</code> class
+which implements the <code>PSR-7 ResponseInterface</code> in this project.
+We use instantiation of this class in our projects,
+but feel free to use any implemantation of the
+<code>PSR-7 ResponseInterface</code> you prefer.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) {</span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(</span>
+<span class="pl-s1">        <span class="pl-c1">200</span>,</span>
+<span class="pl-s1">        <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">            <span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>text/plain<span class="pl-pds">'</span></span></span>
+<span class="pl-s1">        ),</span>
+<span class="pl-s1">        <span class="pl-s"><span class="pl-pds">"</span>Hello World!<span class="pl-cce">\n</span><span class="pl-pds">"</span></span></span>
+<span class="pl-s1">    );</span>
+<span class="pl-s1">});</span></pre></div>
+<h4>
+<a id="deferred-response" class="anchor" href="#deferred-response" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Deferred response</h4>
+<p>The example above returns the response directly, because it needs
+no time to be processed.
+Using a database, the file system or long calculations
+(in fact every action that will take &gt;=1ms) to create your
+response, will slow down the server.
+To prevent this you SHOULD use a
+<a href="../promise/#reactpromise">ReactPHP Promise</a>.
+This example shows how such a long-term action could look like:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) <span class="pl-k">use</span> (<span class="pl-smi">$loop</span>) {</span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Promise</span>(<span class="pl-k">function</span> (<span class="pl-smi">$resolve</span>, <span class="pl-smi">$reject</span>) <span class="pl-k">use</span> (<span class="pl-smi">$loop</span>) {</span>
+<span class="pl-s1">        <span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addTimer(<span class="pl-c1">1.5</span>, <span class="pl-k">function</span>() <span class="pl-k">use</span> (<span class="pl-smi">$resolve</span>) {</span>
+<span class="pl-s1">            <span class="pl-smi">$response</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(</span>
+<span class="pl-s1">                <span class="pl-c1">200</span>,</span>
+<span class="pl-s1">                <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">                    <span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>text/plain<span class="pl-pds">'</span></span></span>
+<span class="pl-s1">                ),</span>
+<span class="pl-s1">                <span class="pl-s"><span class="pl-pds">"</span>Hello world<span class="pl-pds">"</span></span></span>
+<span class="pl-s1">            );</span>
+<span class="pl-s1">            $<span class="pl-smi">resolve</span>(<span class="pl-smi">$response</span>);</span>
+<span class="pl-s1">        });</span>
+<span class="pl-s1">    });</span>
+<span class="pl-s1">});</span></pre></div>
+<p>The above example will create a response after 1.5 second.
+This example shows that you need a promise,
+if your response needs time to created.
+The <code>ReactPHP Promise</code> will resolve in a <code>Response</code> object when the request
+body ends.
+If the client closes the connection while the promise is still pending, the
+promise will automatically be cancelled.
+The promise cancellation handler can be used to clean up any pending resources
+allocated in this case (if applicable).
+If a promise is resolved after the client closes, it will simply be ignored.</p>
+<h4>
+<a id="streaming-response" class="anchor" href="#streaming-response" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Streaming response</h4>
+<p>The <code>Response</code> class in this project supports to add an instance which implements the
+<a href="../stream/#readablestreaminterface">ReactPHP ReadableStreamInterface</a>
+for the response body.
+So you are able stream data directly into the response body.
+Note that other implementations of the <code>PSR-7 ResponseInterface</code> likely
+only support strings.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) <span class="pl-k">use</span> (<span class="pl-smi">$loop</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">ThroughStream</span>();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-smi">$timer</span> <span class="pl-k">=</span> <span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addPeriodicTimer(<span class="pl-c1">0.5</span>, <span class="pl-k">function</span> () <span class="pl-k">use</span> (<span class="pl-smi">$stream</span>) {</span>
+<span class="pl-s1">        <span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>write(<span class="pl-c1">microtime</span>(<span class="pl-c1">true</span>) <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>);</span>
+<span class="pl-s1">    });</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addTimer(<span class="pl-c1">5</span>, <span class="pl-k">function</span>() <span class="pl-k">use</span> (<span class="pl-smi">$loop</span>, <span class="pl-smi">$timer</span>, <span class="pl-smi">$stream</span>) {</span>
+<span class="pl-s1">        <span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>cancelTimer(<span class="pl-smi">$timer</span>);</span>
+<span class="pl-s1">        <span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>end();</span>
+<span class="pl-s1">    });</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(</span>
+<span class="pl-s1">        <span class="pl-c1">200</span>,</span>
+<span class="pl-s1">        <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">            <span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>text/plain<span class="pl-pds">'</span></span></span>
+<span class="pl-s1">        ),</span>
+<span class="pl-s1">        <span class="pl-smi">$stream</span></span>
+<span class="pl-s1">    );</span>
+<span class="pl-s1">});</span></pre></div>
+<p>The above example will emit every 0.5 seconds the current Unix timestamp
+with microseconds as float to the client and will end after 5 seconds.
+This is just a example you could use of the streaming,
+you could also send a big amount of data via little chunks
+or use it for body data that needs to calculated.</p>
+<p>If the request handler resolves with a response stream that is already closed,
+it will simply send an empty response body.
+If the client closes the connection while the stream is still open, the
+response stream will automatically be closed.
+If a promise is resolved with a streaming body after the client closes, the
+response stream will automatically be closed.
+The <code>close</code> event can be used to clean up any pending resources allocated
+in this case (if applicable).</p>
+<blockquote>
+<p>Note that special care has to be taken if you use a body stream instance that
+implements ReactPHP's
+<a href="../stream/#duplexstreaminterface"><code>DuplexStreamInterface</code></a>
+(such as the <code>ThroughStream</code> in the above example).</p>
+<p>For <em>most</em> cases, this will simply only consume its readable side and forward
+(send) any data that is emitted by the stream, thus entirely ignoring the
+writable side of the stream.
+If however this is either a <code>101</code> (Switching Protocols) response or a <code>2xx</code>
+(Successful) response to a <code>CONNECT</code> method, it will also <em>write</em> data to the
+writable side of the stream.
+This can be avoided by either rejecting all requests with the <code>CONNECT</code>
+method (which is what most <em>normal</em> origin HTTP servers would likely do) or
+or ensuring that only ever an instance of <code>ReadableStreamInterface</code> is
+used.</p>
+<p>The <code>101</code> (Switching Protocols) response code is useful for the more advanced
+<code>Upgrade</code> requests, such as upgrading to the WebSocket protocol or
+implementing custom protocol logic that is out of scope of the HTTP specs and
+this HTTP library.
+If you want to handle the <code>Upgrade: WebSocket</code> header, you will likely want
+to look into using <a href="http://socketo.me/" rel="nofollow">Ratchet</a> instead.
+If you want to handle a custom protocol, you will likely want to look into the
+<a href="https://tools.ietf.org/html/rfc7230#section-6.7" rel="nofollow">HTTP specs</a> and also see
+<a href="https://github.com/reactphp/http/blob/v0.8.6/examples">examples #31 and #32</a> for more details.
+In particular, the <code>101</code> (Switching Protocols) response code MUST NOT be used
+unless you send an <code>Upgrade</code> response header value that is also present in
+the corresponding HTTP/1.1 <code>Upgrade</code> request header value.
+The server automatically takes care of sending a <code>Connection: upgrade</code>
+header value in this case, so you don't have to.</p>
+<p>The <code>CONNECT</code> method is useful in a tunneling setup (HTTPS proxy) and not
+something most origin HTTP servers would want to care about.
+The HTTP specs define an opaque "tunneling mode" for this method and make no
+use of the message body.
+For consistency reasons, this library uses a <code>DuplexStreamInterface</code> in the
+response body for tunneled application data.
+This implies that that a <code>2xx</code> (Successful) response to a <code>CONNECT</code> request
+can in fact use a streaming response body for the tunneled application data,
+so that any raw data the client sends over the connection will be piped
+through the writable stream for consumption.
+Note that while the HTTP specs make no use of the request body for <code>CONNECT</code>
+requests, one may still be present. Normal request body processing applies
+here and the connection will only turn to "tunneling mode" after the request
+body has been processed (which should be empty in most cases).
+See also <a href="https://github.com/reactphp/http/blob/v0.8.6/examples">example #22</a> for more details.</p>
+</blockquote>
+<h4>
+<a id="response-length" class="anchor" href="#response-length" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Response length</h4>
+<p>If the response body size is known, a <code>Content-Length</code> response header will be
+added automatically. This is the most common use case, for example when using
+a <code>string</code> response body like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) {</span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(</span>
+<span class="pl-s1">        <span class="pl-c1">200</span>,</span>
+<span class="pl-s1">        <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">            <span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>text/plain<span class="pl-pds">'</span></span></span>
+<span class="pl-s1">        ),</span>
+<span class="pl-s1">        <span class="pl-s"><span class="pl-pds">"</span>Hello World!<span class="pl-cce">\n</span><span class="pl-pds">"</span></span></span>
+<span class="pl-s1">    );</span>
+<span class="pl-s1">});</span></pre></div>
+<p>If the response body size is unknown, a <code>Content-Length</code> response header can not
+be added automatically. When using a <a href="#streaming-response">streaming response</a>
+without an explicit <code>Content-Length</code> response header, outgoing HTTP/1.1 response
+messages will automatically use <code>Transfer-Encoding: chunked</code> while legacy HTTP/1.0
+response messages will contain the plain response body. If you know the length
+of your streaming response body, you MAY want to specify it explicitly like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) <span class="pl-k">use</span> (<span class="pl-smi">$loop</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">ThroughStream</span>();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addTimer(<span class="pl-c1">2.0</span>, <span class="pl-k">function</span> () <span class="pl-k">use</span> (<span class="pl-smi">$stream</span>) {</span>
+<span class="pl-s1">        <span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>end(<span class="pl-s"><span class="pl-pds">"</span>Hello World!<span class="pl-cce">\n</span><span class="pl-pds">"</span></span>);</span>
+<span class="pl-s1">    });</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(</span>
+<span class="pl-s1">        <span class="pl-c1">200</span>,</span>
+<span class="pl-s1">        <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">            <span class="pl-s"><span class="pl-pds">'</span>Content-Length<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>13<span class="pl-pds">'</span></span>,</span>
+<span class="pl-s1">            <span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>text/plain<span class="pl-pds">'</span></span>,</span>
+<span class="pl-s1">        ),</span>
+<span class="pl-s1">        <span class="pl-smi">$stream</span></span>
+<span class="pl-s1">    );</span>
+<span class="pl-s1">});</span></pre></div>
+<p>Any response to a <code>HEAD</code> request and any response with a <code>1xx</code> (Informational),
+<code>204</code> (No Content) or <code>304</code> (Not Modified) status code will <em>not</em> include a
+message body as per the HTTP specs.
+This means that your callback does not have to take special care of this and any
+response body will simply be ignored.</p>
+<p>Similarly, any <code>2xx</code> (Successful) response to a <code>CONNECT</code> request, any response
+with a <code>1xx</code> (Informational) or <code>204</code> (No Content) status code will <em>not</em>
+include a <code>Content-Length</code> or <code>Transfer-Encoding</code> header as these do not apply
+to these messages.
+Note that a response to a <code>HEAD</code> request and any response with a <code>304</code> (Not
+Modified) status code MAY include these headers even though
+the message does not contain a response body, because these header would apply
+to the message if the same request would have used an (unconditional) <code>GET</code>.</p>
+<h4>
+<a id="invalid-response" class="anchor" href="#invalid-response" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Invalid response</h4>
+<p>As stated above, each outgoing HTTP response is always represented by the
+<a href="https://www.php-fig.org/psr/psr-7/#33-psrhttpmessageresponseinterface" rel="nofollow">PSR-7 <code>ResponseInterface</code></a>.
+If your request handler function returns an invalid value or throws an
+unhandled <code>Exception</code> or <code>Throwable</code>, the server will automatically send a <code>500</code>
+(Internal Server Error) HTTP error response to the client.
+On top of this, it will emit an <code>error</code> event that can be used for logging
+purposes like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>error<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-c1">Exception</span> <span class="pl-smi">$e</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>Error: <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$e</span><span class="pl-k">-&gt;</span>getMessage() <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">    <span class="pl-k">if</span> (<span class="pl-smi">$e</span><span class="pl-k">-&gt;</span>getPrevious() <span class="pl-k">!</span><span class="pl-k">==</span> <span class="pl-c1">null</span>) {</span>
+<span class="pl-s1">        <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>Previous: <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$e</span><span class="pl-k">-&gt;</span>getPrevious()<span class="pl-k">-&gt;</span>getMessage() <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">    }</span>
+<span class="pl-s1">});</span></pre></div>
+<p>Note that the server will also emit an <code>error</code> event if the client sends an
+invalid HTTP request that never reaches your request handler function. See
+also <a href="#invalid-request">invalid request</a> for more details.
+Additionally, a <a href="#streaming-request">streaming request</a> body can also emit
+an <code>error</code> event on the request body.</p>
+<p>The server will only send a very generic <code>500</code> (Interval Server Error) HTTP
+error response without any further details to the client if an unhandled
+error occurs. While we understand this might make initial debugging harder,
+it also means that the server does not leak any application details or stack
+traces to the outside by default. It is usually recommended to catch any
+<code>Exception</code> or <code>Throwable</code> within your request handler function or alternatively
+use a <a href="#middleware"><code>middleware</code></a> to avoid this generic error handling and
+create your own HTTP response message instead.</p>
+<h4>
+<a id="default-response-headers" class="anchor" href="#default-response-headers" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Default response headers</h4>
+<p>After the return in the callback function the response will be processed by the
+<a href="#server"><code>Server</code></a> or <a href="#streamingserver"><code>StreamingServer</code></a> respectively.
+They will add the protocol version of the request, so you don't have to.</p>
+<p>A <code>Date</code> header will be automatically added with the system date and time if none is given.
+You can add a custom <code>Date</code> header yourself like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) {</span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(</span>
+<span class="pl-s1">        <span class="pl-c1">200</span>,</span>
+<span class="pl-s1">        <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">            <span class="pl-s"><span class="pl-pds">'</span>Date<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">date</span>(<span class="pl-s"><span class="pl-pds">'</span>D, d M Y H:i:s T<span class="pl-pds">'</span></span>)</span>
+<span class="pl-s1">        )</span>
+<span class="pl-s1">    );</span>
+<span class="pl-s1">});</span></pre></div>
+<p>If you don't have a appropriate clock to rely on, you should
+unset this header with an empty string:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) {</span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(</span>
+<span class="pl-s1">        <span class="pl-c1">200</span>,</span>
+<span class="pl-s1">        <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">            <span class="pl-s"><span class="pl-pds">'</span>Date<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span><span class="pl-pds">'</span></span></span>
+<span class="pl-s1">        )</span>
+<span class="pl-s1">    );</span>
+<span class="pl-s1">});</span></pre></div>
+<p>Note that it will automatically assume a <code>X-Powered-By: react/alpha</code> header
+unless your specify a custom <code>X-Powered-By</code> header yourself:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) {</span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(</span>
+<span class="pl-s1">        <span class="pl-c1">200</span>,</span>
+<span class="pl-s1">        <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">            <span class="pl-s"><span class="pl-pds">'</span>X-Powered-By<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>PHP 3<span class="pl-pds">'</span></span></span>
+<span class="pl-s1">        )</span>
+<span class="pl-s1">    );</span>
+<span class="pl-s1">});</span></pre></div>
+<p>If you do not want to send this header at all, you can use an empty string as
+value like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) {</span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(</span>
+<span class="pl-s1">        <span class="pl-c1">200</span>,</span>
+<span class="pl-s1">        <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">            <span class="pl-s"><span class="pl-pds">'</span>X-Powered-By<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span><span class="pl-pds">'</span></span></span>
+<span class="pl-s1">        )</span>
+<span class="pl-s1">    );</span>
+<span class="pl-s1">});</span></pre></div>
+<p>Note that persistent connections (<code>Connection: keep-alive</code>) are currently
+not supported.
+As such, HTTP/1.1 response messages will automatically include a
+<code>Connection: close</code> header, irrespective of what header values are
+passed explicitly.</p>
+<h3>
+<a id="middleware" class="anchor" href="#middleware" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Middleware</h3>
+<p>As documented above, the <a href="#server"><code>Server</code></a> and advanced
+<a href="#streamingserver"><code>StreamingServer</code></a> accept a single
+request handler argument that is responsible for processing an incoming
+HTTP request and then creating and returning an outgoing HTTP response.</p>
+<p>Many common use cases involve validating, processing, manipulating the incoming
+HTTP request before passing it to the final business logic request handler.
+As such, this project supports the concept of middleware request handlers.</p>
+<p>A middleware request handler is expected to adhere the following rules:</p>
+<ul>
+<li>It is a valid <code>callable</code>.</li>
+<li>It accepts <code>ServerRequestInterface</code> as first argument and an optional
+<code>callable</code> as second argument.</li>
+<li>It returns either:
+<ul>
+<li>An instance implementing <code>ResponseInterface</code> for direct consumption.</li>
+<li>Any promise which can be consumed by
+<a href="https://reactphp.org/promise/#resolve" rel="nofollow"><code>Promise\resolve()</code></a> resolving to a
+<code>ResponseInterface</code> for deferred consumption.</li>
+<li>It MAY throw an <code>Exception</code> (or return a rejected promise) in order to
+signal an error condition and abort the chain.</li>
+</ul>
+</li>
+<li>It calls <code>$next($request)</code> to continue processing the next middleware
+request handler or returns explicitly without calling <code>$next</code> to
+abort the chain.
+<ul>
+<li>The <code>$next</code> request handler (recursively) invokes the next request
+handler from the chain with the same logic as above and returns (or throws)
+as above.</li>
+<li>The <code>$request</code> may be modified prior to calling <code>$next($request)</code> to
+change the incoming request the next middleware operates on.</li>
+<li>The <code>$next</code> return value may be consumed to modify the outgoing response.</li>
+<li>The <code>$next</code> request handler MAY be called more than once if you want to
+implement custom "retry" logic etc.</li>
+</ul>
+</li>
+</ul>
+<p>Note that this very simple definition allows you to use either anonymous
+functions or any classes that use the magic <code>__invoke()</code> method.
+This allows you to easily create custom middleware request handlers on the fly
+or use a class based approach to ease using existing middleware implementations.</p>
+<p>While this project does provide the means to <em>use</em> middleware implementations,
+it does not aim to <em>define</em> how middleware implementations should look like.
+We realize that there's a vivid ecosystem of middleware implementations and
+ongoing effort to standardize interfaces between these with
+<a href="https://www.php-fig.org/psr/psr-15/" rel="nofollow">PSR-15</a> (HTTP Server Request Handlers)
+and support this goal.
+As such, this project only bundles a few middleware implementations that are
+required to match PHP's request behavior (see below) and otherwise actively
+encourages <a href="#third-party-middleware">Third-Party Middleware</a> implementations.</p>
+<p>In order to use middleware request handlers, simply pass an array with all
+callables as defined above to the <a href="#server"><code>Server</code></a> or
+<a href="#streamingserver"><code>StreamingServer</code></a> respectively.
+The following example adds a middleware request handler that adds the current time to the request as a
+header (<code>Request-Time</code>) and a final request handler that always returns a 200 code without a body:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>, <span class="pl-k">callable</span> <span class="pl-smi">$next</span>) {</span>
+<span class="pl-s1">        <span class="pl-smi">$request</span> <span class="pl-k">=</span> <span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>withHeader(<span class="pl-s"><span class="pl-pds">'</span>Request-Time<span class="pl-pds">'</span></span>, <span class="pl-c1">time</span>());</span>
+<span class="pl-s1">        <span class="pl-k">return</span> $<span class="pl-smi">next</span>(<span class="pl-smi">$request</span>);</span>
+<span class="pl-s1">    },</span>
+<span class="pl-s1">    <span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) {</span>
+<span class="pl-s1">        <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(<span class="pl-c1">200</span>);</span>
+<span class="pl-s1">    }</span>
+<span class="pl-s1">));</span></pre></div>
+<blockquote>
+<p>Note how the middleware request handler and the final request handler have a
+very simple (and similar) interface. The only difference is that the final
+request handler does not receive a <code>$next</code> handler.</p>
+</blockquote>
+<p>Similarly, you can use the result of the <code>$next</code> middleware request handler
+function to modify the outgoing response.
+Note that as per the above documentation, the <code>$next</code> middleware request handler may return a
+<code>ResponseInterface</code> directly or one wrapped in a promise for deferred
+resolution.
+In order to simplify handling both paths, you can simply wrap this in a
+<a href="https://reactphp.org/promise/#resolve" rel="nofollow"><code>Promise\resolve()</code></a> call like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>, <span class="pl-k">callable</span> <span class="pl-smi">$next</span>) {</span>
+<span class="pl-s1">        <span class="pl-smi">$promise</span> <span class="pl-k">=</span> <span class="pl-c1">React\Promise\</span>resolve($<span class="pl-smi">next</span>(<span class="pl-smi">$request</span>));</span>
+<span class="pl-s1">        <span class="pl-k">return</span> <span class="pl-smi">$promise</span><span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-c1">ResponseInterface</span> <span class="pl-smi">$response</span>) {</span>
+<span class="pl-s1">            <span class="pl-k">return</span> <span class="pl-smi">$response</span><span class="pl-k">-&gt;</span>withHeader(<span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>text/html<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1">        });</span>
+<span class="pl-s1">    },</span>
+<span class="pl-s1">    <span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) {</span>
+<span class="pl-s1">        <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(<span class="pl-c1">200</span>);</span>
+<span class="pl-s1">    }</span>
+<span class="pl-s1">));</span></pre></div>
+<p>Note that the <code>$next</code> middleware request handler may also throw an
+<code>Exception</code> (or return a rejected promise) as described above.
+The previous example does not catch any exceptions and would thus signal an
+error condition to the <code>Server</code>.
+Alternatively, you can also catch any <code>Exception</code> to implement custom error
+handling logic (or logging etc.) by wrapping this in a
+<a href="https://reactphp.org/promise/#promise" rel="nofollow"><code>Promise</code></a> like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>, <span class="pl-k">callable</span> <span class="pl-smi">$next</span>) {</span>
+<span class="pl-s1">        <span class="pl-smi">$promise</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Promise\</span><span class="pl-c1">Promise</span>(<span class="pl-k">function</span> (<span class="pl-smi">$resolve</span>) <span class="pl-k">use</span> (<span class="pl-smi">$next</span>, <span class="pl-smi">$request</span>) {</span>
+<span class="pl-s1">            $<span class="pl-smi">resolve</span>($<span class="pl-smi">next</span>(<span class="pl-smi">$request</span>));</span>
+<span class="pl-s1">        });</span>
+<span class="pl-s1">        <span class="pl-k">return</span> <span class="pl-smi">$promise</span><span class="pl-k">-&gt;</span>then(<span class="pl-c1">null</span>, <span class="pl-k">function</span> (<span class="pl-c1">Exception</span> <span class="pl-smi">$e</span>) {</span>
+<span class="pl-s1">            <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(</span>
+<span class="pl-s1">                <span class="pl-c1">500</span>,</span>
+<span class="pl-s1">                <span class="pl-c1">array</span>(),</span>
+<span class="pl-s1">                <span class="pl-s"><span class="pl-pds">'</span>Internal error: <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$e</span><span class="pl-k">-&gt;</span>getMessage()</span>
+<span class="pl-s1">            );</span>
+<span class="pl-s1">        });</span>
+<span class="pl-s1">    },</span>
+<span class="pl-s1">    <span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) {</span>
+<span class="pl-s1">        <span class="pl-k">if</span> (<span class="pl-c1">mt_rand</span>(<span class="pl-c1">0</span>, <span class="pl-c1">1</span>) <span class="pl-k">===</span> <span class="pl-c1">1</span>) {</span>
+<span class="pl-s1">            <span class="pl-k">throw</span> <span class="pl-k">new</span> <span class="pl-c1">RuntimeException</span>(<span class="pl-s"><span class="pl-pds">'</span>Database error<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1">        }</span>
+<span class="pl-s1">        <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(<span class="pl-c1">200</span>);</span>
+<span class="pl-s1">    }</span>
+<span class="pl-s1">));</span></pre></div>
+<h4>
+<a id="limitconcurrentrequestsmiddleware" class="anchor" href="#limitconcurrentrequestsmiddleware" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>LimitConcurrentRequestsMiddleware</h4>
+<p>The <code>LimitConcurrentRequestsMiddleware</code> can be used to
+limit how many next handlers can be executed concurrently.</p>
+<p>If this middleware is invoked, it will check if the number of pending
+handlers is below the allowed limit and then simply invoke the next handler
+and it will return whatever the next handler returns (or throws).</p>
+<p>If the number of pending handlers exceeds the allowed limit, the request will
+be queued (and its streaming body will be paused) and it will return a pending
+promise.
+Once a pending handler returns (or throws), it will pick the oldest request
+from this queue and invokes the next handler (and its streaming body will be
+resumed).</p>
+<p>The following example shows how this middleware can be used to ensure no more
+than 10 handlers will be invoked at once:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">LimitConcurrentRequestsMiddleware</span>(<span class="pl-c1">10</span>),</span>
+<span class="pl-s1">    <span class="pl-smi">$handler</span></span>
+<span class="pl-s1">));</span></pre></div>
+<p>Similarly, this middleware is often used in combination with the
+<a href="#requestbodybuffermiddleware"><code>RequestBodyBufferMiddleware</code></a> (see below)
+to limit the total number of requests that can be buffered at once:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">StreamingServer</span>(<span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">LimitConcurrentRequestsMiddleware</span>(<span class="pl-c1">100</span>), <span class="pl-c"><span class="pl-c">//</span> 100 concurrent buffering handlers</span></span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">RequestBodyBufferMiddleware</span>(<span class="pl-c1">2</span> <span class="pl-k">*</span> <span class="pl-c1">1024</span> <span class="pl-k">*</span> <span class="pl-c1">1024</span>), <span class="pl-c"><span class="pl-c">//</span> 2 MiB per request</span></span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">RequestBodyParserMiddleware</span>(),</span>
+<span class="pl-s1">    <span class="pl-smi">$handler</span></span>
+<span class="pl-s1">));</span></pre></div>
+<p>More sophisticated examples include limiting the total number of requests
+that can be buffered at once and then ensure the actual request handler only
+processes one request after another without any concurrency:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">StreamingServer</span>(<span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">LimitConcurrentRequestsMiddleware</span>(<span class="pl-c1">100</span>), <span class="pl-c"><span class="pl-c">//</span> 100 concurrent buffering handlers</span></span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">RequestBodyBufferMiddleware</span>(<span class="pl-c1">2</span> <span class="pl-k">*</span> <span class="pl-c1">1024</span> <span class="pl-k">*</span> <span class="pl-c1">1024</span>), <span class="pl-c"><span class="pl-c">//</span> 2 MiB per request</span></span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">RequestBodyParserMiddleware</span>(),</span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">LimitConcurrentRequestsMiddleware</span>(<span class="pl-c1">1</span>), <span class="pl-c"><span class="pl-c">//</span> only execute 1 handler (no concurrency)</span></span>
+<span class="pl-s1">    <span class="pl-smi">$handler</span></span>
+<span class="pl-s1">));</span></pre></div>
+<h4>
+<a id="requestbodybuffermiddleware" class="anchor" href="#requestbodybuffermiddleware" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>RequestBodyBufferMiddleware</h4>
+<p>One of the built-in middleware is the <code>RequestBodyBufferMiddleware</code> which
+can be used to buffer the whole incoming request body in memory.
+This can be useful if full PSR-7 compatibility is needed for the request handler
+and the default streaming request body handling is not needed.
+The constructor accepts one optional argument, the maximum request body size.
+When one isn't provided it will use <code>post_max_size</code> (default 8 MiB) from PHP's
+configuration.
+(Note that the value from your matching SAPI will be used, which is the CLI
+configuration in most cases.)</p>
+<p>Any incoming request that has a request body that exceeds this limit will be
+accepted, but its request body will be discarded (empty request body).
+This is done in order to avoid having to keep an incoming request with an
+excessive size (for example, think of a 2 GB file upload) in memory.
+This allows the next middleware handler to still handle this request, but it
+will see an empty request body.
+This is similar to PHP's default behavior, where the body will not be parsed
+if this limit is exceeded. However, unlike PHP's default behavior, the raw
+request body is not available via <code>php://input</code>.</p>
+<p>The <code>RequestBodyBufferMiddleware</code> will buffer requests with bodies of known size
+(i.e. with <code>Content-Length</code> header specified) as well as requests with bodies of
+unknown size (i.e. with <code>Transfer-Encoding: chunked</code> header).</p>
+<p>All requests will be buffered in memory until the request body end has
+been reached and then call the next middleware handler with the complete,
+buffered request.
+Similarly, this will immediately invoke the next middleware handler for requests
+that have an empty request body (such as a simple <code>GET</code> request) and requests
+that are already buffered (such as due to another middleware).</p>
+<p>Note that the given buffer size limit is applied to each request individually.
+This means that if you allow a 2 MiB limit and then receive 1000 concurrent
+requests, up to 2000 MiB may be allocated for these buffers alone.
+As such, it's highly recommended to use this along with the
+<a href="#limitconcurrentrequestsmiddleware"><code>LimitConcurrentRequestsMiddleware</code></a> (see above) to limit
+the total number of concurrent requests.</p>
+<p>Usage:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">StreamingServer</span>(<span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">LimitConcurrentRequestsMiddleware</span>(<span class="pl-c1">100</span>), <span class="pl-c"><span class="pl-c">//</span> 100 concurrent buffering handlers</span></span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">RequestBodyBufferMiddleware</span>(<span class="pl-c1">16</span> <span class="pl-k">*</span> <span class="pl-c1">1024</span> <span class="pl-k">*</span> <span class="pl-c1">1024</span>), <span class="pl-c"><span class="pl-c">//</span> 16 MiB</span></span>
+<span class="pl-s1">    <span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) {</span>
+<span class="pl-s1">        <span class="pl-c"><span class="pl-c">//</span> The body from $request-&gt;getBody() is now fully available without the need to stream it </span></span>
+<span class="pl-s1">        <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(<span class="pl-c1">200</span>);</span>
+<span class="pl-s1">    },</span>
+<span class="pl-s1">));</span></pre></div>
+<h4>
+<a id="requestbodyparsermiddleware" class="anchor" href="#requestbodyparsermiddleware" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>RequestBodyParserMiddleware</h4>
+<p>The <code>RequestBodyParserMiddleware</code> takes a fully buffered request body
+(generally from <a href="#requestbodybuffermiddleware"><code>RequestBodyBufferMiddleware</code></a>),
+and parses the form values and file uploads from the incoming HTTP request body.</p>
+<p>This middleware handler takes care of applying values from HTTP
+requests that use <code>Content-Type: application/x-www-form-urlencoded</code> or
+<code>Content-Type: multipart/form-data</code> to resemble PHP's default superglobals
+<code>$_POST</code> and <code>$_FILES</code>.
+Instead of relying on these superglobals, you can use the
+<code>$request-&gt;getParsedBody()</code> and <code>$request-&gt;getUploadedFiles()</code> methods
+as defined by PSR-7.</p>
+<p>Accordingly, each file upload will be represented as instance implementing <a href="https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-7-http-message.md#36-psrhttpmessageuploadedfileinterface"><code>UploadedFileInterface</code></a>.
+Due to its blocking nature, the <code>moveTo()</code> method is not available and throws
+a <code>RuntimeException</code> instead.
+You can use <code>$contents = (string)$file-&gt;getStream();</code> to access the file
+contents and persist this to your favorite data store.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$handler</span> <span class="pl-k">=</span> <span class="pl-k">function</span> (<span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) {</span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> If any, parsed form fields are now available from $request-&gt;getParsedBody()</span></span>
+<span class="pl-s1">    <span class="pl-smi">$body</span> <span class="pl-k">=</span> <span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>getParsedBody();</span>
+<span class="pl-s1">    <span class="pl-smi">$name</span> <span class="pl-k">=</span> <span class="pl-c1">isset</span>(<span class="pl-smi">$body</span>[<span class="pl-s"><span class="pl-pds">'</span>name<span class="pl-pds">'</span></span>]) ? <span class="pl-smi">$body</span>[<span class="pl-s"><span class="pl-pds">'</span>name<span class="pl-pds">'</span></span>] : <span class="pl-s"><span class="pl-pds">'</span>unnamed<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-smi">$files</span> <span class="pl-k">=</span> <span class="pl-smi">$request</span><span class="pl-k">-&gt;</span>getUploadedFiles();</span>
+<span class="pl-s1">    <span class="pl-smi">$avatar</span> <span class="pl-k">=</span> <span class="pl-c1">isset</span>(<span class="pl-smi">$files</span>[<span class="pl-s"><span class="pl-pds">'</span>avatar<span class="pl-pds">'</span></span>]) ? <span class="pl-smi">$files</span>[<span class="pl-s"><span class="pl-pds">'</span>avatar<span class="pl-pds">'</span></span>] : <span class="pl-c1">null</span>;</span>
+<span class="pl-s1">    <span class="pl-k">if</span> (<span class="pl-smi">$avatar</span> <span class="pl-k">instanceof</span> <span class="pl-c1">UploadedFileInterface</span>) {</span>
+<span class="pl-s1">        <span class="pl-k">if</span> (<span class="pl-smi">$avatar</span><span class="pl-k">-&gt;</span>getError() <span class="pl-k">===</span> <span class="pl-c1">UPLOAD_ERR_OK</span>) {</span>
+<span class="pl-s1">            <span class="pl-smi">$uploaded</span> <span class="pl-k">=</span> <span class="pl-smi">$avatar</span><span class="pl-k">-&gt;</span>getSize() <span class="pl-k">.</span> <span class="pl-s"><span class="pl-pds">'</span> bytes<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1">        } <span class="pl-k">elseif</span> (<span class="pl-smi">$avatar</span><span class="pl-k">-&gt;</span>getError() <span class="pl-k">===</span> <span class="pl-c1">UPLOAD_ERR_INI_SIZE</span>) {</span>
+<span class="pl-s1">            <span class="pl-smi">$uploaded</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>file too large<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1">        } <span class="pl-k">else</span> {</span>
+<span class="pl-s1">            <span class="pl-smi">$uploaded</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>with error<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1">        }</span>
+<span class="pl-s1">    } <span class="pl-k">else</span> {</span>
+<span class="pl-s1">        <span class="pl-smi">$uploaded</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>nothing<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1">    }</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Response</span>(</span>
+<span class="pl-s1">        <span class="pl-c1">200</span>,</span>
+<span class="pl-s1">        <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">            <span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>text/plain<span class="pl-pds">'</span></span></span>
+<span class="pl-s1">        ),</span>
+<span class="pl-s1">        <span class="pl-smi">$name</span> <span class="pl-k">.</span> <span class="pl-s"><span class="pl-pds">'</span> uploaded <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$uploaded</span></span>
+<span class="pl-s1">    );</span>
+<span class="pl-s1">};</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">StreamingServer</span>(<span class="pl-c1">array</span>((</span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">LimitConcurrentRequestsMiddleware</span>(<span class="pl-c1">100</span>), <span class="pl-c"><span class="pl-c">//</span> 100 concurrent buffering handlers</span></span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">RequestBodyBufferMiddleware</span>(<span class="pl-c1">16</span> <span class="pl-k">*</span> <span class="pl-c1">1024</span> <span class="pl-k">*</span> <span class="pl-c1">1024</span>), <span class="pl-c"><span class="pl-c">//</span> 16 MiB</span></span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">RequestBodyParserMiddleware</span>(),</span>
+<span class="pl-s1">    <span class="pl-smi">$handler</span></span>
+<span class="pl-s1">));</span></pre></div>
+<p>See also <a href="https://github.com/reactphp/http/blob/v0.8.6/examples">example #12</a> for more details.</p>
+<p>By default, this middleware respects the
+<a href="https://www.php.net/manual/en/ini.core.php#ini.upload-max-filesize" rel="nofollow"><code>upload_max_filesize</code></a>
+(default <code>2M</code>) ini setting.
+Files that exceed this limit will be rejected with an <code>UPLOAD_ERR_INI_SIZE</code> error.
+You can control the maximum filesize for each individual file upload by
+explicitly passing the maximum filesize in bytes as the first parameter to the
+constructor like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-k">new</span> <span class="pl-c1">RequestBodyParserMiddleware</span>(<span class="pl-c1">8</span> <span class="pl-k">*</span> <span class="pl-c1">1024</span> <span class="pl-k">*</span> <span class="pl-c1">1024</span>); <span class="pl-c"><span class="pl-c">//</span> 8 MiB limit per file</span></span></pre></div>
+<p>By default, this middleware respects the
+<a href="https://www.php.net/manual/en/ini.core.php#ini.file-uploads" rel="nofollow"><code>file_uploads</code></a>
+(default <code>1</code>) and
+<a href="https://www.php.net/manual/en/ini.core.php#ini.max-file-uploads" rel="nofollow"><code>max_file_uploads</code></a>
+(default <code>20</code>) ini settings.
+These settings control if any and how many files can be uploaded in a single request.
+If you upload more files in a single request, additional files will be ignored
+and the <code>getUploadedFiles()</code> method returns a truncated array.
+Note that upload fields left blank on submission do not count towards this limit.
+You can control the maximum number of file uploads per request by explicitly
+passing the second parameter to the constructor like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-k">new</span> <span class="pl-c1">RequestBodyParserMiddleware</span>(<span class="pl-c1">10</span> <span class="pl-k">*</span> <span class="pl-c1">1024</span>, <span class="pl-c1">100</span>); <span class="pl-c"><span class="pl-c">//</span> 100 files with 10 KiB each</span></span></pre></div>
+<blockquote>
+<p>Note that this middleware handler simply parses everything that is already
+buffered in the request body.
+It is imperative that the request body is buffered by a prior middleware
+handler as given in the example above.
+This previous middleware handler is also responsible for rejecting incoming
+requests that exceed allowed message sizes (such as big file uploads).
+The <a href="#requestbodybuffermiddleware"><code>RequestBodyBufferMiddleware</code></a> used above
+simply discards excessive request bodies, resulting in an empty body.
+If you use this middleware without buffering first, it will try to parse an
+empty (streaming) body and may thus assume an empty data structure.
+See also <a href="#requestbodybuffermiddleware"><code>RequestBodyBufferMiddleware</code></a> for
+more details.</p>
+</blockquote>
+<blockquote>
+<p>PHP's <code>MAX_FILE_SIZE</code> hidden field is respected by this middleware.
+Files that exceed this limit will be rejected with an <code>UPLOAD_ERR_FORM_SIZE</code> error.</p>
+</blockquote>
+<blockquote>
+<p>This middleware respects the
+<a href="https://www.php.net/manual/en/info.configuration.php#ini.max-input-vars" rel="nofollow"><code>max_input_vars</code></a>
+(default <code>1000</code>) and
+<a href="https://www.php.net/manual/en/info.configuration.php#ini.max-input-nesting-level" rel="nofollow"><code>max_input_nesting_level</code></a>
+(default <code>64</code>) ini settings.</p>
+</blockquote>
+<blockquote>
+<p>Note that this middleware ignores the
+<a href="https://www.php.net/manual/en/ini.core.php#ini.enable-post-data-reading" rel="nofollow"><code>enable_post_data_reading</code></a>
+(default <code>1</code>) ini setting because it makes little sense to respect here and
+is left up to higher-level implementations.
+If you want to respect this setting, you have to check its value and
+effectively avoid using this middleware entirely.</p>
+</blockquote>
+<h4>
+<a id="third-party-middleware" class="anchor" href="#third-party-middleware" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Third-Party Middleware</h4>
+<p>While this project does provide the means to <em>use</em> middleware implementations
+(see above), it does not aim to <em>define</em> how middleware implementations should
+look like. We realize that there's a vivid ecosystem of middleware
+implementations and ongoing effort to standardize interfaces between these with
+<a href="https://www.php-fig.org/psr/psr-15/" rel="nofollow">PSR-15</a> (HTTP Server Request Handlers)
+and support this goal.
+As such, this project only bundles a few middleware implementations that are
+required to match PHP's request behavior (see above) and otherwise actively
+encourages third-party middleware implementations.</p>
+<p>While we would love to support PSR-15 directy in <code>react/http</code>, we understand
+that this interface does not specifically target async APIs and as such does
+not take advantage of promises for <a href="#deferred-response">deferred responses</a>.
+The gist of this is that where PSR-15 enforces a <code>ResponseInterface</code> return
+value, we also accept a <code>PromiseInterface&lt;ResponseInterface&gt;</code>.
+As such, we suggest using the external
+<a href="https://github.com/friends-of-reactphp/http-middleware-psr15-adapter">PSR-15 middleware adapter</a>
+that uses on the fly monkey patching of these return values which makes using
+most PSR-15 middleware possible with this package without any changes required.</p>
+<p>Other than that, you can also use the above <a href="#middleware">middleware definition</a>
+to create custom middleware. A non-exhaustive list of third-party middleware can
+be found at the <a href="https://github.com/reactphp/http/wiki/Middleware">middleware wiki</a>.
+If you build or know a custom middleware, make sure to let the world know and
+feel free to add it to this list.</p>
+<h2>
+<a id="install" class="anchor" href="#install" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Install</h2>
+<p>The recommended way to install this library is <a href="https://getcomposer.org" rel="nofollow">through Composer</a>.
+<a href="https://getcomposer.org/doc/00-intro.md" rel="nofollow">New to Composer?</a></p>
+<p>This will install the latest supported version:</p>
+<div class="highlight highlight-source-shell"><pre>$ composer require react/http:^0.8.5</pre></div>
+<p>See also the <a href="changelog.html">CHANGELOG</a> for details about version upgrades.</p>
+<p>This project aims to run on any platform and thus does not require any PHP
+extensions and supports running on legacy PHP 5.3 through current PHP 7+ and
+HHVM.
+It's <em>highly recommended to use PHP 7+</em> for this project.</p>
+<h2>
+<a id="tests" class="anchor" href="#tests" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Tests</h2>
+<p>To run the test suite, you first need to clone this repo and then install all
+dependencies <a href="https://getcomposer.org" rel="nofollow">through Composer</a>:</p>
+<div class="highlight highlight-source-shell"><pre>$ composer install</pre></div>
+<p>To run the test suite, go to the project root and run:</p>
+<div class="highlight highlight-source-shell"><pre>$ php vendor/bin/phpunit</pre></div>
+<h2>
+<a id="license" class="anchor" href="#license" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>License</h2>
+<p>MIT, see <a href="license.html">LICENSE file</a>.</p>
+                                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../http/">HTTP</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v0.8.6
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/http#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.8.5#readme" class="version-selector__version">
+                                                    v0.8.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.8.4#readme" class="version-selector__version">
+                                                    v0.8.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.8.3#readme" class="version-selector__version">
+                                                    v0.8.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.8.2#readme" class="version-selector__version">
+                                                    v0.8.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.8.1#readme" class="version-selector__version">
+                                                    v0.8.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.8.0#readme" class="version-selector__version">
+                                                    v0.8.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.7.4#readme" class="version-selector__version">
+                                                    v0.7.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.7.3#readme" class="version-selector__version">
+                                                    v0.7.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.7.2#readme" class="version-selector__version">
+                                                    v0.7.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.7.1#readme" class="version-selector__version">
+                                                    v0.7.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.7.0#readme" class="version-selector__version">
+                                                    v0.7.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.6.0#readme" class="version-selector__version">
+                                                    v0.6.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.5.0#readme" class="version-selector__version">
+                                                    v0.5.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.4.4#readme" class="version-selector__version">
+                                                    v0.4.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.4.3#readme" class="version-selector__version">
+                                                    v0.4.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.4.2#readme" class="version-selector__version">
+                                                    v0.4.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.4.1#readme" class="version-selector__version">
+                                                    v0.4.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.4.0#readme" class="version-selector__version">
+                                                    v0.4.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.3.0#readme" class="version-selector__version">
+                                                    v0.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.2.6#readme" class="version-selector__version">
+                                                    v0.2.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.2.3#readme" class="version-selector__version">
+                                                    v0.2.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.2.2#readme" class="version-selector__version">
+                                                    v0.2.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.2.1#readme" class="version-selector__version">
+                                                    v0.2.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.2.0#readme" class="version-selector__version">
+                                                    v0.2.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.1.1#readme" class="version-selector__version">
+                                                    v0.1.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.1.0#readme" class="version-selector__version">
+                                                    v0.1.0
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/http">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../http/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../http/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/http:^0.8.6</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (202 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (145 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (44 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/legionth">
+                                    <img src="https://avatars0.githubusercontent.com/u/1578709?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/1578709?v=4&amp;s=80 2x" alt="legionth" title="legionth (43 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/igorw">
+                                    <img src="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=80 2x" alt="igorw" title="igorw (40 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cboden">
+                                    <img src="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=80 2x" alt="cboden" title="cboden (30 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/arnaud-lb">
+                                    <img src="https://avatars3.githubusercontent.com/u/365207?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/365207?v=4&amp;s=80 2x" alt="arnaud-lb" title="arnaud-lb (23 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/andig">
+                                    <img src="https://avatars1.githubusercontent.com/u/184815?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/184815?v=4&amp;s=80 2x" alt="andig" title="andig (8 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/onigoetz">
+                                    <img src="https://avatars0.githubusercontent.com/u/309594?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/309594?v=4&amp;s=80 2x" alt="onigoetz" title="onigoetz (6 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/seregazhuk">
+                                    <img src="https://avatars3.githubusercontent.com/u/9959761?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/9959761?v=4&amp;s=80 2x" alt="seregazhuk" title="seregazhuk (5 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/carusogabriel">
+                                    <img src="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=80 2x" alt="carusogabriel" title="carusogabriel (4 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/kalessil">
+                                    <img src="https://avatars2.githubusercontent.com/u/1577185?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/1577185?v=4&amp;s=80 2x" alt="kalessil" title="kalessil (4 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/nopolabs">
+                                    <img src="https://avatars2.githubusercontent.com/u/815864?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/815864?v=4&amp;s=80 2x" alt="nopolabs" title="nopolabs (3 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/slava-vishnyakov">
+                                    <img src="https://avatars0.githubusercontent.com/u/817931?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/817931?v=4&amp;s=80 2x" alt="slava-vishnyakov" title="slava-vishnyakov (3 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/aaronbonneau">
+                                    <img src="https://avatars0.githubusercontent.com/u/8574061?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/8574061?v=4&amp;s=80 2x" alt="aaronbonneau" title="aaronbonneau (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/iannsp">
+                                    <img src="https://avatars2.githubusercontent.com/u/40551?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/40551?v=4&amp;s=80 2x" alt="iannsp" title="iannsp (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/beaucollins">
+                                    <img src="https://avatars0.githubusercontent.com/u/19795?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/19795?v=4&amp;s=80 2x" alt="beaucollins" title="beaucollins (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/greevex">
+                                    <img src="https://avatars3.githubusercontent.com/u/148401?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/148401?v=4&amp;s=80 2x" alt="greevex" title="greevex (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/marenzo">
+                                    <img src="https://avatars3.githubusercontent.com/u/1208453?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/1208453?v=4&amp;s=80 2x" alt="marenzo" title="marenzo (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/PabloJoan">
+                                    <img src="https://avatars0.githubusercontent.com/u/9193314?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/9193314?v=4&amp;s=80 2x" alt="PabloJoan" title="PabloJoan (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/ojhaujjwal">
+                                    <img src="https://avatars3.githubusercontent.com/u/4995501?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/4995501?v=4&amp;s=80 2x" alt="ojhaujjwal" title="ojhaujjwal (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/e3betht">
+                                    <img src="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=80 2x" alt="e3betht" title="e3betht (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-http-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-http-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,1 6,1 12,6 18,1 24,1 30,1 36,1 42,1 48,1 54,1 60,2 66,1 72,1 78,1 84,1 90,1 96,1 102,2 108,1 114,1 120,1 126,3 132,1 138,1 144,1 150,1 156,4 162,2 168,1 174,1 180,1 186,1 192,3 198,1 204,1 210,1 216,1 222,1 228,1 234,1 240,1 246,1 252,1 258,1 264,1 270,1 276,1 282,1 288,1 294,1 300,1 306,1" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-http-participation-gradient);mask:url(#reactphp-http-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/http/license.html b/http/license.html
new file mode 100644
index 000000000..0b55c6bb9
--- /dev/null
+++ b/http/license.html
@@ -0,0 +1,567 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>HTTP: License - ReactPHP</title>
+
+        <meta name="description" content="Event-driven, streaming plaintext HTTP and secure HTTPS server for ReactPHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+            </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                    <h1>HTTP License</h1>
+
+    <p>Copyright (c) 2012 Igor Wiedler, Chris Boden</p>
+<p>Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:</p>
+<p>The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.</p>
+<p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.</p>
+                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../http/">HTTP</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v0.8.6
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/http#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.8.5#readme" class="version-selector__version">
+                                                    v0.8.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.8.4#readme" class="version-selector__version">
+                                                    v0.8.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.8.3#readme" class="version-selector__version">
+                                                    v0.8.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.8.2#readme" class="version-selector__version">
+                                                    v0.8.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.8.1#readme" class="version-selector__version">
+                                                    v0.8.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.8.0#readme" class="version-selector__version">
+                                                    v0.8.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.7.4#readme" class="version-selector__version">
+                                                    v0.7.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.7.3#readme" class="version-selector__version">
+                                                    v0.7.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.7.2#readme" class="version-selector__version">
+                                                    v0.7.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.7.1#readme" class="version-selector__version">
+                                                    v0.7.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.7.0#readme" class="version-selector__version">
+                                                    v0.7.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.6.0#readme" class="version-selector__version">
+                                                    v0.6.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.5.0#readme" class="version-selector__version">
+                                                    v0.5.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.4.4#readme" class="version-selector__version">
+                                                    v0.4.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.4.3#readme" class="version-selector__version">
+                                                    v0.4.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.4.2#readme" class="version-selector__version">
+                                                    v0.4.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.4.1#readme" class="version-selector__version">
+                                                    v0.4.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.4.0#readme" class="version-selector__version">
+                                                    v0.4.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.3.0#readme" class="version-selector__version">
+                                                    v0.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.2.6#readme" class="version-selector__version">
+                                                    v0.2.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.2.3#readme" class="version-selector__version">
+                                                    v0.2.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.2.2#readme" class="version-selector__version">
+                                                    v0.2.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.2.1#readme" class="version-selector__version">
+                                                    v0.2.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.2.0#readme" class="version-selector__version">
+                                                    v0.2.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.1.1#readme" class="version-selector__version">
+                                                    v0.1.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/http/tree/v0.1.0#readme" class="version-selector__version">
+                                                    v0.1.0
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/http">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../http/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../http/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/http:^0.8.6</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (202 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (145 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (44 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/legionth">
+                                    <img src="https://avatars0.githubusercontent.com/u/1578709?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/1578709?v=4&amp;s=80 2x" alt="legionth" title="legionth (43 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/igorw">
+                                    <img src="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=80 2x" alt="igorw" title="igorw (40 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cboden">
+                                    <img src="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=80 2x" alt="cboden" title="cboden (30 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/arnaud-lb">
+                                    <img src="https://avatars3.githubusercontent.com/u/365207?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/365207?v=4&amp;s=80 2x" alt="arnaud-lb" title="arnaud-lb (23 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/andig">
+                                    <img src="https://avatars1.githubusercontent.com/u/184815?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/184815?v=4&amp;s=80 2x" alt="andig" title="andig (8 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/onigoetz">
+                                    <img src="https://avatars0.githubusercontent.com/u/309594?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/309594?v=4&amp;s=80 2x" alt="onigoetz" title="onigoetz (6 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/seregazhuk">
+                                    <img src="https://avatars3.githubusercontent.com/u/9959761?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/9959761?v=4&amp;s=80 2x" alt="seregazhuk" title="seregazhuk (5 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/carusogabriel">
+                                    <img src="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=80 2x" alt="carusogabriel" title="carusogabriel (4 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/kalessil">
+                                    <img src="https://avatars2.githubusercontent.com/u/1577185?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/1577185?v=4&amp;s=80 2x" alt="kalessil" title="kalessil (4 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/nopolabs">
+                                    <img src="https://avatars2.githubusercontent.com/u/815864?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/815864?v=4&amp;s=80 2x" alt="nopolabs" title="nopolabs (3 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/slava-vishnyakov">
+                                    <img src="https://avatars0.githubusercontent.com/u/817931?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/817931?v=4&amp;s=80 2x" alt="slava-vishnyakov" title="slava-vishnyakov (3 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/aaronbonneau">
+                                    <img src="https://avatars0.githubusercontent.com/u/8574061?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/8574061?v=4&amp;s=80 2x" alt="aaronbonneau" title="aaronbonneau (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/iannsp">
+                                    <img src="https://avatars2.githubusercontent.com/u/40551?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/40551?v=4&amp;s=80 2x" alt="iannsp" title="iannsp (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/beaucollins">
+                                    <img src="https://avatars0.githubusercontent.com/u/19795?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/19795?v=4&amp;s=80 2x" alt="beaucollins" title="beaucollins (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/greevex">
+                                    <img src="https://avatars3.githubusercontent.com/u/148401?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/148401?v=4&amp;s=80 2x" alt="greevex" title="greevex (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/marenzo">
+                                    <img src="https://avatars3.githubusercontent.com/u/1208453?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/1208453?v=4&amp;s=80 2x" alt="marenzo" title="marenzo (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/PabloJoan">
+                                    <img src="https://avatars0.githubusercontent.com/u/9193314?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/9193314?v=4&amp;s=80 2x" alt="PabloJoan" title="PabloJoan (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/ojhaujjwal">
+                                    <img src="https://avatars3.githubusercontent.com/u/4995501?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/4995501?v=4&amp;s=80 2x" alt="ojhaujjwal" title="ojhaujjwal (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/e3betht">
+                                    <img src="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=80 2x" alt="e3betht" title="e3betht (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-http-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-http-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,1 6,1 12,6 18,1 24,1 30,1 36,1 42,1 48,1 54,1 60,2 66,1 72,1 78,1 84,1 90,1 96,1 102,2 108,1 114,1 120,1 126,3 132,1 138,1 144,1 150,1 156,4 162,2 168,1 174,1 180,1 186,1 192,3 198,1 204,1 210,1 216,1 222,1 228,1 234,1 240,1 246,1 252,1 258,1 264,1 270,1 276,1 282,1 288,1 294,1 300,1 306,1" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-http-participation-gradient);mask:url(#reactphp-http-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/index.html b/index.html
new file mode 100644
index 000000000..6ce0466e7
--- /dev/null
+++ b/index.html
@@ -0,0 +1,788 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>ReactPHP: Event-driven, non-blocking I/O with PHP - ReactPHP</title>
+
+        <meta name="description" content="Event-driven, non-blocking I/O with PHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = 'assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(assets/icons.063d0ba7.ttf) format("truetype"),url(assets/icons.5ea4cc5c.woff) format("woff"),url(assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="assets/main.d691d407.js"></script>
+            </head>
+
+    <body>
+    <header class="header">
+    <div class="header__container">
+        <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="./">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+    </div>
+</header>
+
+        <header class="welcome anchor--disable">
+        <div class="welcome__intro">
+            <div class="container">
+                <div class="wrapper wrapper--small">
+                    <div class="grid">
+                        <div class="welcome__logo">
+                            <svg xmlns="http://www.w3.org/2000/svg" width="320" height="476.037" viewBox="0 0 320 476.037"><path fill="#584b4f" d="M320 406.195l-86.506-155.403c-2.67 1.365-5.377 2.67-8.123 3.908-22.3 10.07-53.39 12.457-69.61 12.995l72.393 138.5H320z"/><path fill="#4F5B93" d="M255.323 36.793C231.543 12.263 199.5 0 159.193 0h-67.32C58.783 0 35.197 6.942 21.13 20.82 7.055 34.71.022 56.86.022 87.285v318.91h79.3V106.68c0-23.957 11.783-35.94 35.37-35.94h39.364c17.49 0 31.47 5.33 41.932 15.972 10.457 10.652 15.688 24.63 15.688 41.935 0 17.31-5.42 31.763-16.257 43.356-10.844 11.604-24.633 17.398-41.365 17.398h-16.168v-14.664L92.395 222.44l45.493 47.703v-14.54c8.476.042 50.736-.412 78.925-13.144 20.28-9.155 38.51-21.393 52.77-41.36s21.395-43.646 21.395-71.028c0-37.656-11.894-68.744-35.655-93.28z"/><path d="M30.717 452.275c1.628-2.276 2.442-4.976 2.442-8.096 0-4.294-1.36-7.835-4.068-10.63-2.71-2.8-6.36-4.197-10.953-4.197h-7.674c-3.772 0-6.458.794-8.063 2.377C.803 433.31 0 435.838 0 439.306v36.342h9.038v-17.165h6.5l9.037 17.165h10.47l-10.34-18.66c2.383-.865 4.388-2.436 6.012-4.712zm-8.45-3.318c-1.235 1.323-2.808 1.98-4.712 1.98H9.038v-9.426c0-2.726 1.343-4.094 4.03-4.094h4.487c1.992 0 3.586.607 4.777 1.822 1.192 1.215 1.79 2.808 1.79 4.78 0 1.973-.62 3.623-1.855 4.94zm20.253 14.466c0 4.552 1.05 7.73 3.152 9.527 2.104 1.8 5.755 2.696 10.957 2.696h16.383v-8.062H57.28c-2.17 0-3.663-.346-4.488-1.04-.826-.692-1.235-1.95-1.235-3.77v-6.438h14.367l.652-8.062h-15.02v-10.86h21.458v-8.06H42.52v34.07zm57.7-33.285c-.714-.52-1.657-.783-2.828-.783-1.17 0-2.156.284-2.957.847-.803.563-1.53 1.583-2.18 3.057l-14.822 42.387h9.428l2.537-7.994h15.54l2.6 7.994h9.427l-14.824-42.39c-.565-1.564-1.205-2.6-1.92-3.12zm-8.55 29.906l5.722-18.335 5.463 18.333H91.67zm52.826 5.43c-1.15 1.67-3.23 2.5-6.242 2.5-3.015 0-5.233-.91-6.665-2.728-1.388-1.822-2.083-5.226-2.083-10.207v-4.035c0-1.774.045-3.184.13-4.223.176-3.254.78-5.55 1.823-6.895 1.473-1.905 3.727-2.86 6.762-2.86 2.6 0 4.51.65 5.722 1.95 1.212 1.303 2.06 3.23 2.535 5.787h8.45c0-5.114-1.55-9.028-4.648-11.735-3.1-2.71-7.12-4.065-12.06-4.065-3.383 0-6.265.562-8.647 1.693-6.068 2.77-9.103 9.64-9.103 20.607v3.9c0 13.917 5.917 20.87 17.75 20.87 5.374 0 9.535-1.583 12.482-4.747 2.95-3.162 4.418-7.694 4.418-13.59h-8.386c-.344 3.514-1.095 6.105-2.24 7.774zm14.598-36.12v8.062h12.353v38.23h9.037v-38.23h12.412v-8.062" fill="#584b4f"/><path d="M217.867 429.354h-17.945v46.292h9.043V460.82h8.902c4.853 0 8.608-1.33 11.276-3.996 2.67-2.666 4-6.577 4-11.733s-1.33-9.07-4-11.733c-2.668-2.667-6.424-4.002-11.276-4.002zm4.518 21.584c-1.147 1.172-2.803 1.76-4.976 1.76h-8.447v-15.282h8.445c4.462 0 6.696 2.56 6.696 7.675 0 2.73-.573 4.68-1.72 5.85zm43.725-2.01h-16.97v-19.574h-9.044v46.292h9.043v-18.72h16.97v18.72h9.034v-46.292h-9.036m48.404 4c-2.67-2.665-6.43-4-11.282-4h-17.944v46.29h9.042v-14.823h8.902c4.853 0 8.613-1.33 11.282-3.995s3.995-6.577 3.995-11.733-1.326-9.07-3.995-11.735zm-6.763 17.584c-1.15 1.172-2.81 1.76-4.977 1.76h-8.446v-15.282h8.446c4.462 0 6.702 2.56 6.702 7.675 0 2.73-.58 4.68-1.727 5.85z" fill="#4F5B93"/></svg>
+                        </div>
+                        <main class="welcome__content">
+                            <h1>Event-driven, non-blocking I/O with PHP</h1>
+                            <p>
+                                ReactPHP is a low-level library for event-driven programming in PHP. At its core is an event loop, on top of which it provides low-level utilities, such as: Streams abstraction, async DNS resolver, network client/server, HTTP client/server and interaction with processes. Third-party libraries can use these components to create async network clients/servers and more.
+                            </p>
+
+                            <ul class="links">
+                                <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                                <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                                <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                            </ul>
+                        </main>
+                    </div>
+                </div>
+            </div>
+        </div>
+
+        <div class="container">
+            <div class="wrapper wrapper--small">
+                <div class="welcome__example">
+            <div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$loop</span> <span class="pl-k">=</span> <span class="pl-c1">React\EventLoop\</span><span class="pl-c1">Factory</span><span class="pl-k">::</span>create();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Http\</span><span class="pl-c1">Server</span>(<span class="pl-k">function</span> (<span class="pl-c1">Psr\Http\Message\</span><span class="pl-c1">ServerRequestInterface</span> <span class="pl-smi">$request</span>) {</span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">React\Http\</span><span class="pl-c1">Response</span>(</span>
+<span class="pl-s1">        <span class="pl-c1">200</span>,</span>
+<span class="pl-s1">        <span class="pl-c1">array</span>(<span class="pl-s"><span class="pl-pds">'</span>Content-Type<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>text/plain<span class="pl-pds">'</span></span>),</span>
+<span class="pl-s1">        <span class="pl-s"><span class="pl-pds">"</span>Hello World!<span class="pl-cce">\n</span><span class="pl-pds">"</span></span></span>
+<span class="pl-s1">    );</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$socket</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Server</span>(<span class="pl-c1">8080</span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>listen(<span class="pl-smi">$socket</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">"</span>Server running at http://127.0.0.1:8080<span class="pl-cce">\n</span><span class="pl-pds">"</span></span>;</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>run();</span></pre></div>
+                    <p class="center">This simple web server written in ReactPHP responds with "Hello World" for every request.</p>
+                </div>
+            </div>
+        </div>
+    </header>
+
+    <hr>
+
+    <div class="container">
+        <div class="wrapper wrapper--small">
+            <div class="grid grid--2cols">
+                <div>
+                    <p>
+                        ReactPHP is production ready and battle-tested with millions of installations from all kinds of projects around the world.
+                        </p>
+                    <p>
+                        Its event-driven architecture makes it a perfect fit for efficient network servers and clients handling hundreds or thousands of concurrent connections, long-running applications and many other forms of cooperative multitasking with non-blocking I/O operations.
+                    </p>
+                    <p>
+                        What makes ReactPHP special is its vivid ecosystem with hundreds of third-party libraries allowing you to integrate with many existing systems, such as common network services, database systems and other third-party APIs.
+                    </p>
+                    <p>
+                        ReactPHP is non-blocking by default. Use workers for blocking I/O.
+                    </p>
+                    <p>
+                        The event loop is based on the reactor pattern (hence the name) and strongly inspired by libraries such as EventMachine (Ruby), Twisted (Python) and Node.js (V8).
+                    </p>
+                </div>
+
+                <ul>
+                    <li><strong>Production ready</strong> and battle-tested.</li>
+                    <li><strong>Rock-solid</strong> with stable long-term support (LTS) releases.</li>
+                    <li><strong>Requires no extensions</strong> and runs on any platform - no excuses!</li>
+                    <li>Takes advantage of <strong>optional extensions</strong> to get better performance when available.</li>
+                    <li><strong>Highly recommends latest version of PHP 7+</strong> for best performance and support.</li>
+                    <li><strong>Supports legacy PHP 5.3+ and HHVM</strong> for maximum compatibility.</li>
+                    <li><strong>Well designed</strong> and <strong>reusable components</strong>.</li>
+                    <li><strong>Decoupled parts</strong> so they can be replaced by alternate implementations.</li>
+                    <li>Carefully <strong>tested</strong> (unit &amp; functional).</li>
+                    <li>Promotes <strong>standard PSRs</strong> where possible for maximum interoperability.</li>
+                    <li>Aims to be <strong>technology neutral</strong>, so you can use your preferred application stack.</li>
+                    <li>Small <strong>core team of professionals</strong> supported by <strong>large network</strong> of outside contributors.</li>
+                </ul>
+            </div>
+        </div>
+    </div>
+
+    <hr>
+
+    <div class="container center">
+        <div class="wrapper wrapper--narrow">
+            <form>
+                <input type="search" class="searchbox searchbox--large" data-docsearch placeholder="Search documentation...">
+            </form>
+        </div>
+    </div>
+
+    <hr>
+
+    <div class="container center">
+        <div class="wrapper wrapper--small">
+            <h2>
+                <a id="core-components" class="anchor" href="#core-components" aria-hidden="true">
+                    <span aria-hidden="true" class="octicon octicon-link"></span>
+                </a>
+                Core Components
+            </h2>
+
+            <div class="grid grid--3cols">
+                            <a href="event-loop/" class="box">
+                    <div class="box__content">
+                        <h3>EventLoop</h3>
+
+                        <p>ReactPHP&#039;s core reactor event loop that libraries can use for evented I/O.</p>
+                    </div>
+                    <p class="box__link">
+                        <i class="icon-book" aria-hidden="true"></i>
+                        Read the documentation
+                    </p>
+                </a>
+                            <a href="stream/" class="box">
+                    <div class="box__content">
+                        <h3>Stream</h3>
+
+                        <p>Event-driven readable and writable streams for non-blocking I/O in ReactPHP.</p>
+                    </div>
+                    <p class="box__link">
+                        <i class="icon-book" aria-hidden="true"></i>
+                        Read the documentation
+                    </p>
+                </a>
+                            <a href="promise/" class="box">
+                    <div class="box__content">
+                        <h3>Promise</h3>
+
+                        <p>Promises/A implementation for PHP.</p>
+                    </div>
+                    <p class="box__link">
+                        <i class="icon-book" aria-hidden="true"></i>
+                        Read the documentation
+                    </p>
+                </a>
+                        </div>
+        </div>
+    </div>
+    <div class="container center">
+        <div class="wrapper wrapper--small">
+            <h2>
+                <a id="network-components" class="anchor" href="#network-components" aria-hidden="true">
+                    <span aria-hidden="true" class="octicon octicon-link"></span>
+                </a>
+                Network Components
+            </h2>
+
+            <div class="grid grid--2cols">
+                            <a href="socket/" class="box">
+                    <div class="box__content">
+                        <h3>Socket</h3>
+
+                        <p>Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP.</p>
+                    </div>
+                    <p class="box__link">
+                        <i class="icon-book" aria-hidden="true"></i>
+                        Read the documentation
+                    </p>
+                </a>
+                            <a href="datagram/" class="box">
+                    <div class="box__content">
+                        <h3>Datagram</h3>
+
+                        <p>Event-driven UDP client and server sockets for ReactPHP.</p>
+                    </div>
+                    <p class="box__link">
+                        <i class="icon-book" aria-hidden="true"></i>
+                        Read the documentation
+                    </p>
+                </a>
+                        </div>
+        </div>
+    </div>
+    <div class="container center">
+        <div class="wrapper wrapper--small">
+            <h2>
+                <a id="protocol-components" class="anchor" href="#protocol-components" aria-hidden="true">
+                    <span aria-hidden="true" class="octicon octicon-link"></span>
+                </a>
+                Protocol Components
+            </h2>
+
+            <div class="grid grid--3cols">
+                            <a href="http/" class="box">
+                    <div class="box__content">
+                        <h3>HTTP</h3>
+
+                        <p>Event-driven, streaming plaintext HTTP and secure HTTPS server for ReactPHP.</p>
+                    </div>
+                    <p class="box__link">
+                        <i class="icon-book" aria-hidden="true"></i>
+                        Read the documentation
+                    </p>
+                </a>
+                            <a href="http-client/" class="box">
+                    <div class="box__content">
+                        <h3>HTTPClient</h3>
+
+                        <p>Event-driven, streaming HTTP client for ReactPHP.</p>
+                    </div>
+                    <p class="box__link">
+                        <i class="icon-book" aria-hidden="true"></i>
+                        Read the documentation
+                    </p>
+                </a>
+                            <a href="dns/" class="box">
+                    <div class="box__content">
+                        <h3>DNS</h3>
+
+                        <p>Async DNS resolver for ReactPHP.</p>
+                    </div>
+                    <p class="box__link">
+                        <i class="icon-book" aria-hidden="true"></i>
+                        Read the documentation
+                    </p>
+                </a>
+                        </div>
+        </div>
+    </div>
+    <div class="container center">
+        <div class="wrapper wrapper--small">
+            <h2>
+                <a id="utility-components" class="anchor" href="#utility-components" aria-hidden="true">
+                    <span aria-hidden="true" class="octicon octicon-link"></span>
+                </a>
+                Utility Components
+            </h2>
+
+            <div class="grid grid--2cols">
+                            <a href="cache/" class="box">
+                    <div class="box__content">
+                        <h3>Cache</h3>
+
+                        <p>Async, Promise-based cache interface for ReactPHP.</p>
+                    </div>
+                    <p class="box__link">
+                        <i class="icon-book" aria-hidden="true"></i>
+                        Read the documentation
+                    </p>
+                </a>
+                            <a href="child-process/" class="box">
+                    <div class="box__content">
+                        <h3>ChildProcess</h3>
+
+                        <p>Event-driven library for executing child processes with ReactPHP.</p>
+                    </div>
+                    <p class="box__link">
+                        <i class="icon-book" aria-hidden="true"></i>
+                        Read the documentation
+                    </p>
+                </a>
+                            <a href="promise-timer/" class="box">
+                    <div class="box__content">
+                        <h3>PromiseTimer</h3>
+
+                        <p>A trivial implementation of timeouts for Promises, built on top of ReactPHP.</p>
+                    </div>
+                    <p class="box__link">
+                        <i class="icon-book" aria-hidden="true"></i>
+                        Read the documentation
+                    </p>
+                </a>
+                            <a href="promise-stream/" class="box">
+                    <div class="box__content">
+                        <h3>PromiseStream</h3>
+
+                        <p>The missing link between Promise-land and Stream-land for ReactPHP.</p>
+                    </div>
+                    <p class="box__link">
+                        <i class="icon-book" aria-hidden="true"></i>
+                        Read the documentation
+                    </p>
+                </a>
+                        </div>
+        </div>
+    </div>
+
+    <hr>
+
+    <div class="container center">
+        <div class="wrapper wrapper--small">
+            <h2>
+                <a id="built-with-reactphp" class="anchor" href="#built-with-reactphp" aria-hidden="true">
+                    <span aria-hidden="true" class="octicon octicon-link"></span>
+                </a>
+                Built with ReactPHP
+            </h2>
+
+            <div class="grid grid--3cols">
+                            <a href="https://github.com/voryx/Thruway" class="box">
+                    <div class="box__content">
+                        <h3>Thruway</h3>
+
+                        <p>PHP Client and Router Library for Autobahn and WAMP (Web Application Messaging Protocol) for Real-Time Application Messaging</p>
+                    </div>
+                    <p class="box__link">
+                        <i class="icon-github" aria-hidden="true"></i>
+                        voryx/Thruway
+                    </p>
+                </a>
+                            <a href="https://github.com/php-pm/php-pm" class="box">
+                    <div class="box__content">
+                        <h3>PPM - PHP Process Manager</h3>
+
+                        <p>PPM is a process manager, supercharger and load balancer for modern PHP applications.</p>
+                    </div>
+                    <p class="box__link">
+                        <i class="icon-github" aria-hidden="true"></i>
+                        php-pm/php-pm
+                    </p>
+                </a>
+                            <a href="https://github.com/jolicode/php-ar-drone" class="box">
+                    <div class="box__content">
+                        <h3>php-ar-drone</h3>
+
+                        <p>🚁 Port of node-ar-drone which allows user to control a Parrot AR Drone over PHP</p>
+                    </div>
+                    <p class="box__link">
+                        <i class="icon-github" aria-hidden="true"></i>
+                        jolicode/php-ar-drone
+                    </p>
+                </a>
+                            <a href="https://github.com/ratchetphp/Ratchet" class="box">
+                    <div class="box__content">
+                        <h3>Ratchet</h3>
+
+                        <p>Asynchronous WebSocket server</p>
+                    </div>
+                    <p class="box__link">
+                        <i class="icon-github" aria-hidden="true"></i>
+                        ratchetphp/Ratchet
+                    </p>
+                </a>
+                            <a href="https://github.com/nrk/predis-async" class="box">
+                    <div class="box__content">
+                        <h3>Predis\Async</h3>
+
+                        <p>Asynchronous PHP client library for Redis built on top of ReactPHP</p>
+                    </div>
+                    <p class="box__link">
+                        <i class="icon-github" aria-hidden="true"></i>
+                        nrk/predis-async
+                    </p>
+                </a>
+                            <a href="https://github.com/clue/php-redis-server" class="box">
+                    <div class="box__content">
+                        <h3>clue/redis-server</h3>
+
+                        <p>A Redis server implementation in pure PHP</p>
+                    </div>
+                    <p class="box__link">
+                        <i class="icon-github" aria-hidden="true"></i>
+                        clue/redis-server
+                    </p>
+                </a>
+                        </div>
+
+            <p>
+                <a href="https://github.com/reactphp/react/wiki/Users">
+                    And many more on our wiki page &raquo;
+                </a>
+            </p>
+        </div>
+    </div>
+
+    <hr>
+
+    <div class="container center">
+        <div class="wrapper wrapper--small">
+            <h2>
+                <a id="articles" class="anchor" href="#articles" aria-hidden="true">
+                    <span aria-hidden="true" class="octicon octicon-link"></span>
+                </a>
+                Articles
+            </h2>
+
+            <div class="grid grid--2cols">
+                            <a href="http://sergeyzhuk.me/reactphp-series" class="box">
+                    <div class="box__content">
+                        <h3>Sergey Zhuk</h3>
+
+                        <p>A series of articles covering ReactPHP: from the basics to the real application examples.</p>
+                    </div>
+                    <p class="box__link">
+                        <i class="icon-blog" aria-hidden="true"></i> sergeyzhuk.me
+                    </p>
+                </a>
+                            <a href="http://blog.wyrihaximus.net/categories/reactphp-series/" class="box">
+                    <div class="box__content">
+                        <h3>Cees-Jan Kiewiet</h3>
+
+                        <p>Blog series about several ReactPHP components and how they work.</p>
+                    </div>
+                    <p class="box__link">
+                        <i class="icon-blog" aria-hidden="true"></i> blog.wyrihaximus.net
+                    </p>
+                </a>
+                            <a href="https://gnugat.github.io/2016/04/13/super-speed-sf-react-php.html" class="box">
+                    <div class="box__content">
+                        <h3>Loïc Faugeron</h3>
+
+                        <p>Super Speed Symfony - ReactPHP.</p>
+                    </div>
+                    <p class="box__link">
+                        <i class="icon-blog" aria-hidden="true"></i> gnugat.github.io
+                    </p>
+                </a>
+                            <a href="http://marcjschmidt.de/blog/2014/02/08/php-high-performance.html" class="box">
+                    <div class="box__content">
+                        <h3>Marc J. Schmidt</h3>
+
+                        <p>Bring High Performance Into Your PHP App (with ReactPHP).</p>
+                    </div>
+                    <p class="box__link">
+                        <i class="icon-blog" aria-hidden="true"></i> marcjschmidt.de
+                    </p>
+                </a>
+                        </div>
+        </div>
+    </div>
+
+    <hr>
+
+    <div class="container center">
+        <div class="wrapper wrapper--medium">
+            <h2>
+                <a id="talks" class="anchor" href="#talks" aria-hidden="true">
+                    <span aria-hidden="true" class="octicon octicon-link"></span>
+                </a>
+                Talks
+            </h2>
+
+            <div class="grid grid--3cols">
+                            <div class="box">
+                    <div class="box__content">
+                        <div class="iframe">
+                            <iframe width="854" height="480" src="https://www.youtube-nocookie.com/embed/-5ZdGUvOqx4" frameborder="0" allowfullscreen></iframe>
+                        </div>
+                    </div>
+                    <a href="https://www.youtube.com/watch?v=-5ZdGUvOqx4" class="box__link">
+                        <i class="icon-youtube" aria-hidden="true"></i> youtube.com
+                    </a>
+                </div>
+                            <div class="box">
+                    <div class="box__content">
+                        <div class="iframe">
+                            <iframe width="854" height="480" src="https://www.youtube-nocookie.com/embed/s6xrnYae1FU" frameborder="0" allowfullscreen></iframe>
+                        </div>
+                    </div>
+                    <a href="https://www.youtube.com/watch?v=s6xrnYae1FU" class="box__link">
+                        <i class="icon-youtube" aria-hidden="true"></i> youtube.com
+                    </a>
+                </div>
+                            <div class="box">
+                    <div class="box__content">
+                        <div class="iframe">
+                            <iframe width="854" height="480" src="https://www.youtube-nocookie.com/embed/MWNcItWuKpI" frameborder="0" allowfullscreen></iframe>
+                        </div>
+                    </div>
+                    <a href="https://www.youtube.com/watch?v=MWNcItWuKpI" class="box__link">
+                        <i class="icon-youtube" aria-hidden="true"></i> youtube.com
+                    </a>
+                </div>
+                        </div>
+        </div>
+    </div>
+
+    <hr>
+
+    <div class="welcome__team container">
+        <div class="wrapper wrapper--small center">
+            <h2>
+                <a id="team" class="anchor" href="#team" aria-hidden="true">
+                    <span aria-hidden="true" class="octicon octicon-link"></span>
+                </a>
+                Get to know the people behind ReactPHP
+            </h2>
+
+            <p>
+                We're a small core team of professionals. We help manage, maintain and steer the project.<br />
+                But ReactPHP isn't <em>just us</em>.
+                We're proudly supported by a large network of outside contributors from all over the world.
+            </p>
+        </div>
+
+        <div class="wrapper wrapper--small">
+            <div class="grid grid--4cols">
+                <div class="center">
+                    <a href="https://github.com/clue"><img src="https://github.com/clue.png" alt="Christian Lück"></a>
+                    <h3>Christian Lück</h3>
+                    <ul class="links">
+                        <li><a href="https://github.com/clue" title="@clue on GitHub"><i class="icon-github" aria-hidden="true"></i><span class="visually-hidden">@clue on GitHub</span></a></li>
+                        <li><a href="https://twitter.com/another_clue" title="@another_clue on Twitter"><i class="icon-twitter" aria-hidden="true"></i><span class="visually-hidden">@another_clue on Twitter</span></a></li>
+                        <li><a href="https://github.com/sponsors/clue" title="Sponsor @clue on GitHub Sponsors">❤️<span class="visually-hidden">Sponsor @clue on GitHub Sponsors</span></a></li>
+                    </ul>
+                </div>
+                <div class="center">
+                    <a href="https://github.com/WyriHaximus"><img src="https://github.com/WyriHaximus.png" alt="Cees-Jan Kiewiet"></a>
+                    <h3>Cees-Jan Kiewiet</h3>
+                    <ul class="links">
+                        <li><a href="https://github.com/WyriHaximus" title="@WyriHaximus on GitHub"><i class="icon-github" aria-hidden="true"></i><span class="visually-hidden">@WyriHaximus on GitHub</span></a></li>
+                        <li><a href="https://twitter.com/WyriHaximus" title="@WyriHaximus on Twitter"><i class="icon-twitter" aria-hidden="true"></i><span class="visually-hidden">@WyriHaximus on Twitter</span></a></li>
+                        <li><a href="https://github.com/sponsors/WyriHaximus" title="Sponsor @WyriHaximus on GitHub Sponsors">❤️<span class="visually-hidden">Sponsor @WyriHaximus on GitHub Sponsors</span></a></li>
+                    </ul>
+                </div>
+                <div class="center">
+                    <a href="https://github.com/jsor"><img src="https://github.com/jsor.png" alt="Jan Sorgalla"></a>
+                    <h3>Jan Sorgalla</h3>
+                    <ul class="links">
+                        <li><a href="https://github.com/jsor" title="@jsor on GitHub"><i class="icon-github" aria-hidden="true"></i><span class="visually-hidden">@jsor on GitHub</span></a></li>
+                        <li><a href="https://twitter.com/jansor" title="@jansor on Twitter"><i class="icon-twitter" aria-hidden="true"></i><span class="visually-hidden">@jansor on Twitter</span></a></li>
+                    </ul>
+                </div>
+                <div class="center">
+                    <a href="https://github.com/cboden"><img src="https://github.com/cboden.png" alt="Chris Boden"></a>
+                    <h3>Chris Boden</h3>
+                    <ul class="links">
+                        <li><a href="https://github.com/cboden" title="@cboden on GitHub"><i class="icon-github" aria-hidden="true"></i><span class="visually-hidden">@cboden on GitHub</span></a></li>
+                        <li><a href="https://twitter.com/boden_c" title="@boden_c on Twitter"><i class="icon-twitter" aria-hidden="true"></i><span class="visually-hidden">@boden_c on Twitter</span></a></li>
+                    </ul>
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <hr>
+
+    <div class="container">
+        <div class="wrapper wrapper--small center">
+            <h2>
+                <a id="support" class="anchor" href="#support" aria-hidden="true">
+                    <span aria-hidden="true" class="octicon octicon-link"></span>
+                </a>
+                Support
+            </h2>
+
+            <p>
+                <strong>Do you have a question and need help with ReactPHP?<br> Don't worry, we're here to help!</strong>
+            </p>
+        </div>
+
+        <div class="wrapper wrapper--small">
+            <div class="grid grid--2cols">
+                <div>
+                    <p>
+                        As a first step, check the elaborate documentation that comes with each component (see links to individual documentation for each component above).
+                        If you find your question is not answered within the documentation, there's a fair chance that it may be relevant to more people.
+                        Please do not hesitate to file your question as an issue in the relevant component so others can also participate.
+                    </p>
+                    <p>
+                        You can find our official channel at <code><a href="https://gitter.im/reactphp/reactphp">reactphp/reactphp</a></code> on <code>Gitter.im</code>.
+                        Many of us are available in this channel, so many questions get answered in a few minutes to some hours. We also use this channel to announce all new releases and ongoing development efforts.
+                    </p>
+                    <p>
+                        Also follow <a href="https://twitter.com/reactphp" rel="nofollow">@reactphp</a> on Twitter for updates. We use this mostly for noteworthy, bigger updates and to keep the community updated about ongoing development efforts.
+                        You can always use the <code>#reactphp</code> hashtag if you have anything to share!
+                    </p>
+                </div>
+                <div>
+                    <p>
+                        We're a very open project and we prefer public communication whenever possible, so that more people can participate and help getting the best solutions available.
+                        At the same time, we realize that some things are better addressed in private.
+                    </p>
+                    <p>
+                        Whether you just want to say <em>thank you</em>, want to report a security issue or  want to help sponsor a certain feature development, you can reach out to the core team in private by sending an email to <code>support@reactphp.org</code>.
+                        Please keep in mind that we're a small team of volunteers and do our best to support anybody reaching out.
+                    </p>
+                    <p>
+                        Do you want to support ReactPHP? Awesome! Let's start with letting the the world know why you think ReactPHP is awesome and try to help others getting on board!
+                        Send a tweet, write a blog post, give a talk at your local user group or conference or even write a book.
+                        There are many ways you can help. You can always reach out to us in private and help others in our support channels. Thank you!
+                    </p>
+                </div>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/manifest.json b/manifest.json
new file mode 100644
index 000000000..4a8175465
--- /dev/null
+++ b/manifest.json
@@ -0,0 +1,18 @@
+{
+    "name": "ReactPHP",
+    "icons": [
+        {
+            "src": "android-chrome-192x192.png",
+            "sizes": "192x192",
+            "type": "image/png"
+        },
+        {
+            "src": "android-chrome-512x512.png",
+            "sizes": "512x512",
+            "type": "image/png"
+        }
+    ],
+    "theme_color": "#f4f3f1",
+    "background_color": "#f4f3f1",
+    "display": "standalone"
+}
\ No newline at end of file
diff --git a/mstile-150x150.png b/mstile-150x150.png
new file mode 100644
index 0000000000000000000000000000000000000000..66faa94f4c6ad7f81fbfe91865b606b7c50c321e
GIT binary patch
diff --git a/og-image.png b/og-image.png
new file mode 100644
index 0000000000000000000000000000000000000000..d87b8a560f2dfc77b5741bfee8cd6dc4545b85f5
GIT binary patch
diff --git a/promise-stream/changelog.html b/promise-stream/changelog.html
new file mode 100644
index 000000000..086630fe8
--- /dev/null
+++ b/promise-stream/changelog.html
@@ -0,0 +1,564 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>PromiseStream: Changelog - ReactPHP</title>
+
+        <meta name="description" content="The missing link between Promise-land and Stream-land for ReactPHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+        <link href="https://github.com/reactphp/promise-stream/releases.atom" type="application/atom+xml" rel="alternate" title="PromiseStream Changelog">
+    </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                    <h1>PromiseStream Changelog</h1>
+
+    <ul class="toc">
+            <li><a href="#2019" title="Jump to year 2019 (1 release)">2019</a></li>
+            <li><a href="#2017" title="Jump to year 2017 (6 releases)">2017</a></li>
+        </ul>
+
+    <h2>
+        <a id="2019" class="anchor" href="#2019" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2019
+    </h2>
+
+    
+            <h3>
+        <a id="120-2019-07-03" class="anchor" href="#120-2019-07-03" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.2.0
+
+        <small>
+            (2019-07-03)
+            <a href="https://github.com/reactphp/promise-stream/releases/tag/v1.2.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Support unwrapping object streams by buffering original write chunks in array.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="374340356" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-stream/issues/15" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-stream/pull/15/hovercard" href="https://github.com/reactphp/promise-stream/pull/15">#15</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Clean up unneeded references for unwrapped streams when closing.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="463243741" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-stream/issues/18" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-stream/pull/18/hovercard" href="https://github.com/reactphp/promise-stream/pull/18">#18</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Writing to closed unwrapped stream should return false (backpressure).<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="463195512" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-stream/issues/17" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-stream/pull/17/hovercard" href="https://github.com/reactphp/promise-stream/pull/17">#17</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite to support PHPUnit 7, PHP 7.3 and fix incomplete test<br>
+and improve API documentation.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="459473596" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-stream/issues/16" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-stream/pull/16/hovercard" href="https://github.com/reactphp/promise-stream/pull/16">#16</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="463279094" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-stream/issues/19" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-stream/pull/19/hovercard" href="https://github.com/reactphp/promise-stream/pull/19">#19</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2017" class="anchor" href="#2017" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2017
+    </h2>
+
+    
+            <h3>
+        <a id="111-2017-12-22" class="anchor" href="#111-2017-12-22" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.1.1
+
+        <small>
+            (2017-12-22)
+            <a href="https://github.com/reactphp/promise-stream/releases/tag/v1.1.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Fix: Fix <code>all()</code> to assume null values if no event data is passed<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="284110001" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-stream/issues/13" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-stream/pull/13/hovercard" href="https://github.com/reactphp/promise-stream/pull/13">#13</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by simplifying test bootstrapping logic via Composer and<br>
+add forward compatibility with PHPUnit 5 and PHPUnit 6 and<br>
+test against PHP 7.1 and 7.2<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="283879130" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-stream/issues/11" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-stream/pull/11/hovercard" href="https://github.com/reactphp/promise-stream/pull/11">#11</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="284103554" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-stream/issues/12" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-stream/pull/12/hovercard" href="https://github.com/reactphp/promise-stream/pull/12">#12</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278459247" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-stream/issues/9" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-stream/pull/9/hovercard" href="https://github.com/reactphp/promise-stream/pull/9">#9</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/carusogabriel/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/carusogabriel">@carusogabriel</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="110-2017-11-28" class="anchor" href="#110-2017-11-28" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.1.0
+
+        <small>
+            (2017-11-28)
+            <a href="https://github.com/reactphp/promise-stream/releases/tag/v1.1.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Reject <code>first()</code> when stream emits an error event<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="277334382" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-stream/issues/7" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-stream/pull/7/hovercard" href="https://github.com/reactphp/promise-stream/pull/7">#7</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Explicit <code>close()</code> of unwrapped stream should not emit <code>error</code> event<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="277338190" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-stream/issues/8" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-stream/pull/8/hovercard" href="https://github.com/reactphp/promise-stream/pull/8">#8</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Internal refactoring to simplify <code>buffer()</code> function<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="268077426" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-stream/issues/6" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-stream/pull/6/hovercard" href="https://github.com/reactphp/promise-stream/pull/6">#6</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/kelunik/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/kelunik">@kelunik</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="100-2017-10-24" class="anchor" href="#100-2017-10-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.0.0
+
+        <small>
+            (2017-10-24)
+            <a href="https://github.com/reactphp/promise-stream/releases/tag/v1.0.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>First stable release, now following SemVer</li>
+</ul>
+<blockquote>
+<p>Contains no other changes, so it's actually fully compatible with the v0.1.2 release.</p>
+</blockquote>
+
+    <hr>
+    
+            <h3>
+        <a id="012-2017-10-18" class="anchor" href="#012-2017-10-18" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.1.2
+
+        <small>
+            (2017-10-18)
+            <a href="https://github.com/reactphp/promise-stream/releases/tag/v0.1.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Optional maximum buffer length for <code>buffer()</code> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="264363772" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-stream/issues/3" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-stream/pull/3/hovercard" href="https://github.com/reactphp/promise-stream/pull/3">#3</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</li>
+<li>Improvement: Readme improvements (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="266132762" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-stream/issues/5" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-stream/pull/5/hovercard" href="https://github.com/reactphp/promise-stream/pull/5">#5</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="011-2017-05-15" class="anchor" href="#011-2017-05-15" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.1.1
+
+        <small>
+            (2017-05-15)
+            <a href="https://github.com/reactphp/promise-stream/releases/tag/v0.1.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: Forward compatibility with stream 1.0, 0.7, 0.6, and 0.5 (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="228503163" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-stream/issues/2" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-stream/pull/2/hovercard" href="https://github.com/reactphp/promise-stream/pull/2">#2</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="010-2017-05-10" class="anchor" href="#010-2017-05-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.1.0
+
+        <small>
+            (2017-05-10)
+            <a href="https://github.com/reactphp/promise-stream/releases/tag/v0.1.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Initial release, adapted from <a href="https://github.com/clue/php-promise-stream-react"><code>clue/promise-stream-react</code></a></li>
+</ul>
+
+    <hr>
+    
+    <ul class="links">
+        <li>
+            <a href="https://github.com/reactphp/promise-stream/releases.atom">
+                <i class="icon-feed" aria-hidden="true"></i>
+                Subscribe to the Changelog feed
+            </a>
+        </li>
+    </ul>
+                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../promise-stream/">PromiseStream</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v1.2.0
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/promise-stream#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/promise-stream/tree/v1.1.1#readme" class="version-selector__version">
+                                                    v1.1.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-stream/tree/v1.1.0#readme" class="version-selector__version">
+                                                    v1.1.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-stream/tree/v1.0.0#readme" class="version-selector__version">
+                                                    v1.0.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-stream/tree/v0.1.2#readme" class="version-selector__version">
+                                                    v0.1.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-stream/tree/v0.1.1#readme" class="version-selector__version">
+                                                    v0.1.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-stream/tree/v0.1.0#readme" class="version-selector__version">
+                                                    v0.1.0
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/promise-stream">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../promise-stream/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../promise-stream/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/promise-stream:^1.2.0</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (37 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (20 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (9 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/carusogabriel">
+                                    <img src="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=80 2x" alt="carusogabriel" title="carusogabriel (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/kelunik">
+                                    <img src="https://avatars0.githubusercontent.com/u/2743004?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/2743004?v=4&amp;s=80 2x" alt="kelunik" title="kelunik (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-promise-stream-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-promise-stream-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,2 6,3 12,2 18,2 24,5 30,1 36,1 42,1 48,1 54,1 60,1 66,1 72,1 78,1 84,1 90,1 96,1 102,1 108,1 114,1 120,1 126,1 132,1 138,1 144,1 150,1 156,2 162,2 168,1 174,1 180,1 186,1 192,1 198,1 204,1 210,1 216,1 222,1 228,1 234,1 240,1 246,1 252,1 258,1 264,1 270,1 276,1 282,1 288,1 294,1 300,1 306,1" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-promise-stream-participation-gradient);mask:url(#reactphp-promise-stream-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/promise-stream/index.html b/promise-stream/index.html
new file mode 100644
index 000000000..8343b2e25
--- /dev/null
+++ b/promise-stream/index.html
@@ -0,0 +1,568 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>PromiseStream: 
+PromiseStream - ReactPHP</title>
+
+        <meta name="description" content="The missing link between Promise-land and Stream-land for ReactPHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+            </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                                    <h1>PromiseStream</h1>
+
+                    
+<p><a href="https://travis-ci.org/reactphp/promise-stream" rel="nofollow"><img src="https://camo.githubusercontent.com/dcf080a0d77a420f513acef3463e91c3c4c2104e/68747470733a2f2f7472617669732d63692e6f72672f72656163747068702f70726f6d6973652d73747265616d2e7376673f6272616e63683d6d6173746572" alt="Build Status" data-canonical-src="https://travis-ci.org/reactphp/promise-stream.svg?branch=master" style="max-width:100%;"></a></p>
+<p>The missing link between Promise-land and Stream-land
+for <a href="https://reactphp.org/" rel="nofollow">ReactPHP</a>.</p>
+<p><strong>Table of Contents</strong></p>
+<ul>
+<li>
+<a href="#usage">Usage</a>
+<ul>
+<li><a href="#buffer">buffer()</a></li>
+<li><a href="#first">first()</a></li>
+<li><a href="#all">all()</a></li>
+<li><a href="#unwrapreadable">unwrapReadable()</a></li>
+<li><a href="#unwrapwritable">unwrapWritable()</a></li>
+</ul>
+</li>
+<li><a href="#install">Install</a></li>
+<li><a href="#tests">Tests</a></li>
+<li><a href="#license">License</a></li>
+</ul>
+<h2>
+<a id="usage" class="anchor" href="#usage" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Usage</h2>
+<p>This lightweight library consists only of a few simple functions.
+All functions reside under the <code>React\Promise\Stream</code> namespace.</p>
+<p>The below examples assume you use an import statement similar to this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-k">use</span> <span class="pl-c1">React\Promise\Stream</span>;</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c1">Stream\</span>buffer(…);</span></pre></div>
+<p>Alternatively, you can also refer to them with their fully-qualified name:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c1">\React\Promise\Stream\</span>buffer(…);</span></pre></div>
+<h3>
+<a id="buffer" class="anchor" href="#buffer" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>buffer()</h3>
+<p>The <code>buffer(ReadableStreamInterface&lt;string&gt; $stream, ?int $maxLength = null): PromiseInterface&lt;string,Exception&gt;</code> function can be used to
+create a <code>Promise</code> which resolves with the stream data buffer.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> accessSomeJsonStream();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c1">Stream\</span>buffer(<span class="pl-smi">$stream</span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$contents</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">var_dump</span>(<span class="pl-c1">json_decode</span>(<span class="pl-smi">$contents</span>));</span>
+<span class="pl-s1">});</span></pre></div>
+<p>The promise will resolve with all data chunks concatenated once the stream closes.</p>
+<p>The promise will resolve with an empty string if the stream is already closed.</p>
+<p>The promise will reject if the stream emits an error.</p>
+<p>The promise will reject if it is cancelled.</p>
+<p>The optional <code>$maxLength</code> argument defaults to no limit. In case the maximum
+length is given and the stream emits more data before the end, the promise
+will be rejected with an <code>\OverflowException</code>.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> accessSomeToLargeStream();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c1">Stream\</span>buffer(<span class="pl-smi">$stream</span>, <span class="pl-c1">1024</span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$contents</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">var_dump</span>(<span class="pl-c1">json_decode</span>(<span class="pl-smi">$contents</span>));</span>
+<span class="pl-s1">}, <span class="pl-k">function</span> (<span class="pl-smi">$error</span>) {</span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> Reaching here when the stream buffer goes above the max size,</span></span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> in this example that is 1024 bytes,</span></span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> or when the stream emits an error.</span></span>
+<span class="pl-s1">});</span></pre></div>
+<h3>
+<a id="first" class="anchor" href="#first" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>first()</h3>
+<p>The <code>first(ReadableStreamInterface|WritableStreamInterface $stream, string $event = 'data'): PromiseInterface&lt;mixed,Exception&gt;</code> function can be used to
+create a <code>Promise</code> which resolves once the given event triggers for the first time.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> accessSomeJsonStream();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c1">Stream\</span>first(<span class="pl-smi">$stream</span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$chunk</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>The first chunk arrived: <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$chunk</span>;</span>
+<span class="pl-s1">});</span></pre></div>
+<p>The promise will resolve with whatever the first event emitted or <code>null</code> if the
+event does not pass any data.
+If you do not pass a custom event name, then it will wait for the first "data"
+event and resolve with a string containing the first data chunk.</p>
+<p>The promise will reject if the stream emits an error – unless you're waiting for
+the "error" event, in which case it will resolve.</p>
+<p>The promise will reject once the stream closes – unless you're waiting for the
+"close" event, in which case it will resolve.</p>
+<p>The promise will reject if the stream is already closed.</p>
+<p>The promise will reject if it is cancelled.</p>
+<h3>
+<a id="all" class="anchor" href="#all" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>all()</h3>
+<p>The <code>all(ReadableStreamInterface|WritableStreamInterface $stream, string $event = 'data'): PromiseInterface&lt;array,Exception&gt;</code> function can be used to
+create a <code>Promise</code> which resolves with an array of all the event data.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> accessSomeJsonStream();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c1">Stream\</span>all(<span class="pl-smi">$stream</span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$chunks</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>The stream consists of <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-c1">count</span>(<span class="pl-smi">$chunks</span>) <span class="pl-k">.</span> <span class="pl-s"><span class="pl-pds">'</span> chunk(s)<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1">});</span></pre></div>
+<p>The promise will resolve with an array of whatever all events emitted or <code>null</code> if the
+events do not pass any data.
+If you do not pass a custom event name, then it will wait for all the "data"
+events and resolve with an array containing all the data chunks.</p>
+<p>The promise will resolve with an array once the stream closes.</p>
+<p>The promise will resolve with an empty array if the stream is already closed.</p>
+<p>The promise will reject if the stream emits an error.</p>
+<p>The promise will reject if it is cancelled.</p>
+<h3>
+<a id="unwrapreadable" class="anchor" href="#unwrapreadable" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>unwrapReadable()</h3>
+<p>The <code>unwrapReadable(PromiseInterface&lt;ReadableStreamInterface,Exception&gt; $promise): ReadableStreamInterface</code> function can be used to
+unwrap a <code>Promise</code> which resolves with a <code>ReadableStreamInterface</code>.</p>
+<p>This function returns a readable stream instance (implementing <code>ReadableStreamInterface</code>)
+right away which acts as a proxy for the future promise resolution.
+Once the given Promise resolves with a <code>ReadableStreamInterface</code>, its data will
+be piped to the output stream.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span>$promise = someFunctionWhichResolvesWithAStream();</span></span>
+<span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> startDownloadStream(<span class="pl-smi">$uri</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-c1">Stream\</span>unwrapReadable(<span class="pl-smi">$promise</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>data<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-smi">$data</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-smi">$data</span>;</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>end<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> () {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>DONE<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1">});</span></pre></div>
+<p>If the given promise is either rejected or fulfilled with anything but an
+instance of <code>ReadableStreamInterface</code>, then the output stream will emit
+an <code>error</code> event and close:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> startDownloadStream(<span class="pl-smi">$invalidUri</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-c1">Stream\</span>unwrapReadable(<span class="pl-smi">$promise</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>error<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-c1">Exception</span> <span class="pl-smi">$error</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>Error: <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$error</span><span class="pl-k">-&gt;</span>getMessage();</span>
+<span class="pl-s1">});</span></pre></div>
+<p>The given <code>$promise</code> SHOULD be pending, i.e. it SHOULD NOT be fulfilled or rejected
+at the time of invoking this function.
+If the given promise is already settled and does not resolve with an
+instance of <code>ReadableStreamInterface</code>, then you will not be able to receive
+the <code>error</code> event.</p>
+<p>You can <code>close()</code> the resulting stream at any time, which will either try to
+<code>cancel()</code> the pending promise or try to <code>close()</code> the underlying stream.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> startDownloadStream(<span class="pl-smi">$uri</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-c1">Stream\</span>unwrapReadable(<span class="pl-smi">$promise</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addTimer(<span class="pl-c1">2.0</span>, <span class="pl-k">function</span> () <span class="pl-k">use</span> (<span class="pl-smi">$stream</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>close();</span>
+<span class="pl-s1">});</span></pre></div>
+<h3>
+<a id="unwrapwritable" class="anchor" href="#unwrapwritable" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>unwrapWritable()</h3>
+<p>The <code>unwrapWritable(PromiseInterface&lt;WritableStreamInterface,Exception&gt; $promise): WritableStreamInterface</code> function can be used to
+unwrap a <code>Promise</code> which resolves with a <code>WritableStreamInterface</code>.</p>
+<p>This function returns a writable stream instance (implementing <code>WritableStreamInterface</code>)
+right away which acts as a proxy for the future promise resolution.
+Any writes to this instance will be buffered in memory for when the promise resolves.
+Once the given Promise resolves with a <code>WritableStreamInterface</code>, any data you
+have written to the proxy will be forwarded transparently to the inner stream.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span>$promise = someFunctionWhichResolvesWithAStream();</span></span>
+<span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> startUploadStream(<span class="pl-smi">$uri</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-c1">Stream\</span>unwrapWritable(<span class="pl-smi">$promise</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>hello<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>end(<span class="pl-s"><span class="pl-pds">'</span>world<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>close<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> () {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>DONE<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1">});</span></pre></div>
+<p>If the given promise is either rejected or fulfilled with anything but an
+instance of <code>WritableStreamInterface</code>, then the output stream will emit
+an <code>error</code> event and close:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> startUploadStream(<span class="pl-smi">$invalidUri</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-c1">Stream\</span>unwrapWritable(<span class="pl-smi">$promise</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>error<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-c1">Exception</span> <span class="pl-smi">$error</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>Error: <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$error</span><span class="pl-k">-&gt;</span>getMessage();</span>
+<span class="pl-s1">});</span></pre></div>
+<p>The given <code>$promise</code> SHOULD be pending, i.e. it SHOULD NOT be fulfilled or rejected
+at the time of invoking this function.
+If the given promise is already settled and does not resolve with an
+instance of <code>WritableStreamInterface</code>, then you will not be able to receive
+the <code>error</code> event.</p>
+<p>You can <code>close()</code> the resulting stream at any time, which will either try to
+<code>cancel()</code> the pending promise or try to <code>close()</code> the underlying stream.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> startUploadStream(<span class="pl-smi">$uri</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-c1">Stream\</span>unwrapWritable(<span class="pl-smi">$promise</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addTimer(<span class="pl-c1">2.0</span>, <span class="pl-k">function</span> () <span class="pl-k">use</span> (<span class="pl-smi">$stream</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>close();</span>
+<span class="pl-s1">});</span></pre></div>
+<h2>
+<a id="install" class="anchor" href="#install" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Install</h2>
+<p>The recommended way to install this library is <a href="https://getcomposer.org" rel="nofollow">through Composer</a>.
+<a href="https://getcomposer.org/doc/00-intro.md" rel="nofollow">New to Composer?</a></p>
+<p>This project follows <a href="https://semver.org/" rel="nofollow">SemVer</a>.
+This will install the latest supported version:</p>
+<div class="highlight highlight-source-shell"><pre>$ composer require react/promise-stream:^1.2</pre></div>
+<p>See also the <a href="changelog.html">CHANGELOG</a> for details about version upgrades.</p>
+<p>This project aims to run on any platform and thus does not require any PHP
+extensions and supports running on legacy PHP 5.3 through current PHP 7+ and
+HHVM.
+It's <em>highly recommended to use PHP 7+</em> for this project.</p>
+<h2>
+<a id="tests" class="anchor" href="#tests" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Tests</h2>
+<p>To run the test suite, you first need to clone this repo and then install all
+dependencies <a href="https://getcomposer.org" rel="nofollow">through Composer</a>:</p>
+<div class="highlight highlight-source-shell"><pre>$ composer install</pre></div>
+<p>To run the test suite, go to the project root and run:</p>
+<div class="highlight highlight-source-shell"><pre>$ php vendor/bin/phpunit</pre></div>
+<h2>
+<a id="license" class="anchor" href="#license" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>License</h2>
+<p>MIT, see <a href="license.html">LICENSE file</a>.</p>
+                                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../promise-stream/">PromiseStream</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v1.2.0
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/promise-stream#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/promise-stream/tree/v1.1.1#readme" class="version-selector__version">
+                                                    v1.1.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-stream/tree/v1.1.0#readme" class="version-selector__version">
+                                                    v1.1.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-stream/tree/v1.0.0#readme" class="version-selector__version">
+                                                    v1.0.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-stream/tree/v0.1.2#readme" class="version-selector__version">
+                                                    v0.1.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-stream/tree/v0.1.1#readme" class="version-selector__version">
+                                                    v0.1.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-stream/tree/v0.1.0#readme" class="version-selector__version">
+                                                    v0.1.0
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/promise-stream">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../promise-stream/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../promise-stream/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/promise-stream:^1.2.0</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (37 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (20 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (9 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/carusogabriel">
+                                    <img src="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=80 2x" alt="carusogabriel" title="carusogabriel (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/kelunik">
+                                    <img src="https://avatars0.githubusercontent.com/u/2743004?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/2743004?v=4&amp;s=80 2x" alt="kelunik" title="kelunik (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-promise-stream-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-promise-stream-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,2 6,3 12,2 18,2 24,5 30,1 36,1 42,1 48,1 54,1 60,1 66,1 72,1 78,1 84,1 90,1 96,1 102,1 108,1 114,1 120,1 126,1 132,1 138,1 144,1 150,1 156,2 162,2 168,1 174,1 180,1 186,1 192,1 198,1 204,1 210,1 216,1 222,1 228,1 234,1 240,1 246,1 252,1 258,1 264,1 270,1 276,1 282,1 288,1 294,1 300,1 306,1" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-promise-stream-participation-gradient);mask:url(#reactphp-promise-stream-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/promise-stream/license.html b/promise-stream/license.html
new file mode 100644
index 000000000..29aa6b502
--- /dev/null
+++ b/promise-stream/license.html
@@ -0,0 +1,383 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>PromiseStream: License - ReactPHP</title>
+
+        <meta name="description" content="The missing link between Promise-land and Stream-land for ReactPHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+            </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                    <h1>PromiseStream License</h1>
+
+    <p>The MIT License (MIT)</p>
+<p>Copyright (c) 2016 Christian Lück</p>
+<p>Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:</p>
+<p>The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.</p>
+<p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.</p>
+                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../promise-stream/">PromiseStream</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v1.2.0
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/promise-stream#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/promise-stream/tree/v1.1.1#readme" class="version-selector__version">
+                                                    v1.1.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-stream/tree/v1.1.0#readme" class="version-selector__version">
+                                                    v1.1.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-stream/tree/v1.0.0#readme" class="version-selector__version">
+                                                    v1.0.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-stream/tree/v0.1.2#readme" class="version-selector__version">
+                                                    v0.1.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-stream/tree/v0.1.1#readme" class="version-selector__version">
+                                                    v0.1.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-stream/tree/v0.1.0#readme" class="version-selector__version">
+                                                    v0.1.0
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/promise-stream">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../promise-stream/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../promise-stream/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/promise-stream:^1.2.0</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (37 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (20 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (9 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/carusogabriel">
+                                    <img src="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=80 2x" alt="carusogabriel" title="carusogabriel (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/kelunik">
+                                    <img src="https://avatars0.githubusercontent.com/u/2743004?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/2743004?v=4&amp;s=80 2x" alt="kelunik" title="kelunik (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-promise-stream-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-promise-stream-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,2 6,3 12,2 18,2 24,5 30,1 36,1 42,1 48,1 54,1 60,1 66,1 72,1 78,1 84,1 90,1 96,1 102,1 108,1 114,1 120,1 126,1 132,1 138,1 144,1 150,1 156,2 162,2 168,1 174,1 180,1 186,1 192,1 198,1 204,1 210,1 216,1 222,1 228,1 234,1 240,1 246,1 252,1 258,1 264,1 270,1 276,1 282,1 288,1 294,1 300,1 306,1" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-promise-stream-participation-gradient);mask:url(#reactphp-promise-stream-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/promise-timer/changelog.html b/promise-timer/changelog.html
new file mode 100644
index 000000000..6b70e798a
--- /dev/null
+++ b/promise-timer/changelog.html
@@ -0,0 +1,632 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>PromiseTimer: Changelog - ReactPHP</title>
+
+        <meta name="description" content="A trivial implementation of timeouts for Promises, built on top of ReactPHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+        <link href="https://github.com/reactphp/promise-timer/releases.atom" type="application/atom+xml" rel="alternate" title="PromiseTimer Changelog">
+    </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                    <h1>PromiseTimer Changelog</h1>
+
+    <ul class="toc">
+            <li><a href="#2019" title="Jump to year 2019 (1 release)">2019</a></li>
+            <li><a href="#2018" title="Jump to year 2018 (3 releases)">2018</a></li>
+            <li><a href="#2017" title="Jump to year 2017 (2 releases)">2017</a></li>
+            <li><a href="#2016" title="Jump to year 2016 (2 releases)">2016</a></li>
+            <li><a href="#2015" title="Jump to year 2015 (1 release)">2015</a></li>
+        </ul>
+
+    <h2>
+        <a id="2019" class="anchor" href="#2019" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2019
+    </h2>
+
+    
+            <h3>
+        <a id="151-2019-03-27" class="anchor" href="#151-2019-03-27" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.5.1
+
+        <small>
+            (2019-03-27)
+            <a href="https://github.com/reactphp/promise-timer/releases/tag/v1.5.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Fix: Typo in readme<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="348606196" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-timer/issues/35" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-timer/pull/35/hovercard" href="https://github.com/reactphp/promise-timer/pull/35">#35</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/aak74/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/aak74">@aak74</a>)</p>
+</li>
+<li>
+<p>Improvement: Only include functions file when functions aren't defined<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="423009953" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-timer/issues/36" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-timer/pull/36/hovercard" href="https://github.com/reactphp/promise-timer/pull/36">#36</a> by <a class="user-mention" data-hovercard-type="organization" data-hovercard-url="/orgs/Niko9911/hovercard" href="https://github.com/Niko9911">@Niko9911</a>)</p>
+</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2018" class="anchor" href="#2018" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2018
+    </h2>
+
+    
+            <h3>
+        <a id="150-2018-06-13" class="anchor" href="#150-2018-06-13" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.5.0
+
+        <small>
+            (2018-06-13)
+            <a href="https://github.com/reactphp/promise-timer/releases/tag/v1.5.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Improve memory consumption by cleaning up garbage references to pending promise without canceller.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="331618143" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-timer/issues/34" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-timer/pull/34/hovercard" href="https://github.com/reactphp/promise-timer/pull/34">#34</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="140-2018-06-11" class="anchor" href="#140-2018-06-11" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.4.0
+
+        <small>
+            (2018-06-11)
+            <a href="https://github.com/reactphp/promise-timer/releases/tag/v1.4.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Improve memory consumption by cleaning up garbage references.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="320215111" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-timer/issues/33" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-timer/pull/33/hovercard" href="https://github.com/reactphp/promise-timer/pull/33">#33</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="130-2018-04-24" class="anchor" href="#130-2018-04-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.3.0
+
+        <small>
+            (2018-04-24)
+            <a href="https://github.com/reactphp/promise-timer/releases/tag/v1.3.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Improve memory consumption by cleaning up unneeded references.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="316608822" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-timer/issues/32" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-timer/pull/32/hovercard" href="https://github.com/reactphp/promise-timer/pull/32">#32</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2017" class="anchor" href="#2017" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2017
+    </h2>
+
+    
+            <h3>
+        <a id="121-2017-12-22" class="anchor" href="#121-2017-12-22" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.2.1
+
+        <small>
+            (2017-12-22)
+            <a href="https://github.com/reactphp/promise-timer/releases/tag/v1.2.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>README improvements<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="262176643" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-timer/issues/28" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-timer/pull/28/hovercard" href="https://github.com/reactphp/promise-timer/pull/28">#28</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</p>
+</li>
+<li>
+<p>Improve test suite by adding forward compatiblity with PHPUnit 6 and<br>
+fix test suite forward compatibility with upcoming EventLoop releases<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="284181352" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-timer/issues/30" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-timer/pull/30/hovercard" href="https://github.com/reactphp/promise-timer/pull/30">#30</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="284181695" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-timer/issues/31" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-timer/pull/31/hovercard" href="https://github.com/reactphp/promise-timer/pull/31">#31</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="120-2017-08-08" class="anchor" href="#120-2017-08-08" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.2.0
+
+        <small>
+            (2017-08-08)
+            <a href="https://github.com/reactphp/promise-timer/releases/tag/v1.2.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Only start timers if input Promise is still pending and<br>
+return a settled output promise if the input is already settled.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="219890435" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-timer/issues/25" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-timer/pull/25/hovercard" href="https://github.com/reactphp/promise-timer/pull/25">#25</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Cap minimum timer interval at 1µs across all versions<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="219611060" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-timer/issues/23" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-timer/pull/23/hovercard" href="https://github.com/reactphp/promise-timer/pull/23">#23</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Forward compatibility with EventLoop v1.0 and v0.5<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248537915" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-timer/issues/27" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-timer/pull/27/hovercard" href="https://github.com/reactphp/promise-timer/pull/27">#27</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by adding PHPUnit to require-dev and<br>
+lock Travis distro so new defaults will not break the build<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="219870072" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-timer/issues/24" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-timer/pull/24/hovercard" href="https://github.com/reactphp/promise-timer/pull/24">#24</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248350427" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-timer/issues/26" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-timer/pull/26/hovercard" href="https://github.com/reactphp/promise-timer/pull/26">#26</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2016" class="anchor" href="#2016" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2016
+    </h2>
+
+    
+            <h3>
+        <a id="111-2016-12-27" class="anchor" href="#111-2016-12-27" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.1.1
+
+        <small>
+            (2016-12-27)
+            <a href="https://github.com/reactphp/promise-timer/releases/tag/v1.1.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improve test suite to use PSR-4 autoloader and proper namespaces.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="197518148" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-timer/issues/21" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-timer/pull/21/hovercard" href="https://github.com/reactphp/promise-timer/pull/21">#21</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="110-2016-02-29" class="anchor" href="#110-2016-02-29" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.1.0
+
+        <small>
+            (2016-02-29)
+            <a href="https://github.com/reactphp/promise-timer/releases/tag/v1.1.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Support promise cancellation for all timer primitives<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="134415257" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise-timer/issues/18" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise-timer/pull/18/hovercard" href="https://github.com/reactphp/promise-timer/pull/18">#18</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2015" class="anchor" href="#2015" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2015
+    </h2>
+
+    
+            <h3>
+        <a id="100-2015-09-29" class="anchor" href="#100-2015-09-29" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.0.0
+
+        <small>
+            (2015-09-29)
+            <a href="https://github.com/reactphp/promise-timer/releases/tag/v1.0.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>First tagged release</li>
+</ul>
+
+    <hr>
+    
+    <ul class="links">
+        <li>
+            <a href="https://github.com/reactphp/promise-timer/releases.atom">
+                <i class="icon-feed" aria-hidden="true"></i>
+                Subscribe to the Changelog feed
+            </a>
+        </li>
+    </ul>
+                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../promise-timer/">PromiseTimer</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v1.5.1
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/promise-timer#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/promise-timer/tree/v1.5.0#readme" class="version-selector__version">
+                                                    v1.5.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-timer/tree/v1.4.0#readme" class="version-selector__version">
+                                                    v1.4.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-timer/tree/v1.3.0#readme" class="version-selector__version">
+                                                    v1.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-timer/tree/v1.2.1#readme" class="version-selector__version">
+                                                    v1.2.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-timer/tree/v1.2.0#readme" class="version-selector__version">
+                                                    v1.2.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-timer/tree/v1.1.1#readme" class="version-selector__version">
+                                                    v1.1.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-timer/tree/v1.1.0#readme" class="version-selector__version">
+                                                    v1.1.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-timer/tree/v1.0.0#readme" class="version-selector__version">
+                                                    v1.0.0
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/promise-timer">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../promise-timer/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../promise-timer/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/promise-timer:^1.5.1</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (46 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (11 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (7 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/aak74">
+                                    <img src="https://avatars3.githubusercontent.com/u/3227024?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/3227024?v=4&amp;s=80 2x" alt="aak74" title="aak74 (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cboden">
+                                    <img src="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=80 2x" alt="cboden" title="cboden (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/NikoGrano">
+                                    <img src="https://avatars2.githubusercontent.com/u/4658966?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/4658966?v=4&amp;s=80 2x" alt="NikoGrano" title="NikoGrano (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-promise-timer-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-promise-timer-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,1 6,1 12,1 18,1 24,1 30,1 36,1 42,1 48,1 54,1 60,1 66,1 72,1 78,1 84,1 90,1 96,1 102,1 108,4 114,1 120,1 126,1 132,1 138,1 144,1 150,1 156,2 162,2 168,1 174,1 180,1 186,1 192,1 198,1 204,1 210,1 216,1 222,1 228,1 234,2 240,2 246,1 252,1 258,1 264,1 270,1 276,1 282,2 288,1 294,1 300,1 306,1" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-promise-timer-participation-gradient);mask:url(#reactphp-promise-timer-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/promise-timer/index.html b/promise-timer/index.html
new file mode 100644
index 000000000..4313c2247
--- /dev/null
+++ b/promise-timer/index.html
@@ -0,0 +1,676 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>PromiseTimer: 
+PromiseTimer - ReactPHP</title>
+
+        <meta name="description" content="A trivial implementation of timeouts for Promises, built on top of ReactPHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+            </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                                    <h1>PromiseTimer</h1>
+
+                    
+<p><a href="https://travis-ci.org/reactphp/promise-timer" rel="nofollow"><img src="https://camo.githubusercontent.com/8af458f5d0f7dfb3c2f68f3641943e6d77d6b8fe/68747470733a2f2f7472617669732d63692e6f72672f72656163747068702f70726f6d6973652d74696d65722e7376673f6272616e63683d6d6173746572" alt="Build Status" data-canonical-src="https://travis-ci.org/reactphp/promise-timer.svg?branch=master" style="max-width:100%;"></a></p>
+<p>A trivial implementation of timeouts for <code>Promise</code>s, built on top of <a href="https://reactphp.org/" rel="nofollow">ReactPHP</a>.</p>
+<p><strong>Table of contents</strong></p>
+<ul>
+<li>
+<a href="#usage">Usage</a>
+<ul>
+<li>
+<a href="#timeout">timeout()</a>
+<ul>
+<li><a href="#timeout-cancellation">Timeout cancellation</a></li>
+<li><a href="#cancellation-handler">Cancellation handler</a></li>
+<li><a href="#input-cancellation">Input cancellation</a></li>
+<li><a href="#output-cancellation">Output cancellation</a></li>
+<li><a href="#collections">Collections</a></li>
+</ul>
+</li>
+<li>
+<a href="#resolve">resolve()</a>
+<ul>
+<li><a href="#resolve-cancellation">Resolve cancellation</a></li>
+</ul>
+</li>
+<li>
+<a href="#reject">reject()</a>
+<ul>
+<li><a href="#reject-cancellation">Reject cancellation</a></li>
+</ul>
+</li>
+<li><a href="#timeoutexception">TimeoutException</a></li>
+</ul>
+</li>
+<li><a href="#install">Install</a></li>
+<li><a href="#tests">Tests</a></li>
+<li><a href="#license">License</a></li>
+</ul>
+<h2>
+<a id="usage" class="anchor" href="#usage" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Usage</h2>
+<p>This lightweight library consists only of a few simple functions.
+All functions reside under the <code>React\Promise\Timer</code> namespace.</p>
+<p>The below examples assume you use an import statement similar to this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-k">use</span> <span class="pl-c1">React\Promise\Timer</span>;</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c1">Timer\</span>timeout(…);</span></pre></div>
+<p>Alternatively, you can also refer to them with their fully-qualified name:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c1">\React\Promise\Timer\</span>timeout(…);</span></pre></div>
+<h3>
+<a id="timeout" class="anchor" href="#timeout" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>timeout()</h3>
+<p>The <code>timeout(PromiseInterface $promise, $time, LoopInterface $loop)</code> function
+can be used to <em>cancel</em> operations that take <em>too long</em>.
+You need to pass in an input <code>$promise</code> that represents a pending operation and timeout parameters.
+It returns a new <code>Promise</code> with the following resolution behavior:</p>
+<ul>
+<li>If the input <code>$promise</code> resolves before <code>$time</code> seconds, resolve the resulting promise with its fulfillment value.</li>
+<li>If the input <code>$promise</code> rejects before <code>$time</code> seconds, reject the resulting promise with its rejection value.</li>
+<li>If the input <code>$promise</code> does not settle before <code>$time</code> seconds, <em>cancel</em> the operation and reject the resulting promise with a <a href="#timeoutexception"><code>TimeoutException</code></a>.</li>
+</ul>
+<p>Internally, the given <code>$time</code> value will be used to start a timer that will
+<em>cancel</em> the pending operation once it triggers.
+This implies that if you pass a really small (or negative) value, it will still
+start a timer and will thus trigger at the earliest possible time in the future.</p>
+<p>If the input <code>$promise</code> is already settled, then the resulting promise will
+resolve or reject immediately without starting a timer at all.</p>
+<p>A common use case for handling only resolved values looks like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> accessSomeRemoteResource();</span>
+<span class="pl-s1"><span class="pl-c1">Timer\</span>timeout(<span class="pl-smi">$promise</span>, <span class="pl-c1">10.0</span>, <span class="pl-smi">$loop</span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$value</span>) {</span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> the operation finished within 10.0 seconds</span></span>
+<span class="pl-s1">});</span></pre></div>
+<p>A more complete example could look like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> accessSomeRemoteResource();</span>
+<span class="pl-s1"><span class="pl-c1">Timer\</span>timeout(<span class="pl-smi">$promise</span>, <span class="pl-c1">10.0</span>, <span class="pl-smi">$loop</span>)<span class="pl-k">-&gt;</span>then(</span>
+<span class="pl-s1">    <span class="pl-k">function</span> (<span class="pl-smi">$value</span>) {</span>
+<span class="pl-s1">        <span class="pl-c"><span class="pl-c">//</span> the operation finished within 10.0 seconds</span></span>
+<span class="pl-s1">    },</span>
+<span class="pl-s1">    <span class="pl-k">function</span> (<span class="pl-smi">$error</span>) {</span>
+<span class="pl-s1">        <span class="pl-k">if</span> (<span class="pl-smi">$error</span> <span class="pl-k">instanceof</span> <span class="pl-c1">Timer\</span><span class="pl-c1">TimeoutException</span>) {</span>
+<span class="pl-s1">            <span class="pl-c"><span class="pl-c">//</span> the operation has failed due to a timeout</span></span>
+<span class="pl-s1">        } <span class="pl-k">else</span> {</span>
+<span class="pl-s1">            <span class="pl-c"><span class="pl-c">//</span> the input operation has failed due to some other error</span></span>
+<span class="pl-s1">        }</span>
+<span class="pl-s1">    }</span>
+<span class="pl-s1">);</span></pre></div>
+<p>Or if you're using <a href="../promise/">react/promise v2.2.0</a> or up:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c1">Timer\</span>timeout(<span class="pl-smi">$promise</span>, <span class="pl-c1">10.0</span>, <span class="pl-smi">$loop</span>)</span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$value</span>) {</span>
+<span class="pl-s1">        <span class="pl-c"><span class="pl-c">//</span> the operation finished within 10.0 seconds</span></span>
+<span class="pl-s1">    })</span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>otherwise(<span class="pl-k">function</span> (<span class="pl-c1">Timer\</span><span class="pl-c1">TimeoutException</span> <span class="pl-smi">$error</span>) {</span>
+<span class="pl-s1">        <span class="pl-c"><span class="pl-c">//</span> the operation has failed due to a timeout</span></span>
+<span class="pl-s1">    })</span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>otherwise(<span class="pl-k">function</span> (<span class="pl-smi">$error</span>) {</span>
+<span class="pl-s1">        <span class="pl-c"><span class="pl-c">//</span> the input operation has failed due to some other error</span></span>
+<span class="pl-s1">    })</span>
+<span class="pl-s1">;</span></pre></div>
+<h4>
+<a id="timeout-cancellation" class="anchor" href="#timeout-cancellation" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Timeout cancellation</h4>
+<p>As discussed above, the <a href="#timeout"><code>timeout()</code></a> function will <em>cancel</em> the
+underlying operation if it takes <em>too long</em>.
+This means that you can be sure the resulting promise will then be rejected
+with a <a href="#timeoutexception"><code>TimeoutException</code></a>.</p>
+<p>However, what happens to the underlying input <code>$promise</code> is a bit more tricky:
+Once the timer fires, we will try to call
+<a href="../promise/#cancellablepromiseinterfacecancel"><code>$promise-&gt;cancel()</code></a>
+on the input <code>$promise</code> which in turn invokes its <a href="#cancellation-handler">cancellation handler</a>.</p>
+<p>This means that it's actually up the input <code>$promise</code> to handle
+<a href="../promise/#cancellablepromiseinterface">cancellation support</a>.</p>
+<ul>
+<li>
+<p>A common use case involves cleaning up any resources like open network sockets or
+file handles or terminating external processes or timers.</p>
+</li>
+<li>
+<p>If the given input <code>$promise</code> does not support cancellation, then this is a NO-OP.
+This means that while the resulting promise will still be rejected, the underlying
+input <code>$promise</code> may still be pending and can hence continue consuming resources.</p>
+</li>
+</ul>
+<p>See the following chapter for more details on the cancellation handler.</p>
+<h4>
+<a id="cancellation-handler" class="anchor" href="#cancellation-handler" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Cancellation handler</h4>
+<p>For example, an implementation for the above operation could look like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-k">function</span> <span class="pl-en">accessSomeRemoteResource</span>()</span>
+<span class="pl-s1">{</span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Promise</span>(</span>
+<span class="pl-s1">        <span class="pl-k">function</span> (<span class="pl-smi">$resolve</span>, <span class="pl-smi">$reject</span>) <span class="pl-k">use</span> (<span class="pl-k">&amp;</span><span class="pl-smi">$socket</span>) {</span>
+<span class="pl-s1">            <span class="pl-c"><span class="pl-c">//</span> this will be called once the promise is created</span></span>
+<span class="pl-s1">            <span class="pl-c"><span class="pl-c">//</span> a common use case involves opening any resources and eventually resolving</span></span>
+<span class="pl-s1">            <span class="pl-smi">$socket</span> <span class="pl-k">=</span> createSocket();</span>
+<span class="pl-s1">            <span class="pl-smi">$socket</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>data<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-smi">$data</span>) <span class="pl-k">use</span> (<span class="pl-smi">$resolve</span>) {</span>
+<span class="pl-s1">                $<span class="pl-smi">resolve</span>(<span class="pl-smi">$data</span>);</span>
+<span class="pl-s1">            });</span>
+<span class="pl-s1">        },</span>
+<span class="pl-s1">        <span class="pl-k">function</span> (<span class="pl-smi">$resolve</span>, <span class="pl-smi">$reject</span>) <span class="pl-k">use</span> (<span class="pl-k">&amp;</span><span class="pl-smi">$socket</span>) {</span>
+<span class="pl-s1">            <span class="pl-c"><span class="pl-c">//</span> this will be called once calling `cancel()` on this promise</span></span>
+<span class="pl-s1">            <span class="pl-c"><span class="pl-c">//</span> a common use case involves cleaning any resources and then rejecting</span></span>
+<span class="pl-s1">            <span class="pl-smi">$socket</span><span class="pl-k">-&gt;</span>close();</span>
+<span class="pl-s1">            $<span class="pl-smi">reject</span>(<span class="pl-k">new</span> <span class="pl-c1">\RuntimeException</span>(<span class="pl-s"><span class="pl-pds">'</span>Operation cancelled<span class="pl-pds">'</span></span>));</span>
+<span class="pl-s1">        }</span>
+<span class="pl-s1">    );</span>
+<span class="pl-s1">}</span></pre></div>
+<p>In this example, calling <code>$promise-&gt;cancel()</code> will invoke the registered cancellation
+handler which then closes the network socket and rejects the <code>Promise</code> instance.</p>
+<p>If no cancellation handler is passed to the <code>Promise</code> constructor, then invoking
+its <code>cancel()</code> method it is effectively a NO-OP.
+This means that it may still be pending and can hence continue consuming resources.</p>
+<p>For more details on the promise cancellation, please refer to the
+<a href="../promise/#cancellablepromiseinterface">Promise documentation</a>.</p>
+<h4>
+<a id="input-cancellation" class="anchor" href="#input-cancellation" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Input cancellation</h4>
+<p>Irrespective of the timeout handling, you can also explicitly <code>cancel()</code> the
+input <code>$promise</code> at any time.
+This means that the <code>timeout()</code> handling does not affect cancellation of the
+input <code>$promise</code>, as demonstrated in the following example:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> accessSomeRemoteResource();</span>
+<span class="pl-s1"><span class="pl-smi">$timeout</span> <span class="pl-k">=</span> <span class="pl-c1">Timer\</span>timeout(<span class="pl-smi">$promise</span>, <span class="pl-c1">10.0</span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$promise</span><span class="pl-k">-&gt;</span>cancel();</span></pre></div>
+<p>The registered <a href="#cancellation-handler">cancellation handler</a> is responsible for
+handling the <code>cancel()</code> call:</p>
+<ul>
+<li>A described above, a common use involves resource cleanup and will then <em>reject</em>
+the <code>Promise</code>.
+If the input <code>$promise</code> is being rejected, then the timeout will be aborted
+and the resulting promise will also be rejected.</li>
+<li>If the input <code>$promise</code> is still pending, then the timout will continue
+running until the timer expires.
+The same happens if the input <code>$promise</code> does not register a
+<a href="#cancellation-handler">cancellation handler</a>.</li>
+</ul>
+<h4>
+<a id="output-cancellation" class="anchor" href="#output-cancellation" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Output cancellation</h4>
+<p>Similarily, you can also explicitly <code>cancel()</code> the resulting promise like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> accessSomeRemoteResource();</span>
+<span class="pl-s1"><span class="pl-smi">$timeout</span> <span class="pl-k">=</span> <span class="pl-c1">Timer\</span>timeout(<span class="pl-smi">$promise</span>, <span class="pl-c1">10.0</span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$timeout</span><span class="pl-k">-&gt;</span>cancel();</span></pre></div>
+<p>Note how this looks very similar to the above <a href="#input-cancellation">input cancellation</a>
+example. Accordingly, it also behaves very similar.</p>
+<p>Calling <code>cancel()</code> on the resulting promise will merely try
+to <code>cancel()</code> the input <code>$promise</code>.
+This means that we do not take over responsibility of the outcome and it's
+entirely up to the input <code>$promise</code> to handle cancellation support.</p>
+<p>The registered <a href="#cancellation-handler">cancellation handler</a> is responsible for
+handling the <code>cancel()</code> call:</p>
+<ul>
+<li>As described above, a common use involves resource cleanup and will then <em>reject</em>
+the <code>Promise</code>.
+If the input <code>$promise</code> is being rejected, then the timeout will be aborted
+and the resulting promise will also be rejected.</li>
+<li>If the input <code>$promise</code> is still pending, then the timout will continue
+running until the timer expires.
+The same happens if the input <code>$promise</code> does not register a
+<a href="#cancellation-handler">cancellation handler</a>.</li>
+</ul>
+<p>To re-iterate, note that calling <code>cancel()</code> on the resulting promise will merely
+try to cancel the input <code>$promise</code> only.
+It is then up to the cancellation handler of the input promise to settle the promise.
+If the input promise is still pending when the timeout occurs, then the normal
+<a href="#timeout-cancellation">timeout cancellation</a> handling will trigger, effectively rejecting
+the output promise with a <a href="#timeoutexception"><code>TimeoutException</code></a>.</p>
+<p>This is done for consistency with the <a href="#timeout-cancellation">timeout cancellation</a>
+handling and also because it is assumed this is often used like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$timeout</span> <span class="pl-k">=</span> <span class="pl-c1">Timer\</span>timeout(accessSomeRemoteResource(), <span class="pl-c1">10.0</span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$timeout</span><span class="pl-k">-&gt;</span>cancel();</span></pre></div>
+<p>As described above, this example works as expected and cleans up any resources
+allocated for the input <code>$promise</code>.</p>
+<p>Note that if the given input <code>$promise</code> does not support cancellation, then this
+is a NO-OP.
+This means that while the resulting promise will still be rejected after the
+timeout, the underlying input <code>$promise</code> may still be pending and can hence
+continue consuming resources.</p>
+<h4>
+<a id="collections" class="anchor" href="#collections" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Collections</h4>
+<p>If you want to wait for multiple promises to resolve, you can use the normal promise primitives like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promises</span> <span class="pl-k">=</span> <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    accessSomeRemoteResource(),</span>
+<span class="pl-s1">    accessSomeRemoteResource(),</span>
+<span class="pl-s1">    accessSomeRemoteResource()</span>
+<span class="pl-s1">);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> <span class="pl-c1">\React\Promise\</span>all(<span class="pl-smi">$promises</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c1">Timer\</span>timeout(<span class="pl-smi">$promise</span>, <span class="pl-c1">10</span>, <span class="pl-smi">$loop</span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$values</span>) {</span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> *all* promises resolved</span></span>
+<span class="pl-s1">});</span></pre></div>
+<p>The applies to all promise collection primitives alike, i.e. <code>all()</code>, <code>race()</code>, <code>any()</code>, <code>some()</code> etc.</p>
+<p>For more details on the promise primitives, please refer to the
+<a href="../promise/#functions">Promise documentation</a>.</p>
+<h3>
+<a id="resolve" class="anchor" href="#resolve" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>resolve()</h3>
+<p>The <code>resolve($time, LoopInterface $loop)</code> function can be used to create a new Promise that
+resolves in <code>$time</code> seconds with the <code>$time</code> as the fulfillment value.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c1">Timer\</span>resolve(<span class="pl-c1">1.5</span>, <span class="pl-smi">$loop</span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$time</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>Thanks for waiting <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$time</span> <span class="pl-k">.</span> <span class="pl-s"><span class="pl-pds">'</span> seconds<span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">});</span></pre></div>
+<p>Internally, the given <code>$time</code> value will be used to start a timer that will
+resolve the promise once it triggers.
+This implies that if you pass a really small (or negative) value, it will still
+start a timer and will thus trigger at the earliest possible time in the future.</p>
+<h4>
+<a id="resolve-cancellation" class="anchor" href="#resolve-cancellation" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Resolve cancellation</h4>
+<p>You can explicitly <code>cancel()</code> the resulting timer promise at any time:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$timer</span> <span class="pl-k">=</span> <span class="pl-c1">Timer\</span>resolve(<span class="pl-c1">2.0</span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$timer</span><span class="pl-k">-&gt;</span>cancel();</span></pre></div>
+<p>This will abort the timer and <em>reject</em> with a <code>RuntimeException</code>.</p>
+<h3>
+<a id="reject" class="anchor" href="#reject" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>reject()</h3>
+<p>The <code>reject($time, LoopInterface $loop)</code> function can be used to create a new Promise
+which rejects in <code>$time</code> seconds with a <code>TimeoutException</code>.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c1">Timer\</span>reject(<span class="pl-c1">2.0</span>, <span class="pl-smi">$loop</span>)<span class="pl-k">-&gt;</span>then(<span class="pl-c1">null</span>, <span class="pl-k">function</span> (<span class="pl-c1">TimeoutException</span> <span class="pl-smi">$e</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>Rejected after <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$e</span><span class="pl-k">-&gt;</span>getTimeout() <span class="pl-k">.</span> <span class="pl-s"><span class="pl-pds">'</span> seconds <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">});</span></pre></div>
+<p>Internally, the given <code>$time</code> value will be used to start a timer that will
+reject the promise once it triggers.
+This implies that if you pass a really small (or negative) value, it will still
+start a timer and will thus trigger at the earliest possible time in the future.</p>
+<p>This function complements the <a href="#resolve"><code>resolve()</code></a> function
+and can be used as a basic building block for higher-level promise consumers.</p>
+<h4>
+<a id="reject-cancellation" class="anchor" href="#reject-cancellation" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Reject cancellation</h4>
+<p>You can explicitly <code>cancel()</code> the resulting timer promise at any time:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$timer</span> <span class="pl-k">=</span> <span class="pl-c1">Timer\</span>reject(<span class="pl-c1">2.0</span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$timer</span><span class="pl-k">-&gt;</span>cancel();</span></pre></div>
+<p>This will abort the timer and <em>reject</em> with a <code>RuntimeException</code>.</p>
+<h3>
+<a id="timeoutexception" class="anchor" href="#timeoutexception" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>TimeoutException</h3>
+<p>The <code>TimeoutException</code> extends PHP's built-in <code>RuntimeException</code>.</p>
+<p>The <code>getTimeout()</code> method can be used to get the timeout value in seconds.</p>
+<h2>
+<a id="install" class="anchor" href="#install" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Install</h2>
+<p>The recommended way to install this library is <a href="https://getcomposer.org" rel="nofollow">through Composer</a>.
+<a href="https://getcomposer.org/doc/00-intro.md" rel="nofollow">New to Composer?</a></p>
+<p>This project follows <a href="https://semver.org/" rel="nofollow">SemVer</a>.
+This will install the latest supported version:</p>
+<div class="highlight highlight-source-shell"><pre>$ composer require react/promise-timer:^1.5</pre></div>
+<p>See also the <a href="changelog.html">CHANGELOG</a> for details about version upgrades.</p>
+<p>This project aims to run on any platform and thus does not require any PHP
+extensions and supports running on legacy PHP 5.3 through current PHP 7+ and
+HHVM.
+It's <em>highly recommended to use PHP 7+</em> for this project.</p>
+<h2>
+<a id="tests" class="anchor" href="#tests" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Tests</h2>
+<p>To run the test suite, you first need to clone this repo and then install all
+dependencies <a href="https://getcomposer.org" rel="nofollow">through Composer</a>:</p>
+<div class="highlight highlight-source-shell"><pre>$ composer install</pre></div>
+<p>To run the test suite, go to the project root and run:</p>
+<div class="highlight highlight-source-shell"><pre>$ php vendor/bin/phpunit</pre></div>
+<h2>
+<a id="license" class="anchor" href="#license" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>License</h2>
+<p>MIT, see <a href="license.html">LICENSE file</a>.</p>
+                                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../promise-timer/">PromiseTimer</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v1.5.1
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/promise-timer#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/promise-timer/tree/v1.5.0#readme" class="version-selector__version">
+                                                    v1.5.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-timer/tree/v1.4.0#readme" class="version-selector__version">
+                                                    v1.4.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-timer/tree/v1.3.0#readme" class="version-selector__version">
+                                                    v1.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-timer/tree/v1.2.1#readme" class="version-selector__version">
+                                                    v1.2.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-timer/tree/v1.2.0#readme" class="version-selector__version">
+                                                    v1.2.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-timer/tree/v1.1.1#readme" class="version-selector__version">
+                                                    v1.1.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-timer/tree/v1.1.0#readme" class="version-selector__version">
+                                                    v1.1.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-timer/tree/v1.0.0#readme" class="version-selector__version">
+                                                    v1.0.0
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/promise-timer">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../promise-timer/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../promise-timer/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/promise-timer:^1.5.1</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (46 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (11 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (7 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/aak74">
+                                    <img src="https://avatars3.githubusercontent.com/u/3227024?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/3227024?v=4&amp;s=80 2x" alt="aak74" title="aak74 (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cboden">
+                                    <img src="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=80 2x" alt="cboden" title="cboden (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/NikoGrano">
+                                    <img src="https://avatars2.githubusercontent.com/u/4658966?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/4658966?v=4&amp;s=80 2x" alt="NikoGrano" title="NikoGrano (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-promise-timer-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-promise-timer-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,1 6,1 12,1 18,1 24,1 30,1 36,1 42,1 48,1 54,1 60,1 66,1 72,1 78,1 84,1 90,1 96,1 102,1 108,4 114,1 120,1 126,1 132,1 138,1 144,1 150,1 156,2 162,2 168,1 174,1 180,1 186,1 192,1 198,1 204,1 210,1 216,1 222,1 228,1 234,2 240,2 246,1 252,1 258,1 264,1 270,1 276,1 282,2 288,1 294,1 300,1 306,1" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-promise-timer-participation-gradient);mask:url(#reactphp-promise-timer-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/promise-timer/license.html b/promise-timer/license.html
new file mode 100644
index 000000000..ad51bcc79
--- /dev/null
+++ b/promise-timer/license.html
@@ -0,0 +1,398 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>PromiseTimer: License - ReactPHP</title>
+
+        <meta name="description" content="A trivial implementation of timeouts for Promises, built on top of ReactPHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+            </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                    <h1>PromiseTimer License</h1>
+
+    <p>The MIT License (MIT)</p>
+<p>Copyright (c) 2015 Christian Lück</p>
+<p>Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:</p>
+<p>The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.</p>
+<p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.</p>
+                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../promise-timer/">PromiseTimer</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v1.5.1
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/promise-timer#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/promise-timer/tree/v1.5.0#readme" class="version-selector__version">
+                                                    v1.5.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-timer/tree/v1.4.0#readme" class="version-selector__version">
+                                                    v1.4.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-timer/tree/v1.3.0#readme" class="version-selector__version">
+                                                    v1.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-timer/tree/v1.2.1#readme" class="version-selector__version">
+                                                    v1.2.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-timer/tree/v1.2.0#readme" class="version-selector__version">
+                                                    v1.2.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-timer/tree/v1.1.1#readme" class="version-selector__version">
+                                                    v1.1.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-timer/tree/v1.1.0#readme" class="version-selector__version">
+                                                    v1.1.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise-timer/tree/v1.0.0#readme" class="version-selector__version">
+                                                    v1.0.0
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/promise-timer">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../promise-timer/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../promise-timer/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/promise-timer:^1.5.1</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (46 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (11 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (7 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/aak74">
+                                    <img src="https://avatars3.githubusercontent.com/u/3227024?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/3227024?v=4&amp;s=80 2x" alt="aak74" title="aak74 (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cboden">
+                                    <img src="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=80 2x" alt="cboden" title="cboden (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/NikoGrano">
+                                    <img src="https://avatars2.githubusercontent.com/u/4658966?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/4658966?v=4&amp;s=80 2x" alt="NikoGrano" title="NikoGrano (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-promise-timer-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-promise-timer-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,1 6,1 12,1 18,1 24,1 30,1 36,1 42,1 48,1 54,1 60,1 66,1 72,1 78,1 84,1 90,1 96,1 102,1 108,4 114,1 120,1 126,1 132,1 138,1 144,1 150,1 156,2 162,2 168,1 174,1 180,1 186,1 192,1 198,1 204,1 210,1 216,1 222,1 228,1 234,2 240,2 246,1 252,1 258,1 264,1 270,1 276,1 282,2 288,1 294,1 300,1 306,1" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-promise-timer-participation-gradient);mask:url(#reactphp-promise-timer-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/promise/changelog.html b/promise/changelog.html
new file mode 100644
index 000000000..b4cad3ff4
--- /dev/null
+++ b/promise/changelog.html
@@ -0,0 +1,1058 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>Promise: Changelog - ReactPHP</title>
+
+        <meta name="description" content="Promises/A implementation for PHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+        <link href="https://github.com/reactphp/promise/releases.atom" type="application/atom+xml" rel="alternate" title="Promise Changelog">
+    </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                    <h1>Promise Changelog</h1>
+
+    <ul class="toc">
+            <li><a href="#2020" title="Jump to year 2020 (1 release)">2020</a></li>
+            <li><a href="#2019" title="Jump to year 2019 (1 release)">2019</a></li>
+            <li><a href="#2018" title="Jump to year 2018 (2 releases)">2018</a></li>
+            <li><a href="#2017" title="Jump to year 2017 (1 release)">2017</a></li>
+            <li><a href="#2016" title="Jump to year 2016 (7 releases)">2016</a></li>
+            <li><a href="#2015" title="Jump to year 2015 (2 releases)">2015</a></li>
+            <li><a href="#2014" title="Jump to year 2014 (2 releases)">2014</a></li>
+            <li><a href="#2013" title="Jump to year 2013 (2 releases)">2013</a></li>
+            <li><a href="#2012" title="Jump to year 2012 (4 releases)">2012</a></li>
+        </ul>
+
+    <h2>
+        <a id="2020" class="anchor" href="#2020" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2020
+    </h2>
+
+    
+            <h3>
+        <a id="280-2020-05-12" class="anchor" href="#280-2020-05-12" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        2.8.0
+
+        <small>
+            (2020-05-12)
+            <a href="https://github.com/reactphp/promise/releases/tag/v2.8.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Mark <code>FulfilledPromise</code>, <code>RejectedPromise</code> and <code>LazyPromise</code> as deprecated for Promise v2 (and remove for Promise v3).<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="459181492" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/143" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/143/hovercard" href="https://github.com/reactphp/promise/pull/143">#143</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="577487588" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/165" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/165/hovercard" href="https://github.com/reactphp/promise/pull/165">#165</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre>// deprecated
+$fulfilled = new React\Promise\FulfilledPromise($value);
+$rejected = new React\Promise\RejectedPromise($reason);
+
+// recommended alternatives
+$fulfilled = React\Promise\resolve($value);
+$rejected = React\Promise\reject($reason);</pre></div>
+</li>
+<li>
+<p>Fix: Fix checking whether cancellable promise is an object and avoid possible warning.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="615161685" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/168" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/168/hovercard" href="https://github.com/reactphp/promise/pull/168">#168</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/smscr/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/smscr">@smscr</a> and <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</p>
+</li>
+<li>
+<p>Improve documentation and add docblocks to functions and interfaces.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="396878297" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/135" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/135/hovercard" href="https://github.com/reactphp/promise/pull/135">#135</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/CharlotteDunois/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/CharlotteDunois">@CharlotteDunois</a>)</p>
+</li>
+<li>
+<p>Add <code>.gitattributes</code> to exclude dev files from exports.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="530762040" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/154" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/154/hovercard" href="https://github.com/reactphp/promise/pull/154">#154</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/reedy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/reedy">@reedy</a>)</p>
+</li>
+<li>
+<p>Improve test suite, run tests on PHP 7.4 and update PHPUnit test setup.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="575313779" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/163" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/163/hovercard" href="https://github.com/reactphp/promise/pull/163">#163</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2019" class="anchor" href="#2019" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2019
+    </h2>
+
+    
+            <h3>
+        <a id="271-2019-01-07" class="anchor" href="#271-2019-01-07" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        2.7.1
+
+        <small>
+            (2019-01-07)
+            <a href="https://github.com/reactphp/promise/releases/tag/v2.7.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix: file_exists warning when resolving with long strings. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="392998751" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/130" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/130/hovercard" href="https://github.com/reactphp/promise/pull/130">#130</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/sbesselsen/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/sbesselsen">@sbesselsen</a>)</li>
+<li>Improve performance by prefixing all global functions calls with \ to skip the look up and resolve process and go straight to the global function. (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="396586706" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/133" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/133/hovercard" href="https://github.com/reactphp/promise/pull/133">#133</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2018" class="anchor" href="#2018" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2018
+    </h2>
+
+    
+            <h3>
+        <a id="270-2018-06-13" class="anchor" href="#270-2018-06-13" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        2.7.0
+
+        <small>
+            (2018-06-13)
+            <a href="https://github.com/reactphp/promise/releases/tag/v2.7.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Improve memory consumption for pending promises by using static internal callbacks without binding to self.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="331547631" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/124" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/124/hovercard" href="https://github.com/reactphp/promise/pull/124">#124</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="260-2018-06-11" class="anchor" href="#260-2018-06-11" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        2.6.0
+
+        <small>
+            (2018-06-11)
+            <a href="https://github.com/reactphp/promise/releases/tag/v2.6.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Significantly improve memory consumption and performance by only passing resolver args<br>
+to resolver and canceller if callback requires them. Also use static callbacks without<br>
+binding to promise, clean up canceller function reference when they are no longer<br>
+needed and hide resolver and canceller references from call stack on PHP 7+.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="317258762" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/113" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/113/hovercard" href="https://github.com/reactphp/promise/pull/113">#113</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="317708225" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/115" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/115/hovercard" href="https://github.com/reactphp/promise/pull/115">#115</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="318735141" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/116" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/116/hovercard" href="https://github.com/reactphp/promise/pull/116">#116</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="320180339" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/117" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/117/hovercard" href="https://github.com/reactphp/promise/pull/117">#117</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="320317368" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/118" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/118/hovercard" href="https://github.com/reactphp/promise/pull/118">#118</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="320624682" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/119" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/119/hovercard" href="https://github.com/reactphp/promise/pull/119">#119</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="330889368" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/123" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/123/hovercard" href="https://github.com/reactphp/promise/pull/123">#123</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>These changes combined mean that rejecting promises with an <code>Exception</code> should<br>
+no longer cause any internal circular references which could cause some unexpected<br>
+memory growth in previous versions. By explicitly avoiding and explicitly<br>
+cleaning up said references, we can avoid relying on PHP's circular garbage collector<br>
+to kick in which significantly improves performance when rejecting many promises.</p>
+</li>
+<li>
+<p>Mark legacy progress support / notification API as deprecated<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="316930555" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/112" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/112/hovercard" href="https://github.com/reactphp/promise/pull/112">#112</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Recommend rejecting promises by throwing an exception<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="317591712" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/114" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/114/hovercard" href="https://github.com/reactphp/promise/pull/114">#114</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</p>
+</li>
+<li>
+<p>Improve documentation to properly instantiate LazyPromise<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="328515975" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/121" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/121/hovercard" href="https://github.com/reactphp/promise/pull/121">#121</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/holtkamp/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/holtkamp">@holtkamp</a>)</p>
+</li>
+<li>
+<p>Follower cancellation propagation was originally planned for this release<br>
+but has been reverted for now and is planned for a future release.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="255393042" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/99" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/99/hovercard" href="https://github.com/reactphp/promise/pull/99">#99</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="330649264" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/122" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/122/hovercard" href="https://github.com/reactphp/promise/pull/122">#122</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2017" class="anchor" href="#2017" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2017
+    </h2>
+
+    
+            <h3>
+        <a id="251-2017-03-25" class="anchor" href="#251-2017-03-25" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        2.5.1
+
+        <small>
+            (2017-03-25)
+            <a href="https://github.com/reactphp/promise/releases/tag/v2.5.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix circular references when resolving with a promise which follows itself (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="214984171" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/94" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/94/hovercard" href="https://github.com/reactphp/promise/pull/94">#94</a>).</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2016" class="anchor" href="#2016" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2016
+    </h2>
+
+    
+            <h3>
+        <a id="250-2016-12-22" class="anchor" href="#250-2016-12-22" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        2.5.0
+
+        <small>
+            (2016-12-22)
+            <a href="https://github.com/reactphp/promise/releases/tag/v2.5.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Revert automatic cancellation of pending collection promises once the output promise resolves. This was introduced in <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/reactphp/promise/commit/42d86b729204fe498688b1f4b47b4ec03482f152/hovercard" href="https://github.com/reactphp/promise/commit/42d86b729204fe498688b1f4b47b4ec03482f152"><tt>42d86b7</tt></a> (PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="93280218" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/36" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/36/hovercard" href="https://github.com/reactphp/promise/pull/36">#36</a>, released in <a href="https://github.com/reactphp/promise/releases/tag/v2.3.0">v2.3.0</a>) and was both unintended and backward incompatible.</p>
+<p>If you need automatic cancellation, you can use something like:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-k">function</span> <span class="pl-en">allAndCancel</span>(<span class="pl-k">array</span> <span class="pl-smi">$promises</span>)</span>
+<span class="pl-s1">{</span>
+<span class="pl-s1">     <span class="pl-k">return</span> <span class="pl-c1">\React\Promise\</span>all(<span class="pl-smi">$promises</span>)</span>
+<span class="pl-s1">         <span class="pl-k">-&gt;</span>always(<span class="pl-k">function</span>() <span class="pl-k">use</span> (<span class="pl-smi">$promises</span>) {</span>
+<span class="pl-s1">             <span class="pl-k">foreach</span> (<span class="pl-smi">$promises</span> <span class="pl-k">as</span> <span class="pl-smi">$promise</span>) {</span>
+<span class="pl-s1">                 <span class="pl-k">if</span> (<span class="pl-smi">$promise</span> <span class="pl-k">instanceof</span> <span class="pl-c1">\React\Promise\</span><span class="pl-c1">CancellablePromiseInterface</span>) {</span>
+<span class="pl-s1">                     <span class="pl-smi">$promise</span><span class="pl-k">-&gt;</span>cancel();</span>
+<span class="pl-s1">                 }</span>
+<span class="pl-s1">             }</span>
+<span class="pl-s1">        });</span>
+<span class="pl-s1">}</span></pre></div>
+</li>
+<li>
+<p><code>all()</code> and <code>map()</code> functions now preserve the order of the array (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="197142181" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/77" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/77/hovercard" href="https://github.com/reactphp/promise/pull/77">#77</a>).</p>
+</li>
+<li>
+<p>Fix circular references when resolving a promise with itself (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="189175515" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/71" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/71/hovercard" href="https://github.com/reactphp/promise/pull/71">#71</a>).</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="241-2016-05-03" class="anchor" href="#241-2016-05-03" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        2.4.1
+
+        <small>
+            (2016-05-03)
+            <a href="https://github.com/reactphp/promise/releases/tag/v2.4.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix <code>some()</code> not cancelling pending promises when too much input promises reject (<a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/reactphp/promise/commit/16ff799a3a749dd79faff36c5f3cfc11825daa8b/hovercard" href="https://github.com/reactphp/promise/commit/16ff799a3a749dd79faff36c5f3cfc11825daa8b"><tt>16ff799</tt></a>).</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="240-2016-03-31" class="anchor" href="#240-2016-03-31" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        2.4.0
+
+        <small>
+            (2016-03-31)
+            <a href="https://github.com/reactphp/promise/releases/tag/v2.4.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Support foreign thenables in <code>resolve()</code>.<br>
+Any object that provides a <code>then()</code> method is now assimilated to a trusted promise that follows the state of this thenable (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="143505001" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/52" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/52/hovercard" href="https://github.com/reactphp/promise/pull/52">#52</a>).</li>
+<li>Fix <code>some()</code> and <code>any()</code> for input arrays containing not enough items (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="93222181" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/34" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/34/hovercard" href="https://github.com/reactphp/promise/pull/34">#34</a>).</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="230-2016-03-24" class="anchor" href="#230-2016-03-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        2.3.0
+
+        <small>
+            (2016-03-24)
+            <a href="https://github.com/reactphp/promise/releases/tag/v2.3.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Allow cancellation of promises returned by functions working on promise collections (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="93280218" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/36" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/36/hovercard" href="https://github.com/reactphp/promise/pull/36">#36</a>).</li>
+<li>Handle <code>\Throwable</code> in the same way as <code>\Exception</code> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="143319091" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/51" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/51/hovercard" href="https://github.com/reactphp/promise/pull/51">#51</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/joshdifabio/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/joshdifabio">@joshdifabio</a>).</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="121-2016-03-07" class="anchor" href="#121-2016-03-07" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.2.1
+
+        <small>
+            (2016-03-07)
+            <a href="https://github.com/reactphp/promise/releases/tag/v1.2.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix <code>DeferredPromise</code> to also implement the <code>CancellablePromiseInterface</code>.</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="120-2016-02-27" class="anchor" href="#120-2016-02-27" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.2.0
+
+        <small>
+            (2016-02-27)
+            <a href="https://github.com/reactphp/promise/releases/tag/v1.2.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <p>This release makes the API more compatible with 2.0 while preserving full backward compatibility.</p>
+<ul>
+<li>Introduce new CancellablePromiseInterface implemented by all promises.</li>
+<li>Add new .cancel() method (part of the CancellablePromiseInterface).</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="222-2016-02-26" class="anchor" href="#222-2016-02-26" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        2.2.2
+
+        <small>
+            (2016-02-26)
+            <a href="https://github.com/reactphp/promise/releases/tag/v2.2.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix cancellation handlers called multiple times (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="136235470" data-permission-text="Title is private" data-url="https://github.com/reactphp/promise/issues/47" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/promise/pull/47/hovercard" href="https://github.com/reactphp/promise/pull/47">#47</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>).</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2015" class="anchor" href="#2015" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2015
+    </h2>
+
+    
+            <h3>
+        <a id="221-2015-07-03" class="anchor" href="#221-2015-07-03" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        2.2.1
+
+        <small>
+            (2015-07-03)
+            <a href="https://github.com/reactphp/promise/releases/tag/v2.2.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix stack error when resolving a promise in its own fulfillment or rejection handlers.</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="110-2015-07-01" class="anchor" href="#110-2015-07-01" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.1.0
+
+        <small>
+            (2015-07-01)
+            <a href="https://github.com/reactphp/promise/releases/tag/v1.1.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <p>This release makes the API more compatible with 2.0 while preserving full backward compatibility.</p>
+<ul>
+<li>Add <code>React\Promise\Promise</code> class.</li>
+<li>Move methods of <code>React\Promise\When</code> and <code>React\Promise\Util</code> to functions while keeping the classes as a proxy for BC.</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2014" class="anchor" href="#2014" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2014
+    </h2>
+
+    
+            <h3>
+        <a id="220-2014-12-30" class="anchor" href="#220-2014-12-30" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        2.2.0
+
+        <small>
+            (2014-12-30)
+            <a href="https://github.com/reactphp/promise/releases/tag/v2.2.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <p>This release introduces the <a href="https://github.com/reactphp/promise/tree/v2.2.0#extendedpromiseinterface">ExtendedPromiseInterface</a>.</p>
+<p>The ExtendedPromiseInterface extends the PromiseInterface with useful shortcut<br>
+and utility methods which are not part of the Promises/A specification.</p>
+
+    <hr>
+    
+            <h3>
+        <a id="210-2014-10-15" class="anchor" href="#210-2014-10-15" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        2.1.0
+
+        <small>
+            (2014-10-15)
+            <a href="https://github.com/reactphp/promise/releases/tag/v2.1.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <p>Introduce new <a href="https://github.com/reactphp/promise/tree/v2.1.0#cancellablepromiseinterface">CancellablePromiseInterface</a> implemented by all promises.</p>
+
+    <hr>
+        <h2>
+        <a id="2013" class="anchor" href="#2013" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2013
+    </h2>
+
+    
+            <h3>
+        <a id="200-2013-12-10" class="anchor" href="#200-2013-12-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        2.0.0
+
+        <small>
+            (2013-12-10)
+            <a href="https://github.com/reactphp/promise/releases/tag/v2.0.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <p>New major release. The goal was to streamline the API and to make it more compliant with other promise libraries and especially with the new upcoming <a href="https://github.com/domenic/promises-unwrapping/">ES6 promises specification</a>.</p>
+<ul>
+<li>Add standalone Promise class.</li>
+<li>Add new React\Promise\race() function.</li>
+<li>BC break: Bump minimum PHP version to PHP 5.4.</li>
+<li>BC break: Remove ResolverInterface and PromiseInterface from Deferred.</li>
+<li>BC break: Change signature of PromiseInterface.</li>
+<li>BC break: Remove When and Util classes and move static methods to functions.</li>
+<li>BC break: FulfilledPromise and RejectedPromise now throw an exception when initialized with a promise instead of a value/reason.</li>
+<li>BC break: React\Promise\Deferred::resolve() and React\Promise\Deferred::reject() no longer return a promise.</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="104-2013-04-03" class="anchor" href="#104-2013-04-03" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.0.4
+
+        <small>
+            (2013-04-03)
+            <a href="https://github.com/reactphp/promise/releases/tag/v1.0.4" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Trigger PHP errors when invalid callback is passed.</li>
+<li>Fully resolve rejection value before calling rejection handler.</li>
+<li>Add <code>When::lazy()</code> to create lazy promises which will be initialized once a consumer calls the <code>then()</code> method.</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2012" class="anchor" href="#2012" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2012
+    </h2>
+
+    
+            <h3>
+        <a id="103-2012-11-17" class="anchor" href="#103-2012-11-17" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.0.3
+
+        <small>
+            (2012-11-17)
+            <a href="https://github.com/reactphp/promise/releases/tag/v1.0.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Add <code>PromisorInterface</code> for objects that have a <code>promise()</code> method.</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="102-2012-11-14" class="anchor" href="#102-2012-11-14" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.0.2
+
+        <small>
+            (2012-11-14)
+            <a href="https://github.com/reactphp/promise/releases/tag/v1.0.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix bug in <code>When::any()</code> not correctly unwrapping to a single result value</li>
+<li><code>$promiseOrValue</code> argument of <code>When::resolve()</code> and <code>When::reject()</code> is now optional</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="101-2012-11-13" class="anchor" href="#101-2012-11-13" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.0.1
+
+        <small>
+            (2012-11-13)
+            <a href="https://github.com/reactphp/promise/releases/tag/v1.0.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Prevent deep recursion which was reaching xdebug.max_nesting_level default of 100</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="100-2012-11-07" class="anchor" href="#100-2012-11-07" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.0.0
+
+        <small>
+            (2012-11-07)
+            <a href="https://github.com/reactphp/promise/releases/tag/v1.0.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>First tagged release</li>
+</ul>
+
+    <hr>
+    
+    <ul class="links">
+        <li>
+            <a href="https://github.com/reactphp/promise/releases.atom">
+                <i class="icon-feed" aria-hidden="true"></i>
+                Subscribe to the Changelog feed
+            </a>
+        </li>
+    </ul>
+                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../promise/">Promise</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v2.8.0
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/promise#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.7.1#readme" class="version-selector__version">
+                                                    v2.7.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.7.0#readme" class="version-selector__version">
+                                                    v2.7.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.6.0#readme" class="version-selector__version">
+                                                    v2.6.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.5.1#readme" class="version-selector__version">
+                                                    v2.5.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.5.0#readme" class="version-selector__version">
+                                                    v2.5.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.4.1#readme" class="version-selector__version">
+                                                    v2.4.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.4.0#readme" class="version-selector__version">
+                                                    v2.4.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.3.0#readme" class="version-selector__version">
+                                                    v2.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v1.2.1#readme" class="version-selector__version">
+                                                    v1.2.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v1.2.0#readme" class="version-selector__version">
+                                                    v1.2.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.2.2#readme" class="version-selector__version">
+                                                    v2.2.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.2.1#readme" class="version-selector__version">
+                                                    v2.2.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v1.1.0#readme" class="version-selector__version">
+                                                    v1.1.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.2.0#readme" class="version-selector__version">
+                                                    v2.2.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.1.0#readme" class="version-selector__version">
+                                                    v2.1.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.0.0#readme" class="version-selector__version">
+                                                    v2.0.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v1.0.4#readme" class="version-selector__version">
+                                                    v1.0.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v1.0.3#readme" class="version-selector__version">
+                                                    v1.0.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v1.0.2#readme" class="version-selector__version">
+                                                    v1.0.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v1.0.1#readme" class="version-selector__version">
+                                                    v1.0.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v1.0.0#readme" class="version-selector__version">
+                                                    v1.0.0
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/promise">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../promise/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../promise/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/promise:^2.8.0</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (348 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/igorw">
+                                    <img src="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=80 2x" alt="igorw" title="igorw (26 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (20 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (16 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cboden">
+                                    <img src="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=80 2x" alt="cboden" title="cboden (4 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/carusogabriel">
+                                    <img src="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=80 2x" alt="carusogabriel" title="carusogabriel (3 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/smscr">
+                                    <img src="https://avatars1.githubusercontent.com/u/13821666?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/13821666?v=4&amp;s=80 2x" alt="smscr" title="smscr (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/CharlotteDunois">
+                                    <img src="https://avatars0.githubusercontent.com/u/4529744?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/4529744?v=4&amp;s=80 2x" alt="CharlotteDunois" title="CharlotteDunois (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/danielecr">
+                                    <img src="https://avatars3.githubusercontent.com/u/2484638?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/2484638?v=4&amp;s=80 2x" alt="danielecr" title="danielecr (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/joshdifabio">
+                                    <img src="https://avatars1.githubusercontent.com/u/5609851?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/5609851?v=4&amp;s=80 2x" alt="joshdifabio" title="joshdifabio (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/mtdowling">
+                                    <img src="https://avatars3.githubusercontent.com/u/190930?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/190930?v=4&amp;s=80 2x" alt="mtdowling" title="mtdowling (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/seregazhuk">
+                                    <img src="https://avatars3.githubusercontent.com/u/9959761?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/9959761?v=4&amp;s=80 2x" alt="seregazhuk" title="seregazhuk (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/nawarian">
+                                    <img src="https://avatars2.githubusercontent.com/u/3905582?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/3905582?v=4&amp;s=80 2x" alt="nawarian" title="nawarian (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-promise-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-promise-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,1 6,1 12,1 18,1 24,1 30,1 36,1 42,1 48,2 54,2 60,1 66,1 72,1 78,1 84,1 90,1 96,1 102,1 108,8 114,1 120,1 126,1 132,1 138,1 144,1 150,2 156,5 162,1 168,1 174,1 180,1 186,1 192,1 198,1 204,1 210,2 216,3 222,1 228,1 234,5 240,4 246,1 252,1 258,1 264,1 270,1 276,1 282,1 288,1 294,1 300,1 306,1" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-promise-participation-gradient);mask:url(#reactphp-promise-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/promise/index.html b/promise/index.html
new file mode 100644
index 000000000..bc4b3166a
--- /dev/null
+++ b/promise/index.html
@@ -0,0 +1,1217 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>Promise: 
+Promise - ReactPHP</title>
+
+        <meta name="description" content="Promises/A implementation for PHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+            </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                                    <h1>Promise</h1>
+
+                    
+<p>A lightweight implementation of
+<a href="http://wiki.commonjs.org/wiki/Promises/A" rel="nofollow">CommonJS Promises/A</a> for PHP.</p>
+<p><a href="http://travis-ci.org/reactphp/promise" rel="nofollow"><img src="https://camo.githubusercontent.com/600ab94a6961b64703d4d675fe0e624410a8d9e8/68747470733a2f2f7472617669732d63692e6f72672f72656163747068702f70726f6d6973652e7376673f6272616e63683d6d6173746572" alt="Build Status" data-canonical-src="https://travis-ci.org/reactphp/promise.svg?branch=master" style="max-width:100%;"></a>
+<a href="https://coveralls.io/github/reactphp/promise?branch=master" rel="nofollow"><img src="https://camo.githubusercontent.com/4d3b42a90d3f06222dff26aec1a2d4df69351397/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f72656163747068702f70726f6d6973652f62616467652e7376673f6272616e63683d6d6173746572" alt="Coverage Status" data-canonical-src="https://coveralls.io/repos/github/reactphp/promise/badge.svg?branch=master" style="max-width:100%;"></a></p>
+<h2>
+<a id="table-of-contents" class="anchor" href="#table-of-contents" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Table of Contents</h2>
+<ol>
+<li><a href="#introduction">Introduction</a></li>
+<li>
+<a href="#concepts">Concepts</a>
+<ul>
+<li><a href="#deferred">Deferred</a></li>
+<li><a href="#promise-1">Promise</a></li>
+</ul>
+</li>
+<li>
+<a href="#api">API</a>
+<ul>
+<li>
+<a href="#deferred-1">Deferred</a>
+<ul>
+<li><a href="#deferredpromise">Deferred::promise()</a></li>
+<li><a href="#deferredresolve">Deferred::resolve()</a></li>
+<li><a href="#deferredreject">Deferred::reject()</a></li>
+<li><a href="#deferrednotify">Deferred::notify()</a></li>
+</ul>
+</li>
+<li>
+<a href="#promiseinterface">PromiseInterface</a>
+<ul>
+<li><a href="#promiseinterfacethen">PromiseInterface::then()</a></li>
+</ul>
+</li>
+<li>
+<a href="#extendedpromiseinterface">ExtendedPromiseInterface</a>
+<ul>
+<li><a href="#extendedpromiseinterfacedone">ExtendedPromiseInterface::done()</a></li>
+<li><a href="#extendedpromiseinterfaceotherwise">ExtendedPromiseInterface::otherwise()</a></li>
+<li><a href="#extendedpromiseinterfacealways">ExtendedPromiseInterface::always()</a></li>
+<li><a href="#extendedpromiseinterfaceprogress">ExtendedPromiseInterface::progress()</a></li>
+</ul>
+</li>
+<li>
+<a href="#cancellablepromiseinterface">CancellablePromiseInterface</a>
+<ul>
+<li><a href="#cancellablepromiseinterfacecancel">CancellablePromiseInterface::cancel()</a></li>
+</ul>
+</li>
+<li><a href="#promise-2">Promise</a></li>
+<li><a href="#fulfilledpromise">FulfilledPromise</a></li>
+<li><a href="#rejectedpromise">RejectedPromise</a></li>
+<li><a href="#lazypromise">LazyPromise</a></li>
+<li>
+<a href="#functions">Functions</a>
+<ul>
+<li><a href="#resolve">resolve()</a></li>
+<li><a href="#reject">reject()</a></li>
+<li><a href="#all">all()</a></li>
+<li><a href="#race">race()</a></li>
+<li><a href="#any">any()</a></li>
+<li><a href="#some">some()</a></li>
+<li><a href="#map">map()</a></li>
+<li><a href="#reduce">reduce()</a></li>
+</ul>
+</li>
+<li><a href="#promisorinterface">PromisorInterface</a></li>
+</ul>
+</li>
+<li>
+<a href="#examples">Examples</a>
+<ul>
+<li><a href="#how-to-use-deferred">How to use Deferred</a></li>
+<li>
+<a href="#how-promise-forwarding-works">How promise forwarding works</a>
+<ul>
+<li><a href="#resolution-forwarding">Resolution forwarding</a></li>
+<li><a href="#rejection-forwarding">Rejection forwarding</a></li>
+<li><a href="#mixed-resolution-and-rejection-forwarding">Mixed resolution and rejection forwarding</a></li>
+<li><a href="#progress-event-forwarding">Progress event forwarding</a></li>
+</ul>
+</li>
+<li><a href="#done-vs-then">done() vs. then()</a></li>
+</ul>
+</li>
+<li><a href="#install">Install</a></li>
+<li><a href="#credits">Credits</a></li>
+<li><a href="#license">License</a></li>
+</ol>
+<h2>
+<a id="introduction" class="anchor" href="#introduction" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Introduction</h2>
+<p>Promise is a library implementing
+<a href="http://wiki.commonjs.org/wiki/Promises/A" rel="nofollow">CommonJS Promises/A</a> for PHP.</p>
+<p>It also provides several other useful promise-related concepts, such as joining
+multiple promises and mapping and reducing collections of promises.</p>
+<p>If you've never heard about promises before,
+<a href="https://gist.github.com/3889970">read this first</a>.</p>
+<h2>
+<a id="concepts" class="anchor" href="#concepts" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Concepts</h2>
+<h3>
+<a id="deferred" class="anchor" href="#deferred" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Deferred</h3>
+<p>A <strong>Deferred</strong> represents a computation or unit of work that may not have
+completed yet. Typically (but not always), that computation will be something
+that executes asynchronously and completes at some point in the future.</p>
+<h3>
+<a id="promise-1" class="anchor" href="#promise-1" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Promise</h3>
+<p>While a deferred represents the computation itself, a <strong>Promise</strong> represents
+the result of that computation. Thus, each deferred has a promise that acts as
+a placeholder for its actual result.</p>
+<h2>
+<a id="api" class="anchor" href="#api" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>API</h2>
+<h3>
+<a id="deferred-1" class="anchor" href="#deferred-1" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Deferred</h3>
+<p>A deferred represents an operation whose resolution is pending. It has separate
+promise and resolver parts.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$deferred</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Promise\</span><span class="pl-c1">Deferred</span>();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> <span class="pl-smi">$deferred</span><span class="pl-k">-&gt;</span>promise();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$deferred</span><span class="pl-k">-&gt;</span>resolve(<span class="pl-c1">mixed</span> <span class="pl-smi">$value</span> <span class="pl-k">=</span> <span class="pl-c1">null</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$deferred</span><span class="pl-k">-&gt;</span>reject(<span class="pl-c1">mixed</span> <span class="pl-smi">$reason</span> <span class="pl-k">=</span> <span class="pl-c1">null</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$deferred</span><span class="pl-k">-&gt;</span>notify(<span class="pl-c1">mixed</span> <span class="pl-smi">$update</span> <span class="pl-k">=</span> <span class="pl-c1">null</span>);</span></pre></div>
+<p>The <code>promise</code> method returns the promise of the deferred.</p>
+<p>The <code>resolve</code> and <code>reject</code> methods control the state of the deferred.</p>
+<p>The deprecated <code>notify</code> method is for progress notification.</p>
+<p>The constructor of the <code>Deferred</code> accepts an optional <code>$canceller</code> argument.
+See <a href="#promise-2">Promise</a> for more information.</p>
+<h4>
+<a id="deferredpromise" class="anchor" href="#deferredpromise" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Deferred::promise()</h4>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> <span class="pl-smi">$deferred</span><span class="pl-k">-&gt;</span>promise();</span></pre></div>
+<p>Returns the promise of the deferred, which you can hand out to others while
+keeping the authority to modify its state to yourself.</p>
+<h4>
+<a id="deferredresolve" class="anchor" href="#deferredresolve" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Deferred::resolve()</h4>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$deferred</span><span class="pl-k">-&gt;</span>resolve(<span class="pl-c1">mixed</span> <span class="pl-smi">$value</span> <span class="pl-k">=</span> <span class="pl-c1">null</span>);</span></pre></div>
+<p>Resolves the promise returned by <code>promise()</code>. All consumers are notified by
+having <code>$onFulfilled</code> (which they registered via <code>$promise-&gt;then()</code>) called with
+<code>$value</code>.</p>
+<p>If <code>$value</code> itself is a promise, the promise will transition to the state of
+this promise once it is resolved.</p>
+<h4>
+<a id="deferredreject" class="anchor" href="#deferredreject" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Deferred::reject()</h4>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$deferred</span><span class="pl-k">-&gt;</span>reject(<span class="pl-c1">mixed</span> <span class="pl-smi">$reason</span> <span class="pl-k">=</span> <span class="pl-c1">null</span>);</span></pre></div>
+<p>Rejects the promise returned by <code>promise()</code>, signalling that the deferred's
+computation failed.
+All consumers are notified by having <code>$onRejected</code> (which they registered via
+<code>$promise-&gt;then()</code>) called with <code>$reason</code>.</p>
+<p>If <code>$reason</code> itself is a promise, the promise will be rejected with the outcome
+of this promise regardless whether it fulfills or rejects.</p>
+<h4>
+<a id="deferrednotify" class="anchor" href="#deferrednotify" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Deferred::notify()</h4>
+<blockquote>
+<p>Deprecated in v2.6.0: Progress support is deprecated and should not be used anymore.</p>
+</blockquote>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$deferred</span><span class="pl-k">-&gt;</span>notify(<span class="pl-c1">mixed</span> <span class="pl-smi">$update</span> <span class="pl-k">=</span> <span class="pl-c1">null</span>);</span></pre></div>
+<p>Triggers progress notifications, to indicate to consumers that the computation
+is making progress toward its result.</p>
+<p>All consumers are notified by having <code>$onProgress</code> (which they registered via
+<code>$promise-&gt;then()</code>) called with <code>$update</code>.</p>
+<h3>
+<a id="promiseinterface" class="anchor" href="#promiseinterface" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>PromiseInterface</h3>
+<p>The promise interface provides the common interface for all promise
+implementations.</p>
+<p>A promise represents an eventual outcome, which is either fulfillment (success)
+and an associated value, or rejection (failure) and an associated reason.</p>
+<p>Once in the fulfilled or rejected state, a promise becomes immutable.
+Neither its state nor its result (or error) can be modified.</p>
+<h4>
+<a id="implementations" class="anchor" href="#implementations" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Implementations</h4>
+<ul>
+<li><a href="#promise-2">Promise</a></li>
+<li>
+<a href="#fulfilledpromise">FulfilledPromise</a> (deprecated)</li>
+<li>
+<a href="#rejectedpromise">RejectedPromise</a> (deprecated)</li>
+<li>
+<a href="#lazypromise">LazyPromise</a> (deprecated)</li>
+</ul>
+<h4>
+<a id="promiseinterfacethen" class="anchor" href="#promiseinterfacethen" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>PromiseInterface::then()</h4>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$transformedPromise</span> <span class="pl-k">=</span> <span class="pl-smi">$promise</span><span class="pl-k">-&gt;</span>then(<span class="pl-c1">callable</span> <span class="pl-smi">$onFulfilled</span> <span class="pl-k">=</span> <span class="pl-c1">null</span>, <span class="pl-c1">callable</span> <span class="pl-smi">$onRejected</span> <span class="pl-k">=</span> <span class="pl-c1">null</span>, <span class="pl-c1">callable</span> <span class="pl-smi">$onProgress</span> <span class="pl-k">=</span> <span class="pl-c1">null</span>);</span></pre></div>
+<p>Transforms a promise's value by applying a function to the promise's fulfillment
+or rejection value. Returns a new promise for the transformed result.</p>
+<p>The <code>then()</code> method registers new fulfilled, rejection and progress handlers
+with a promise (all parameters are optional):</p>
+<ul>
+<li>
+<code>$onFulfilled</code> will be invoked once the promise is fulfilled and passed
+the result as the first argument.</li>
+<li>
+<code>$onRejected</code> will be invoked once the promise is rejected and passed the
+reason as the first argument.</li>
+<li>
+<code>$onProgress</code> (deprecated) will be invoked whenever the producer of the promise
+triggers progress notifications and passed a single argument (whatever it
+wants) to indicate progress.</li>
+</ul>
+<p>It returns a new promise that will fulfill with the return value of either
+<code>$onFulfilled</code> or <code>$onRejected</code>, whichever is called, or will reject with
+the thrown exception if either throws.</p>
+<p>A promise makes the following guarantees about handlers registered in
+the same call to <code>then()</code>:</p>
+<ol>
+<li>Only one of <code>$onFulfilled</code> or <code>$onRejected</code> will be called,
+never both.</li>
+<li>
+<code>$onFulfilled</code> and <code>$onRejected</code> will never be called more
+than once.</li>
+<li>
+<code>$onProgress</code> (deprecated) may be called multiple times.</li>
+</ol>
+<h4>
+<a id="see-also" class="anchor" href="#see-also" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>See also</h4>
+<ul>
+<li>
+<a href="#resolve">resolve()</a> - Creating a resolved promise</li>
+<li>
+<a href="#reject">reject()</a> - Creating a rejected promise</li>
+<li><a href="#extendedpromiseinterfacedone">ExtendedPromiseInterface::done()</a></li>
+<li><a href="#done-vs-then">done() vs. then()</a></li>
+</ul>
+<h3>
+<a id="extendedpromiseinterface" class="anchor" href="#extendedpromiseinterface" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>ExtendedPromiseInterface</h3>
+<p>The ExtendedPromiseInterface extends the PromiseInterface with useful shortcut
+and utility methods which are not part of the Promises/A specification.</p>
+<h4>
+<a id="implementations-1" class="anchor" href="#implementations-1" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Implementations</h4>
+<ul>
+<li><a href="#promise-1">Promise</a></li>
+<li>
+<a href="#fulfilledpromise">FulfilledPromise</a> (deprecated)</li>
+<li>
+<a href="#rejectedpromise">RejectedPromise</a> (deprecated)</li>
+<li>
+<a href="#lazypromise">LazyPromise</a> (deprecated)</li>
+</ul>
+<h4>
+<a id="extendedpromiseinterfacedone" class="anchor" href="#extendedpromiseinterfacedone" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>ExtendedPromiseInterface::done()</h4>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span><span class="pl-k">-&gt;</span>done(<span class="pl-c1">callable</span> <span class="pl-smi">$onFulfilled</span> <span class="pl-k">=</span> <span class="pl-c1">null</span>, <span class="pl-c1">callable</span> <span class="pl-smi">$onRejected</span> <span class="pl-k">=</span> <span class="pl-c1">null</span>, <span class="pl-c1">callable</span> <span class="pl-smi">$onProgress</span> <span class="pl-k">=</span> <span class="pl-c1">null</span>);</span></pre></div>
+<p>Consumes the promise's ultimate value if the promise fulfills, or handles the
+ultimate error.</p>
+<p>It will cause a fatal error if either <code>$onFulfilled</code> or <code>$onRejected</code> throw or
+return a rejected promise.</p>
+<p>Since the purpose of <code>done()</code> is consumption rather than transformation,
+<code>done()</code> always returns <code>null</code>.</p>
+<h4>
+<a id="see-also-1" class="anchor" href="#see-also-1" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>See also</h4>
+<ul>
+<li><a href="#promiseinterfacethen">PromiseInterface::then()</a></li>
+<li><a href="#done-vs-then">done() vs. then()</a></li>
+</ul>
+<h4>
+<a id="extendedpromiseinterfaceotherwise" class="anchor" href="#extendedpromiseinterfaceotherwise" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>ExtendedPromiseInterface::otherwise()</h4>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span><span class="pl-k">-&gt;</span>otherwise(<span class="pl-c1">callable</span> <span class="pl-smi">$onRejected</span>);</span></pre></div>
+<p>Registers a rejection handler for promise. It is a shortcut for:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span><span class="pl-k">-&gt;</span>then(<span class="pl-c1">null</span>, <span class="pl-smi">$onRejected</span>);</span></pre></div>
+<p>Additionally, you can type hint the <code>$reason</code> argument of <code>$onRejected</code> to catch
+only specific errors.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span></span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>otherwise(<span class="pl-k">function</span> (<span class="pl-c1">\RuntimeException</span> <span class="pl-smi">$reason</span>) {</span>
+<span class="pl-s1">        <span class="pl-c"><span class="pl-c">//</span> Only catch \RuntimeException instances</span></span>
+<span class="pl-s1">        <span class="pl-c"><span class="pl-c">//</span> All other types of errors will propagate automatically</span></span>
+<span class="pl-s1">    })</span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>otherwise(<span class="pl-k">function</span> (<span class="pl-smi">$reason</span>) {</span>
+<span class="pl-s1">        <span class="pl-c"><span class="pl-c">//</span> Catch other errors</span></span>
+<span class="pl-s1">    )};</span></pre></div>
+<h4>
+<a id="extendedpromiseinterfacealways" class="anchor" href="#extendedpromiseinterfacealways" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>ExtendedPromiseInterface::always()</h4>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$newPromise</span> <span class="pl-k">=</span> <span class="pl-smi">$promise</span><span class="pl-k">-&gt;</span>always(<span class="pl-c1">callable</span> <span class="pl-smi">$onFulfilledOrRejected</span>);</span></pre></div>
+<p>Allows you to execute "cleanup" type tasks in a promise chain.</p>
+<p>It arranges for <code>$onFulfilledOrRejected</code> to be called, with no arguments,
+when the promise is either fulfilled or rejected.</p>
+<ul>
+<li>If <code>$promise</code> fulfills, and <code>$onFulfilledOrRejected</code> returns successfully,
+<code>$newPromise</code> will fulfill with the same value as <code>$promise</code>.</li>
+<li>If <code>$promise</code> fulfills, and <code>$onFulfilledOrRejected</code> throws or returns a
+rejected promise, <code>$newPromise</code> will reject with the thrown exception or
+rejected promise's reason.</li>
+<li>If <code>$promise</code> rejects, and <code>$onFulfilledOrRejected</code> returns successfully,
+<code>$newPromise</code> will reject with the same reason as <code>$promise</code>.</li>
+<li>If <code>$promise</code> rejects, and <code>$onFulfilledOrRejected</code> throws or returns a
+rejected promise, <code>$newPromise</code> will reject with the thrown exception or
+rejected promise's reason.</li>
+</ul>
+<p><code>always()</code> behaves similarly to the synchronous finally statement. When combined
+with <code>otherwise()</code>, <code>always()</code> allows you to write code that is similar to the familiar
+synchronous catch/finally pair.</p>
+<p>Consider the following synchronous code:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-k">try</span> {</span>
+<span class="pl-s1">  <span class="pl-k">return</span> doSomething();</span>
+<span class="pl-s1">} <span class="pl-k">catch</span>(<span class="pl-c1">\</span><span class="pl-c1">Exception</span> <span class="pl-smi">$e</span>) {</span>
+<span class="pl-s1">    <span class="pl-k">return</span> handleError(<span class="pl-smi">$e</span>);</span>
+<span class="pl-s1">} <span class="pl-k">finally</span> {</span>
+<span class="pl-s1">    cleanup();</span>
+<span class="pl-s1">}</span></pre></div>
+<p>Similar asynchronous code (with <code>doSomething()</code> that returns a promise) can be
+written:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-k">return</span> doSomething()</span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>otherwise(<span class="pl-s"><span class="pl-pds">'</span>handleError<span class="pl-pds">'</span></span>)</span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>always(<span class="pl-s"><span class="pl-pds">'</span>cleanup<span class="pl-pds">'</span></span>);</span></pre></div>
+<h4>
+<a id="extendedpromiseinterfaceprogress" class="anchor" href="#extendedpromiseinterfaceprogress" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>ExtendedPromiseInterface::progress()</h4>
+<blockquote>
+<p>Deprecated in v2.6.0: Progress support is deprecated and should not be used anymore.</p>
+</blockquote>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span><span class="pl-k">-&gt;</span>progress(<span class="pl-c1">callable</span> <span class="pl-smi">$onProgress</span>);</span></pre></div>
+<p>Registers a handler for progress updates from promise. It is a shortcut for:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span><span class="pl-k">-&gt;</span>then(<span class="pl-c1">null</span>, <span class="pl-c1">null</span>, <span class="pl-smi">$onProgress</span>);</span></pre></div>
+<h3>
+<a id="cancellablepromiseinterface" class="anchor" href="#cancellablepromiseinterface" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>CancellablePromiseInterface</h3>
+<p>A cancellable promise provides a mechanism for consumers to notify the creator
+of the promise that they are not longer interested in the result of an
+operation.</p>
+<h4>
+<a id="cancellablepromiseinterfacecancel" class="anchor" href="#cancellablepromiseinterfacecancel" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>CancellablePromiseInterface::cancel()</h4>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span><span class="pl-k">-&gt;</span>cancel();</span></pre></div>
+<p>The <code>cancel()</code> method notifies the creator of the promise that there is no
+further interest in the results of the operation.</p>
+<p>Once a promise is settled (either fulfilled or rejected), calling <code>cancel()</code> on
+a promise has no effect.</p>
+<h4>
+<a id="implementations-2" class="anchor" href="#implementations-2" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Implementations</h4>
+<ul>
+<li><a href="#promise-1">Promise</a></li>
+<li>
+<a href="#fulfilledpromise">FulfilledPromise</a> (deprecated)</li>
+<li>
+<a href="#rejectedpromise">RejectedPromise</a> (deprecated)</li>
+<li>
+<a href="#lazypromise">LazyPromise</a> (deprecated)</li>
+</ul>
+<h3>
+<a id="promise-2" class="anchor" href="#promise-2" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Promise</h3>
+<p>Creates a promise whose state is controlled by the functions passed to
+<code>$resolver</code>.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$resolver</span> <span class="pl-k">=</span> <span class="pl-k">function</span> (<span class="pl-k">callable</span> <span class="pl-smi">$resolve</span>, <span class="pl-k">callable</span> <span class="pl-smi">$reject</span>, <span class="pl-k">callable</span> <span class="pl-smi">$notify</span>) {</span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> Do some work, possibly asynchronously, and then</span></span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> resolve or reject. You can notify of progress events (deprecated)</span></span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> along the way if you want/need.</span></span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    $<span class="pl-smi">resolve</span>(<span class="pl-smi">$awesomeResult</span>);</span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> or throw new Exception('Promise rejected');</span></span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> or $resolve($anotherPromise);</span></span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> or $reject($nastyError);</span></span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> or $notify($progressNotification);</span></span>
+<span class="pl-s1">};</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$canceller</span> <span class="pl-k">=</span> <span class="pl-k">function</span> () {</span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> Cancel/abort any running operations like network connections, streams etc.</span></span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> Reject promise by throwing an exception</span></span>
+<span class="pl-s1">    <span class="pl-k">throw</span> <span class="pl-k">new</span> <span class="pl-c1">Exception</span>(<span class="pl-s"><span class="pl-pds">'</span>Promise cancelled<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1">};</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Promise\</span><span class="pl-c1">Promise</span>(<span class="pl-smi">$resolver</span>, <span class="pl-smi">$canceller</span>);</span></pre></div>
+<p>The promise constructor receives a resolver function and an optional canceller
+function which both will be called with 3 arguments:</p>
+<ul>
+<li>
+<code>$resolve($value)</code> - Primary function that seals the fate of the
+returned promise. Accepts either a non-promise value, or another promise.
+When called with a non-promise value, fulfills promise with that value.
+When called with another promise, e.g. <code>$resolve($otherPromise)</code>, promise's
+fate will be equivalent to that of <code>$otherPromise</code>.</li>
+<li>
+<code>$reject($reason)</code> - Function that rejects the promise. It is recommended to
+just throw an exception instead of using <code>$reject()</code>.</li>
+<li>
+<code>$notify($update)</code> - Deprecated function that issues progress events for the promise.</li>
+</ul>
+<p>If the resolver or canceller throw an exception, the promise will be rejected
+with that thrown exception as the rejection reason.</p>
+<p>The resolver function will be called immediately, the canceller function only
+once all consumers called the <code>cancel()</code> method of the promise.</p>
+<h3>
+<a id="fulfilledpromise" class="anchor" href="#fulfilledpromise" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>FulfilledPromise</h3>
+<blockquote>
+<p>Deprecated in v2.8.0: External usage of <code>FulfilledPromise</code> is deprecated, use <code>resolve()</code> instead.</p>
+</blockquote>
+<p>Creates a already fulfilled promise.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> <span class="pl-c1">React\Promise\</span>FulfilledPromise(<span class="pl-smi">$value</span>);</span></pre></div>
+<p>Note, that <code>$value</code> <strong>cannot</strong> be a promise. It's recommended to use
+<a href="#resolve">resolve()</a> for creating resolved promises.</p>
+<h3>
+<a id="rejectedpromise" class="anchor" href="#rejectedpromise" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>RejectedPromise</h3>
+<blockquote>
+<p>Deprecated in v2.8.0: External usage of <code>RejectedPromise</code> is deprecated, use <code>reject()</code> instead.</p>
+</blockquote>
+<p>Creates a already rejected promise.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> <span class="pl-c1">React\Promise\</span>RejectedPromise(<span class="pl-smi">$reason</span>);</span></pre></div>
+<p>Note, that <code>$reason</code> <strong>cannot</strong> be a promise. It's recommended to use
+<a href="#reject">reject()</a> for creating rejected promises.</p>
+<h3>
+<a id="lazypromise" class="anchor" href="#lazypromise" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>LazyPromise</h3>
+<blockquote>
+<p>Deprecated in v2.8.0: LazyPromise is deprecated and should not be used anymore.</p>
+</blockquote>
+<p>Creates a promise which will be lazily initialized by <code>$factory</code> once a consumer
+calls the <code>then()</code> method.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$factory</span> <span class="pl-k">=</span> <span class="pl-k">function</span> () {</span>
+<span class="pl-s1">    <span class="pl-smi">$deferred</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Promise\</span><span class="pl-c1">Deferred</span>();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> Do some heavy stuff here and resolve the deferred once completed</span></span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-smi">$deferred</span><span class="pl-k">-&gt;</span>promise();</span>
+<span class="pl-s1">};</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Promise\</span><span class="pl-c1">LazyPromise</span>(<span class="pl-smi">$factory</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> $factory will only be executed once we call then()</span></span>
+<span class="pl-s1"><span class="pl-smi">$promise</span><span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$value</span>) {</span>
+<span class="pl-s1">});</span></pre></div>
+<h3>
+<a id="functions" class="anchor" href="#functions" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Functions</h3>
+<p>Useful functions for creating, joining, mapping and reducing collections of
+promises.</p>
+<p>All functions working on promise collections (like <code>all()</code>, <code>race()</code>, <code>some()</code>
+etc.) support cancellation. This means, if you call <code>cancel()</code> on the returned
+promise, all promises in the collection are cancelled. If the collection itself
+is a promise which resolves to an array, this promise is also cancelled.</p>
+<h4>
+<a id="resolve" class="anchor" href="#resolve" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>resolve()</h4>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> <span class="pl-c1">React\Promise\</span>resolve(<span class="pl-c1">mixed</span> <span class="pl-smi">$promiseOrValue</span>);</span></pre></div>
+<p>Creates a promise for the supplied <code>$promiseOrValue</code>.</p>
+<p>If <code>$promiseOrValue</code> is a value, it will be the resolution value of the
+returned promise.</p>
+<p>If <code>$promiseOrValue</code> is a thenable (any object that provides a <code>then()</code> method),
+a trusted promise that follows the state of the thenable is returned.</p>
+<p>If <code>$promiseOrValue</code> is a promise, it will be returned as is.</p>
+<p>Note: The promise returned is always a promise implementing
+<a href="#extendedpromiseinterface">ExtendedPromiseInterface</a>. If you pass in a custom
+promise which only implements <a href="#promiseinterface">PromiseInterface</a>, this
+promise will be assimilated to a extended promise following <code>$promiseOrValue</code>.</p>
+<h4>
+<a id="reject" class="anchor" href="#reject" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>reject()</h4>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> <span class="pl-c1">React\Promise\</span>reject(<span class="pl-c1">mixed</span> <span class="pl-smi">$promiseOrValue</span>);</span></pre></div>
+<p>Creates a rejected promise for the supplied <code>$promiseOrValue</code>.</p>
+<p>If <code>$promiseOrValue</code> is a value, it will be the rejection value of the
+returned promise.</p>
+<p>If <code>$promiseOrValue</code> is a promise, its completion value will be the rejected
+value of the returned promise.</p>
+<p>This can be useful in situations where you need to reject a promise without
+throwing an exception. For example, it allows you to propagate a rejection with
+the value of another promise.</p>
+<h4>
+<a id="all" class="anchor" href="#all" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>all()</h4>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> <span class="pl-c1">React\Promise\</span>all(<span class="pl-k">array</span><span class="pl-k">|</span><span class="pl-c1">React\Promise\</span><span class="pl-c1">PromiseInterface</span> <span class="pl-smi">$promisesOrValues</span>);</span></pre></div>
+<p>Returns a promise that will resolve only once all the items in
+<code>$promisesOrValues</code> have resolved. The resolution value of the returned promise
+will be an array containing the resolution values of each of the items in
+<code>$promisesOrValues</code>.</p>
+<h4>
+<a id="race" class="anchor" href="#race" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>race()</h4>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> <span class="pl-c1">React\Promise\</span>race(<span class="pl-k">array</span><span class="pl-k">|</span><span class="pl-c1">React\Promise\</span><span class="pl-c1">PromiseInterface</span> <span class="pl-smi">$promisesOrValues</span>);</span></pre></div>
+<p>Initiates a competitive race that allows one winner. Returns a promise which is
+resolved in the same way the first settled promise resolves.</p>
+<h4>
+<a id="any" class="anchor" href="#any" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>any()</h4>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> <span class="pl-c1">React\Promise\</span>any(<span class="pl-k">array</span><span class="pl-k">|</span><span class="pl-c1">React\Promise\</span><span class="pl-c1">PromiseInterface</span> <span class="pl-smi">$promisesOrValues</span>);</span></pre></div>
+<p>Returns a promise that will resolve when any one of the items in
+<code>$promisesOrValues</code> resolves. The resolution value of the returned promise
+will be the resolution value of the triggering item.</p>
+<p>The returned promise will only reject if <em>all</em> items in <code>$promisesOrValues</code> are
+rejected. The rejection value will be an array of all rejection reasons.</p>
+<p>The returned promise will also reject with a <code>React\Promise\Exception\LengthException</code>
+if <code>$promisesOrValues</code> contains 0 items.</p>
+<h4>
+<a id="some" class="anchor" href="#some" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>some()</h4>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> <span class="pl-c1">React\Promise\</span>some(<span class="pl-k">array</span><span class="pl-k">|</span><span class="pl-c1">React\Promise\</span><span class="pl-c1">PromiseInterface</span> <span class="pl-smi">$promisesOrValues</span>, <span class="pl-k">integer</span> <span class="pl-smi">$howMany</span>);</span></pre></div>
+<p>Returns a promise that will resolve when <code>$howMany</code> of the supplied items in
+<code>$promisesOrValues</code> resolve. The resolution value of the returned promise
+will be an array of length <code>$howMany</code> containing the resolution values of the
+triggering items.</p>
+<p>The returned promise will reject if it becomes impossible for <code>$howMany</code> items
+to resolve (that is, when <code>(count($promisesOrValues) - $howMany) + 1</code> items
+reject). The rejection value will be an array of
+<code>(count($promisesOrValues) - $howMany) + 1</code> rejection reasons.</p>
+<p>The returned promise will also reject with a <code>React\Promise\Exception\LengthException</code>
+if <code>$promisesOrValues</code> contains less items than <code>$howMany</code>.</p>
+<h4>
+<a id="map" class="anchor" href="#map" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>map()</h4>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> <span class="pl-c1">React\Promise\</span>map(<span class="pl-k">array</span><span class="pl-k">|</span><span class="pl-c1">React\Promise\</span><span class="pl-c1">PromiseInterface</span> <span class="pl-smi">$promisesOrValues</span>, <span class="pl-c1">callable</span> <span class="pl-smi">$mapFunc</span>);</span></pre></div>
+<p>Traditional map function, similar to <code>array_map()</code>, but allows input to contain
+promises and/or values, and <code>$mapFunc</code> may return either a value or a promise.</p>
+<p>The map function receives each item as argument, where item is a fully resolved
+value of a promise or value in <code>$promisesOrValues</code>.</p>
+<h4>
+<a id="reduce" class="anchor" href="#reduce" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>reduce()</h4>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> <span class="pl-c1">React\Promise\</span>reduce(<span class="pl-k">array</span><span class="pl-k">|</span><span class="pl-c1">React\Promise\</span><span class="pl-c1">PromiseInterface</span> <span class="pl-smi">$promisesOrValues</span>, <span class="pl-c1">callable</span> <span class="pl-smi">$reduceFunc</span> , <span class="pl-smi">$initialValue</span> <span class="pl-k">=</span> <span class="pl-c1">null</span>);</span></pre></div>
+<p>Traditional reduce function, similar to <code>array_reduce()</code>, but input may contain
+promises and/or values, and <code>$reduceFunc</code> may return either a value or a
+promise, <em>and</em> <code>$initialValue</code> may be a promise or a value for the starting
+value.</p>
+<h3>
+<a id="promisorinterface" class="anchor" href="#promisorinterface" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>PromisorInterface</h3>
+<p>The <code>React\Promise\PromisorInterface</code> provides a common interface for objects
+that provide a promise. <code>React\Promise\Deferred</code> implements it, but since it
+is part of the public API anyone can implement it.</p>
+<h2>
+<a id="examples" class="anchor" href="#examples" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Examples</h2>
+<h3>
+<a id="how-to-use-deferred" class="anchor" href="#how-to-use-deferred" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>How to use Deferred</h3>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-k">function</span> <span class="pl-en">getAwesomeResultPromise</span>()</span>
+<span class="pl-s1">{</span>
+<span class="pl-s1">    <span class="pl-smi">$deferred</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Promise\</span><span class="pl-c1">Deferred</span>();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> Execute a Node.js-style function using the callback pattern</span></span>
+<span class="pl-s1">    computeAwesomeResultAsynchronously(<span class="pl-k">function</span> (<span class="pl-smi">$error</span>, <span class="pl-smi">$result</span>) <span class="pl-k">use</span> (<span class="pl-smi">$deferred</span>) {</span>
+<span class="pl-s1">        <span class="pl-k">if</span> (<span class="pl-smi">$error</span>) {</span>
+<span class="pl-s1">            <span class="pl-smi">$deferred</span><span class="pl-k">-&gt;</span>reject(<span class="pl-smi">$error</span>);</span>
+<span class="pl-s1">        } <span class="pl-k">else</span> {</span>
+<span class="pl-s1">            <span class="pl-smi">$deferred</span><span class="pl-k">-&gt;</span>resolve(<span class="pl-smi">$result</span>);</span>
+<span class="pl-s1">        }</span>
+<span class="pl-s1">    });</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> Return the promise</span></span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-smi">$deferred</span><span class="pl-k">-&gt;</span>promise();</span>
+<span class="pl-s1">}</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">getAwesomeResultPromise()</span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>then(</span>
+<span class="pl-s1">        <span class="pl-k">function</span> (<span class="pl-smi">$value</span>) {</span>
+<span class="pl-s1">            <span class="pl-c"><span class="pl-c">//</span> Deferred resolved, do something with $value</span></span>
+<span class="pl-s1">        },</span>
+<span class="pl-s1">        <span class="pl-k">function</span> (<span class="pl-smi">$reason</span>) {</span>
+<span class="pl-s1">            <span class="pl-c"><span class="pl-c">//</span> Deferred rejected, do something with $reason</span></span>
+<span class="pl-s1">        },</span>
+<span class="pl-s1">        <span class="pl-k">function</span> (<span class="pl-smi">$update</span>) {</span>
+<span class="pl-s1">            <span class="pl-c"><span class="pl-c">//</span> Progress notification triggered, do something with $update</span></span>
+<span class="pl-s1">        }</span>
+<span class="pl-s1">    );</span></pre></div>
+<h3>
+<a id="how-promise-forwarding-works" class="anchor" href="#how-promise-forwarding-works" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>How promise forwarding works</h3>
+<p>A few simple examples to show how the mechanics of Promises/A forwarding works.
+These examples are contrived, of course, and in real usage, promise chains will
+typically be spread across several function calls, or even several levels of
+your application architecture.</p>
+<h4>
+<a id="resolution-forwarding" class="anchor" href="#resolution-forwarding" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Resolution forwarding</h4>
+<p>Resolved promises forward resolution values to the next promise.
+The first promise, <code>$deferred-&gt;promise()</code>, will resolve with the value passed
+to <code>$deferred-&gt;resolve()</code> below.</p>
+<p>Each call to <code>then()</code> returns a new promise that will resolve with the return
+value of the previous handler. This creates a promise "pipeline".</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$deferred</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Promise\</span><span class="pl-c1">Deferred</span>();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$deferred</span><span class="pl-k">-&gt;</span>promise()</span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$x</span>) {</span>
+<span class="pl-s1">        <span class="pl-c"><span class="pl-c">//</span> $x will be the value passed to $deferred-&gt;resolve() below</span></span>
+<span class="pl-s1">        <span class="pl-c"><span class="pl-c">//</span> and returns a *new promise* for $x + 1</span></span>
+<span class="pl-s1">        <span class="pl-k">return</span> <span class="pl-smi">$x</span> <span class="pl-k">+</span> <span class="pl-c1">1</span>;</span>
+<span class="pl-s1">    })</span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$x</span>) {</span>
+<span class="pl-s1">        <span class="pl-c"><span class="pl-c">//</span> $x === 2</span></span>
+<span class="pl-s1">        <span class="pl-c"><span class="pl-c">//</span> This handler receives the return value of the</span></span>
+<span class="pl-s1">        <span class="pl-c"><span class="pl-c">//</span> previous handler.</span></span>
+<span class="pl-s1">        <span class="pl-k">return</span> <span class="pl-smi">$x</span> <span class="pl-k">+</span> <span class="pl-c1">1</span>;</span>
+<span class="pl-s1">    })</span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$x</span>) {</span>
+<span class="pl-s1">        <span class="pl-c"><span class="pl-c">//</span> $x === 3</span></span>
+<span class="pl-s1">        <span class="pl-c"><span class="pl-c">//</span> This handler receives the return value of the</span></span>
+<span class="pl-s1">        <span class="pl-c"><span class="pl-c">//</span> previous handler.</span></span>
+<span class="pl-s1">        <span class="pl-k">return</span> <span class="pl-smi">$x</span> <span class="pl-k">+</span> <span class="pl-c1">1</span>;</span>
+<span class="pl-s1">    })</span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$x</span>) {</span>
+<span class="pl-s1">        <span class="pl-c"><span class="pl-c">//</span> $x === 4</span></span>
+<span class="pl-s1">        <span class="pl-c"><span class="pl-c">//</span> This handler receives the return value of the</span></span>
+<span class="pl-s1">        <span class="pl-c"><span class="pl-c">//</span> previous handler.</span></span>
+<span class="pl-s1">        <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>Resolve <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$x</span>;</span>
+<span class="pl-s1">    });</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$deferred</span><span class="pl-k">-&gt;</span>resolve(<span class="pl-c1">1</span>); <span class="pl-c"><span class="pl-c">//</span> Prints "Resolve 4"</span></span></pre></div>
+<h4>
+<a id="rejection-forwarding" class="anchor" href="#rejection-forwarding" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Rejection forwarding</h4>
+<p>Rejected promises behave similarly, and also work similarly to try/catch:
+When you catch an exception, you must rethrow for it to propagate.</p>
+<p>Similarly, when you handle a rejected promise, to propagate the rejection,
+"rethrow" it by either returning a rejected promise, or actually throwing
+(since promise translates thrown exceptions into rejections)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$deferred</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Promise\</span><span class="pl-c1">Deferred</span>();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$deferred</span><span class="pl-k">-&gt;</span>promise()</span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$x</span>) {</span>
+<span class="pl-s1">        <span class="pl-k">throw</span> <span class="pl-k">new</span> <span class="pl-c1">\Exception</span>(<span class="pl-smi">$x</span> <span class="pl-k">+</span> <span class="pl-c1">1</span>);</span>
+<span class="pl-s1">    })</span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>otherwise(<span class="pl-k">function</span> (<span class="pl-c1">\Exception</span> <span class="pl-smi">$x</span>) {</span>
+<span class="pl-s1">        <span class="pl-c"><span class="pl-c">//</span> Propagate the rejection</span></span>
+<span class="pl-s1">        <span class="pl-k">throw</span> <span class="pl-smi">$x</span>;</span>
+<span class="pl-s1">    })</span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>otherwise(<span class="pl-k">function</span> (<span class="pl-c1">\Exception</span> <span class="pl-smi">$x</span>) {</span>
+<span class="pl-s1">        <span class="pl-c"><span class="pl-c">//</span> Can also propagate by returning another rejection</span></span>
+<span class="pl-s1">        <span class="pl-k">return</span> <span class="pl-c1">React\Promise\</span>reject(</span>
+<span class="pl-s1">            <span class="pl-k">new</span> <span class="pl-c1">\Exception</span>(<span class="pl-smi">$x</span><span class="pl-k">-&gt;</span>getMessage() <span class="pl-k">+</span> <span class="pl-c1">1</span>)</span>
+<span class="pl-s1">        );</span>
+<span class="pl-s1">    })</span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>otherwise(<span class="pl-k">function</span> (<span class="pl-smi">$x</span>) {</span>
+<span class="pl-s1">        <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>Reject <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$x</span><span class="pl-k">-&gt;</span>getMessage(); <span class="pl-c"><span class="pl-c">//</span> 3</span></span>
+<span class="pl-s1">    });</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$deferred</span><span class="pl-k">-&gt;</span>resolve(<span class="pl-c1">1</span>);  <span class="pl-c"><span class="pl-c">//</span> Prints "Reject 3"</span></span></pre></div>
+<h4>
+<a id="mixed-resolution-and-rejection-forwarding" class="anchor" href="#mixed-resolution-and-rejection-forwarding" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Mixed resolution and rejection forwarding</h4>
+<p>Just like try/catch, you can choose to propagate or not. Mixing resolutions and
+rejections will still forward handler results in a predictable way.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$deferred</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Promise\</span><span class="pl-c1">Deferred</span>();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$deferred</span><span class="pl-k">-&gt;</span>promise()</span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$x</span>) {</span>
+<span class="pl-s1">        <span class="pl-k">return</span> <span class="pl-smi">$x</span> <span class="pl-k">+</span> <span class="pl-c1">1</span>;</span>
+<span class="pl-s1">    })</span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$x</span>) {</span>
+<span class="pl-s1">        <span class="pl-k">throw</span> <span class="pl-k">new</span> <span class="pl-c1">\Exception</span>(<span class="pl-smi">$x</span> <span class="pl-k">+</span> <span class="pl-c1">1</span>);</span>
+<span class="pl-s1">    })</span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>otherwise(<span class="pl-k">function</span> (<span class="pl-c1">\Exception</span> <span class="pl-smi">$x</span>) {</span>
+<span class="pl-s1">        <span class="pl-c"><span class="pl-c">//</span> Handle the rejection, and don't propagate.</span></span>
+<span class="pl-s1">        <span class="pl-c"><span class="pl-c">//</span> This is like catch without a rethrow</span></span>
+<span class="pl-s1">        <span class="pl-k">return</span> <span class="pl-smi">$x</span><span class="pl-k">-&gt;</span>getMessage() <span class="pl-k">+</span> <span class="pl-c1">1</span>;</span>
+<span class="pl-s1">    })</span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$x</span>) {</span>
+<span class="pl-s1">        <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>Mixed <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$x</span>; <span class="pl-c"><span class="pl-c">//</span> 4</span></span>
+<span class="pl-s1">    });</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$deferred</span><span class="pl-k">-&gt;</span>resolve(<span class="pl-c1">1</span>);  <span class="pl-c"><span class="pl-c">//</span> Prints "Mixed 4"</span></span></pre></div>
+<h4>
+<a id="progress-event-forwarding" class="anchor" href="#progress-event-forwarding" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Progress event forwarding</h4>
+<blockquote>
+<p>Deprecated in v2.6.0: Progress support is deprecated and should not be used anymore.</p>
+</blockquote>
+<p>In the same way as resolution and rejection handlers, your progress handler
+<strong>MUST</strong> return a progress event to be propagated to the next link in the chain.
+If you return nothing, <code>null</code> will be propagated.</p>
+<p>Also in the same way as resolutions and rejections, if you don't register a
+progress handler, the update will be propagated through.</p>
+<p>If your progress handler throws an exception, the exception will be propagated
+to the next link in the chain. The best thing to do is to ensure your progress
+handlers do not throw exceptions.</p>
+<p>This gives you the opportunity to transform progress events at each step in the
+chain so that they are meaningful to the next step. It also allows you to choose
+not to transform them, and simply let them propagate untransformed, by not
+registering a progress handler.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$deferred</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Promise\</span><span class="pl-c1">Deferred</span>();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$deferred</span><span class="pl-k">-&gt;</span>promise()</span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>progress(<span class="pl-k">function</span> (<span class="pl-smi">$update</span>) {</span>
+<span class="pl-s1">        <span class="pl-k">return</span> <span class="pl-smi">$update</span> <span class="pl-k">+</span> <span class="pl-c1">1</span>;</span>
+<span class="pl-s1">    })</span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>progress(<span class="pl-k">function</span> (<span class="pl-smi">$update</span>) {</span>
+<span class="pl-s1">        <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>Progress <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$update</span>; <span class="pl-c"><span class="pl-c">//</span> 2</span></span>
+<span class="pl-s1">    });</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$deferred</span><span class="pl-k">-&gt;</span>notify(<span class="pl-c1">1</span>);  <span class="pl-c"><span class="pl-c">//</span> Prints "Progress 2"</span></span></pre></div>
+<h3>
+<a id="done-vs-then" class="anchor" href="#done-vs-then" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>done() vs. then()</h3>
+<p>The golden rule is:</p>
+<pre><code>Either return your promise, or call done() on it.
+</code></pre>
+<p>At a first glance, <code>then()</code> and <code>done()</code> seem very similar. However, there are
+important distinctions.</p>
+<p>The intent of <code>then()</code> is to transform a promise's value and to pass or return
+a new promise for the transformed value along to other parts of your code.</p>
+<p>The intent of <code>done()</code> is to consume a promise's value, transferring
+responsibility for the value to your code.</p>
+<p>In addition to transforming a value, <code>then()</code> allows you to recover from, or
+propagate intermediate errors. Any errors that are not handled will be caught
+by the promise machinery and used to reject the promise returned by <code>then()</code>.</p>
+<p>Calling <code>done()</code> transfers all responsibility for errors to your code. If an
+error (either a thrown exception or returned rejection) escapes the
+<code>$onFulfilled</code> or <code>$onRejected</code> callbacks you provide to done, it will be
+rethrown in an uncatchable way causing a fatal error.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-k">function</span> <span class="pl-en">getJsonResult</span>()</span>
+<span class="pl-s1">{</span>
+<span class="pl-s1">    <span class="pl-k">return</span> queryApi()</span>
+<span class="pl-s1">        <span class="pl-k">-&gt;</span>then(</span>
+<span class="pl-s1">            <span class="pl-c"><span class="pl-c">//</span> Transform API results to an object</span></span>
+<span class="pl-s1">            <span class="pl-k">function</span> (<span class="pl-smi">$jsonResultString</span>) {</span>
+<span class="pl-s1">                <span class="pl-k">return</span> <span class="pl-c1">json_decode</span>(<span class="pl-smi">$jsonResultString</span>);</span>
+<span class="pl-s1">            },</span>
+<span class="pl-s1">            <span class="pl-c"><span class="pl-c">//</span> Transform API errors to an exception</span></span>
+<span class="pl-s1">            <span class="pl-k">function</span> (<span class="pl-smi">$jsonErrorString</span>) {</span>
+<span class="pl-s1">                <span class="pl-smi">$object</span> <span class="pl-k">=</span> <span class="pl-c1">json_decode</span>(<span class="pl-smi">$jsonErrorString</span>);</span>
+<span class="pl-s1">                <span class="pl-k">throw</span> <span class="pl-k">new</span> <span class="pl-c1">ApiErrorException</span>(<span class="pl-smi">$object</span><span class="pl-k">-&gt;</span><span class="pl-smi">errorMessage</span>);</span>
+<span class="pl-s1">            }</span>
+<span class="pl-s1">        );</span>
+<span class="pl-s1">}</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> Here we provide no rejection handler. If the promise returned has been</span></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> rejected, the ApiErrorException will be thrown</span></span>
+<span class="pl-s1">getJsonResult()</span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>done(</span>
+<span class="pl-s1">        <span class="pl-c"><span class="pl-c">//</span> Consume transformed object</span></span>
+<span class="pl-s1">        <span class="pl-k">function</span> (<span class="pl-smi">$jsonResultObject</span>) {</span>
+<span class="pl-s1">            <span class="pl-c"><span class="pl-c">//</span> Do something with $jsonResultObject</span></span>
+<span class="pl-s1">        }</span>
+<span class="pl-s1">    );</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> Here we provide a rejection handler which will either throw while debugging</span></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> or log the exception</span></span>
+<span class="pl-s1">getJsonResult()</span>
+<span class="pl-s1">    <span class="pl-k">-&gt;</span>done(</span>
+<span class="pl-s1">        <span class="pl-k">function</span> (<span class="pl-smi">$jsonResultObject</span>) {</span>
+<span class="pl-s1">            <span class="pl-c"><span class="pl-c">//</span> Do something with $jsonResultObject</span></span>
+<span class="pl-s1">        },</span>
+<span class="pl-s1">        <span class="pl-k">function</span> (<span class="pl-c1">ApiErrorException</span> <span class="pl-smi">$exception</span>) {</span>
+<span class="pl-s1">            <span class="pl-k">if</span> (isDebug()) {</span>
+<span class="pl-s1">                <span class="pl-k">throw</span> <span class="pl-smi">$exception</span>;</span>
+<span class="pl-s1">            } <span class="pl-k">else</span> {</span>
+<span class="pl-s1">                logException(<span class="pl-smi">$exception</span>);</span>
+<span class="pl-s1">            }</span>
+<span class="pl-s1">        }</span>
+<span class="pl-s1">    );</span></pre></div>
+<p>Note that if a rejection value is not an instance of <code>\Exception</code>, it will be
+wrapped in an exception of the type <code>React\Promise\UnhandledRejectionException</code>.</p>
+<p>You can get the original rejection reason by calling <code>$exception-&gt;getReason()</code>.</p>
+<h2>
+<a id="install" class="anchor" href="#install" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Install</h2>
+<p>The recommended way to install this library is <a href="https://getcomposer.org" rel="nofollow">through Composer</a>.
+<a href="https://getcomposer.org/doc/00-intro.md" rel="nofollow">New to Composer?</a></p>
+<p>This project follows <a href="https://semver.org/" rel="nofollow">SemVer</a>.
+This will install the latest supported version:</p>
+<div class="highlight highlight-source-shell"><pre>$ composer require react/promise:^2.8</pre></div>
+<p>See also the <a href="changelog.html">CHANGELOG</a> for details about version upgrades.</p>
+<p>This project aims to run on any platform and thus does not require any PHP
+extensions and supports running on legacy PHP 5.4 through current PHP 7+ and HHVM.
+It's <em>highly recommended to use PHP 7+</em> for this project due to its vast
+performance improvements.</p>
+<h2>
+<a id="credits" class="anchor" href="#credits" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Credits</h2>
+<p>Promise is a port of <a href="https://github.com/cujojs/when">when.js</a>
+by <a href="https://github.com/briancavalier">Brian Cavalier</a>.</p>
+<p>Also, large parts of the documentation have been ported from the when.js
+<a href="https://github.com/cujojs/when/wiki">Wiki</a> and the
+<a href="https://github.com/cujojs/when/blob/master/docs/api.md">API docs</a>.</p>
+<h2>
+<a id="license" class="anchor" href="#license" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>License</h2>
+<p>Released under the <a href="license.html">MIT</a> license.</p>
+                                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../promise/">Promise</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v2.8.0
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/promise#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.7.1#readme" class="version-selector__version">
+                                                    v2.7.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.7.0#readme" class="version-selector__version">
+                                                    v2.7.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.6.0#readme" class="version-selector__version">
+                                                    v2.6.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.5.1#readme" class="version-selector__version">
+                                                    v2.5.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.5.0#readme" class="version-selector__version">
+                                                    v2.5.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.4.1#readme" class="version-selector__version">
+                                                    v2.4.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.4.0#readme" class="version-selector__version">
+                                                    v2.4.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.3.0#readme" class="version-selector__version">
+                                                    v2.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v1.2.1#readme" class="version-selector__version">
+                                                    v1.2.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v1.2.0#readme" class="version-selector__version">
+                                                    v1.2.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.2.2#readme" class="version-selector__version">
+                                                    v2.2.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.2.1#readme" class="version-selector__version">
+                                                    v2.2.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v1.1.0#readme" class="version-selector__version">
+                                                    v1.1.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.2.0#readme" class="version-selector__version">
+                                                    v2.2.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.1.0#readme" class="version-selector__version">
+                                                    v2.1.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.0.0#readme" class="version-selector__version">
+                                                    v2.0.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v1.0.4#readme" class="version-selector__version">
+                                                    v1.0.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v1.0.3#readme" class="version-selector__version">
+                                                    v1.0.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v1.0.2#readme" class="version-selector__version">
+                                                    v1.0.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v1.0.1#readme" class="version-selector__version">
+                                                    v1.0.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v1.0.0#readme" class="version-selector__version">
+                                                    v1.0.0
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/promise">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../promise/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../promise/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/promise:^2.8.0</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (348 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/igorw">
+                                    <img src="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=80 2x" alt="igorw" title="igorw (26 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (20 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (16 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cboden">
+                                    <img src="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=80 2x" alt="cboden" title="cboden (4 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/carusogabriel">
+                                    <img src="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=80 2x" alt="carusogabriel" title="carusogabriel (3 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/smscr">
+                                    <img src="https://avatars1.githubusercontent.com/u/13821666?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/13821666?v=4&amp;s=80 2x" alt="smscr" title="smscr (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/CharlotteDunois">
+                                    <img src="https://avatars0.githubusercontent.com/u/4529744?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/4529744?v=4&amp;s=80 2x" alt="CharlotteDunois" title="CharlotteDunois (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/danielecr">
+                                    <img src="https://avatars3.githubusercontent.com/u/2484638?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/2484638?v=4&amp;s=80 2x" alt="danielecr" title="danielecr (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/joshdifabio">
+                                    <img src="https://avatars1.githubusercontent.com/u/5609851?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/5609851?v=4&amp;s=80 2x" alt="joshdifabio" title="joshdifabio (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/mtdowling">
+                                    <img src="https://avatars3.githubusercontent.com/u/190930?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/190930?v=4&amp;s=80 2x" alt="mtdowling" title="mtdowling (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/seregazhuk">
+                                    <img src="https://avatars3.githubusercontent.com/u/9959761?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/9959761?v=4&amp;s=80 2x" alt="seregazhuk" title="seregazhuk (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/nawarian">
+                                    <img src="https://avatars2.githubusercontent.com/u/3905582?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/3905582?v=4&amp;s=80 2x" alt="nawarian" title="nawarian (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-promise-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-promise-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,1 6,1 12,1 18,1 24,1 30,1 36,1 42,1 48,2 54,2 60,1 66,1 72,1 78,1 84,1 90,1 96,1 102,1 108,8 114,1 120,1 126,1 132,1 138,1 144,1 150,2 156,5 162,1 168,1 174,1 180,1 186,1 192,1 198,1 204,1 210,2 216,3 222,1 228,1 234,5 240,4 246,1 252,1 258,1 264,1 270,1 276,1 282,1 288,1 294,1 300,1 306,1" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-promise-participation-gradient);mask:url(#reactphp-promise-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/promise/license.html b/promise/license.html
new file mode 100644
index 000000000..b127b0ca2
--- /dev/null
+++ b/promise/license.html
@@ -0,0 +1,500 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>Promise: License - ReactPHP</title>
+
+        <meta name="description" content="Promises/A implementation for PHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+            </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                    <h1>Promise License</h1>
+
+    <p>Copyright (c) 2012-2016 Jan Sorgalla</p>
+<p>Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:</p>
+<p>The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.</p>
+<p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.</p>
+                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../promise/">Promise</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v2.8.0
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/promise#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.7.1#readme" class="version-selector__version">
+                                                    v2.7.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.7.0#readme" class="version-selector__version">
+                                                    v2.7.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.6.0#readme" class="version-selector__version">
+                                                    v2.6.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.5.1#readme" class="version-selector__version">
+                                                    v2.5.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.5.0#readme" class="version-selector__version">
+                                                    v2.5.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.4.1#readme" class="version-selector__version">
+                                                    v2.4.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.4.0#readme" class="version-selector__version">
+                                                    v2.4.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.3.0#readme" class="version-selector__version">
+                                                    v2.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v1.2.1#readme" class="version-selector__version">
+                                                    v1.2.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v1.2.0#readme" class="version-selector__version">
+                                                    v1.2.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.2.2#readme" class="version-selector__version">
+                                                    v2.2.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.2.1#readme" class="version-selector__version">
+                                                    v2.2.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v1.1.0#readme" class="version-selector__version">
+                                                    v1.1.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.2.0#readme" class="version-selector__version">
+                                                    v2.2.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.1.0#readme" class="version-selector__version">
+                                                    v2.1.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v2.0.0#readme" class="version-selector__version">
+                                                    v2.0.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v1.0.4#readme" class="version-selector__version">
+                                                    v1.0.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v1.0.3#readme" class="version-selector__version">
+                                                    v1.0.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v1.0.2#readme" class="version-selector__version">
+                                                    v1.0.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v1.0.1#readme" class="version-selector__version">
+                                                    v1.0.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/promise/tree/v1.0.0#readme" class="version-selector__version">
+                                                    v1.0.0
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/promise">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../promise/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../promise/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/promise:^2.8.0</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (348 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/igorw">
+                                    <img src="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=80 2x" alt="igorw" title="igorw (26 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (20 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (16 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cboden">
+                                    <img src="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=80 2x" alt="cboden" title="cboden (4 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/carusogabriel">
+                                    <img src="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=80 2x" alt="carusogabriel" title="carusogabriel (3 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/smscr">
+                                    <img src="https://avatars1.githubusercontent.com/u/13821666?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/13821666?v=4&amp;s=80 2x" alt="smscr" title="smscr (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/CharlotteDunois">
+                                    <img src="https://avatars0.githubusercontent.com/u/4529744?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/4529744?v=4&amp;s=80 2x" alt="CharlotteDunois" title="CharlotteDunois (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/danielecr">
+                                    <img src="https://avatars3.githubusercontent.com/u/2484638?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/2484638?v=4&amp;s=80 2x" alt="danielecr" title="danielecr (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/joshdifabio">
+                                    <img src="https://avatars1.githubusercontent.com/u/5609851?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/5609851?v=4&amp;s=80 2x" alt="joshdifabio" title="joshdifabio (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/mtdowling">
+                                    <img src="https://avatars3.githubusercontent.com/u/190930?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/190930?v=4&amp;s=80 2x" alt="mtdowling" title="mtdowling (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/seregazhuk">
+                                    <img src="https://avatars3.githubusercontent.com/u/9959761?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/9959761?v=4&amp;s=80 2x" alt="seregazhuk" title="seregazhuk (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/nawarian">
+                                    <img src="https://avatars2.githubusercontent.com/u/3905582?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/3905582?v=4&amp;s=80 2x" alt="nawarian" title="nawarian (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-promise-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-promise-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,1 6,1 12,1 18,1 24,1 30,1 36,1 42,1 48,2 54,2 60,1 66,1 72,1 78,1 84,1 90,1 96,1 102,1 108,8 114,1 120,1 126,1 132,1 138,1 144,1 150,2 156,5 162,1 168,1 174,1 180,1 186,1 192,1 198,1 204,1 210,2 216,3 222,1 228,1 234,5 240,4 246,1 252,1 258,1 264,1 270,1 276,1 282,1 288,1 294,1 300,1 306,1" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-promise-participation-gradient);mask:url(#reactphp-promise-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/robots.txt b/robots.txt
new file mode 100644
index 000000000..eb0536286
--- /dev/null
+++ b/robots.txt
@@ -0,0 +1,2 @@
+User-agent: *
+Disallow:
diff --git a/safari-pinned-tab.svg b/safari-pinned-tab.svg
new file mode 100644
index 000000000..f0ec49309
--- /dev/null
+++ b/safari-pinned-tab.svg
@@ -0,0 +1 @@
+<svg version="1" xmlns="http://www.w3.org/2000/svg" width="1082.667" height="1082.667" viewBox="0 0 812.000000 812.000000"><path d="M245.9.4c-.2.2-4.7.6-10 1s-10.5.8-11.6 1c-1.1.3-4.4.7-7.3 1.1-6.4.8-5.6.7-20.5 4-39.4 8.9-68.2 27.6-85.3 55.5-7.9 12.9-16.8 36.4-19.7 52-.3 1.4-.7 3.6-1 5-.3 1.4-.8 4.5-1.1 7-.3 2.5-.8 5.6-1 7-.3 1.4-.8 4.7-1.1 7.5-.3 2.7-.8 154.7-1 337.7L86 812h158.6l.1-304.7c0-167.7.3-306.4.7-308.3.3-1.9.9-5.3 1.2-7.5 1.7-11.5 8.8-25.2 17.1-33.2 6.3-5.9 18.7-12.5 26.3-13.9 1.4-.3 5.2-1.1 8.5-1.7 10.5-2.2 111.2-1.4 121.6.9 17.4 3.8 29.1 8.4 40.3 15.8 22.7 14.9 37.9 36.5 45 64.1.3 1.1.8 3.3 1.1 5 .2 1.6.7 4.1 1 5.5.7 3.4 1.6 15 1.7 23 .3 20.8-4.9 43.6-13.8 60.5-3.7 7-5 9-6.1 9.8-.7.4-1.3 1.3-1.3 1.9 0 2.7-13.8 17.8-24.5 26.8-8.7 7.3-30.1 17.7-37.5 18.3-1.1.1-2 .4-2 .7 0 .3-.8.6-1.8.7-1 .1-4.7.7-8.3 1.4-3.5.6-16.6 1.3-29.1 1.4l-22.8.2-.1-2.6c-.1-1.4-.1-7.9-.1-14.5v-11.8l-4.5 4.3c-2.6 2.4-5.8 5.7-7.3 7.4-4.5 4.9-31.3 33.1-48.5 50.9-7.3 7.7-22.8 23.9-27.7 29.2l-3 3.2 5.7 5.8c3.1 3.3 11.6 12.2 18.8 19.8 7.3 7.6 15.9 16.7 19.2 20.1 3.3 3.5 13 13.6 21.5 22.5 23.4 24.6 24.8 26 25.3 26 .3 0 .5-6.1.4-13.5 0-7.4.1-13.7.4-13.9.2-.3 7.9-.7 16.9-1 19.8-.7 34.7-1.7 45.5-3.1 1.7-.2 5-.6 7.5-.9 2.5-.3 6.3-.9 8.5-1.2 2.2-.3 5.1-.8 6.5-.9 6-.8 14.5-2.2 14.5-2.5 0-.1.9-.3 2-.5 11.8-1.7 34.4-8 48-13.5 17.2-6.8 42.6-20.5 56.7-30.5 3.1-2.2 6.6-4.7 7.9-5.5 2.3-1.6 8.6-6.7 15.9-13.1 2.5-2.1 4.8-3.9 5.2-3.9.5 0 .8-.4.8-.8s3.3-4.1 7.3-8.2c20.1-20.8 37-48 47.5-76.5 3.9-10.8 8.5-26.6 9.6-33.5.3-1.9.8-4.6 1.1-6 .3-1.4.8-4.1 1-6 .3-1.9.7-4.4 1-5.5 2.6-12.3 2.6-58.9 0-79-3-22.9-9.6-48.8-17.2-67-4.1-9.9-11.4-24.9-13.2-26.9-.9-1-1.6-2.1-1.5-2.5.1-.7-1.8-3.9-5.7-9.8-1.6-2.3-2.9-4.4-2.9-4.7 0-.5-11.8-16.6-12.9-17.6-.3-.3-3.1-3.4-6.1-7-8.4-9.9-16.9-18.1-31.5-30.5-1.6-1.4-6.4-4.9-10.5-7.7-4.1-2.9-7.7-5.4-8-5.8-.3-.3-1.6-1.1-3-1.8-2.7-1.3-6.2-3.4-7-4.2-1.1-1.1-14.5-7.5-15.2-7.2-.5.1-.8-.2-.8-.7 0-.5-.8-1.1-1.7-1.4-1-.3-5.2-2-9.3-3.7-12.4-5.3-32.2-11.5-43-13.6-2.5-.4-7.2-1.5-10-2.1-.8-.2-3.3-.6-5.5-.8-2.2-.2-5.1-.6-6.4-.9-1.3-.3-4.9-.8-8-1.1-3.1-.4-6.7-.9-8.1-1.3C435.3.6 246.6-.3 245.9.4z"/><path d="M546.5 504.4c-14.4 7.4-36.5 15.4-51.5 18.5-13.2 2.8-18.8 4-22.1 4.5-2 .3-4.2.8-5 1-.8.3-3.6.8-6.4 1-2.7.3-6.1.8-7.5 1-1.4.3-5.2.8-8.5 1.1-3.3.3-7.8.7-10 1-6.3.8-14.1 1.4-26 2-6 .4-11.1.8-11.3 1-.2.2 2.5 5.9 6.1 12.7 3.6 6.7 8.4 16.1 10.8 20.8 2.4 4.7 4.6 8.7 4.9 9 .3.3 3.9 7.2 8 15.5 4.1 8.2 7.7 15.2 8 15.5.3.3 2.7 4.8 5.4 10s6.6 12.6 8.6 16.5c5.6 10.5 8.3 15.9 8.2 16.5 0 .3.5 1.2 1.2 2s3.2 5.5 5.7 10.5c2.4 4.9 4.6 9.2 4.9 9.5.4.3 2.3 3.9 4.4 8 6.4 12.6 24.8 47.8 36.6 70 3.9 7.4 8.5 16.2 10.1 19.5 1.7 3.3 5.1 9.8 7.6 14.5 2.4 4.7 6.5 12.4 9 17.3l4.5 8.7h91.4c61.2 0 91.4-.3 91.4-1 0-.6-5.1-10.1-11.3-21.3-11.6-20.6-17-30.2-19.4-34.7-5.2-9.3-17-30.5-24.1-43.2-1.2-2.1-3.8-6.8-5.8-10.5-2.1-3.7-5-9-6.6-11.6-1.5-2.6-2.8-5-2.8-5.3 0-.2-1.1-2.1-2.3-4.2-1.3-2-4.1-6.9-6.1-10.7-2.1-3.9-4.5-8.4-5.5-10-1-1.7-3.1-5.5-4.8-8.5-1.6-3-4.2-7.6-5.7-10.3-1.4-2.6-3.7-6.7-5.1-9.2-4.4-7.9-7.7-13.8-12-21.5-4.2-7.4-6.4-11.5-13.3-24-1.9-3.6-4.4-7.7-5.4-9.3-1.1-1.5-1.6-2.7-1.2-2.7.4 0 .1-.8-.7-1.8-1.4-1.7-2.1-2.8-6-10-1.1-2-3.6-6.4-5.5-9.7-1.9-3.3-5.1-9.1-7.2-12.9-2-3.8-4.4-8.1-5.2-9.5-6.7-11.8-12.8-22.8-14.3-25.7-.9-1.9-1.8-3.4-2-3.3-.1.1-2.9 1.5-6.2 3.3z"/></svg>
diff --git a/socket/changelog.html b/socket/changelog.html
new file mode 100644
index 000000000..952b9a276
--- /dev/null
+++ b/socket/changelog.html
@@ -0,0 +1,1856 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>Socket: Changelog - ReactPHP</title>
+
+        <meta name="description" content="Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+        <link href="https://github.com/reactphp/socket/releases.atom" type="application/atom+xml" rel="alternate" title="Socket Changelog">
+    </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                    <h1>Socket Changelog</h1>
+
+    <ul class="toc">
+            <li><a href="#2020" title="Jump to year 2020 (1 release)">2020</a></li>
+            <li><a href="#2019" title="Jump to year 2019 (3 releases)">2019</a></li>
+            <li><a href="#2018" title="Jump to year 2018 (7 releases)">2018</a></li>
+            <li><a href="#2017" title="Jump to year 2017 (16 releases)">2017</a></li>
+            <li><a href="#2016" title="Jump to year 2016 (2 releases)">2016</a></li>
+            <li><a href="#2014" title="Jump to year 2014 (4 releases)">2014</a></li>
+            <li><a href="#2013" title="Jump to year 2013 (4 releases)">2013</a></li>
+            <li><a href="#2012" title="Jump to year 2012 (5 releases)">2012</a></li>
+        </ul>
+
+    <h2>
+        <a id="2020" class="anchor" href="#2020" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2020
+    </h2>
+
+    
+            <h3>
+        <a id="140-2020-03-12" class="anchor" href="#140-2020-03-12" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.4.0
+
+        <small>
+            (2020-03-12)
+            <a href="https://github.com/reactphp/socket/releases/tag/v1.4.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <p>A major new feature release, see <a href="https://clue.engineering/2020/introducing-ipv6-for-reactphp" rel="nofollow"><strong>release announcement</strong></a>.</p>
+<ul>
+<li>
+<p>Feature: Add IPv6 support to <code>Connector</code> (implement "Happy Eyeballs" algorithm to support IPv6 probing).<br>
+IPv6 support is turned on by default, use new <code>happy_eyeballs</code> option in <code>Connector</code> to toggle behavior.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="415336445" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/196" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/196/hovercard" href="https://github.com/reactphp/socket/pull/196">#196</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="577351300" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/224" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/224/hovercard" href="https://github.com/reactphp/socket/pull/224">#224</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="579243592" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/225" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/225/hovercard" href="https://github.com/reactphp/socket/pull/225">#225</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a> and <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Default to using DNS cache (with max 256 entries) for <code>Connector</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="579375999" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/226" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/226/hovercard" href="https://github.com/reactphp/socket/pull/226">#226</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Add <code>.gitattributes</code> to exclude dev files from exports and some minor code style fixes.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="530763455" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/219" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/219/hovercard" href="https://github.com/reactphp/socket/pull/219">#219</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/reedy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/reedy">@reedy</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="525991391" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/218" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/218/hovercard" href="https://github.com/reactphp/socket/pull/218">#218</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/mmoreram/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mmoreram">@mmoreram</a>)</p>
+</li>
+<li>
+<p>Improve test suite to fix failing test cases when using new DNS component,<br>
+significantly improve test performance by awaiting events instead of sleeping,<br>
+exclude TLS 1.3 test on PHP 7.3, run tests on PHP 7.4 and simplify test matrix.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="469718878" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/208" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/208/hovercard" href="https://github.com/reactphp/socket/pull/208">#208</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="481098218" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/209" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/209/hovercard" href="https://github.com/reactphp/socket/pull/209">#209</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="481102160" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/210" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/210/hovercard" href="https://github.com/reactphp/socket/pull/210">#210</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="524032637" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/217" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/217/hovercard" href="https://github.com/reactphp/socket/pull/217">#217</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="575460798" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/223" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/223/hovercard" href="https://github.com/reactphp/socket/pull/223">#223</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2019" class="anchor" href="#2019" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2019
+    </h2>
+
+    
+            <h3>
+        <a id="130-2019-07-10" class="anchor" href="#130-2019-07-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.3.0
+
+        <small>
+            (2019-07-10)
+            <a href="https://github.com/reactphp/socket/releases/tag/v1.3.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Forward compatibility with upcoming stable DNS component.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="464951885" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/206" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/206/hovercard" href="https://github.com/reactphp/socket/pull/206">#206</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="121-2019-06-03" class="anchor" href="#121-2019-06-03" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.2.1
+
+        <small>
+            (2019-06-03)
+            <a href="https://github.com/reactphp/socket/releases/tag/v1.2.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Avoid uneeded fragmented TLS work around for PHP 7.3.3+ and<br>
+work around failing test case detecting EOF on TLS 1.3 socket streams.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="448608612" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/201" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/201/hovercard" href="https://github.com/reactphp/socket/pull/201">#201</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="450731876" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/202" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/202/hovercard" href="https://github.com/reactphp/socket/pull/202">#202</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve TLS certificate/passphrase example.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="401920397" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/190" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/190/hovercard" href="https://github.com/reactphp/socket/pull/190">#190</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="120-2019-01-07" class="anchor" href="#120-2019-01-07" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.2.0
+
+        <small>
+            (2019-01-07)
+            <a href="https://github.com/reactphp/socket/releases/tag/v1.2.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature / Fix: Improve TLS 1.3 support.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="395302314" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/186" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/186/hovercard" href="https://github.com/reactphp/socket/pull/186">#186</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>TLS 1.3 is now an official standard as of August 2018! <g-emoji class="g-emoji" alias="tada" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f389.png">🎉</g-emoji><br>
+The protocol has major improvements in the areas of security, performance, and privacy.<br>
+TLS 1.3 is supported by default as of <a href="https://www.openssl.org/blog/blog/2018/09/11/release111/" rel="nofollow">OpenSSL 1.1.1</a>.<br>
+For example, this version ships with Ubuntu 18.10 (and newer) by default, meaning that recent installations support TLS 1.3 out of the box <img class="emoji" title=":shipit:" alt=":shipit:" src="https://github.githubassets.com/images/icons/emoji/shipit.png" height="20" width="20" align="absmiddle"></p>
+</li>
+<li>
+<p>Fix: Avoid possibility of missing remote address when TLS handshake fails.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="396284100" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/188" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/188/hovercard" href="https://github.com/reactphp/socket/pull/188">#188</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve performance by prefixing all global functions calls with <code>\</code> to skip the look up and resolve process and go straight to the global function.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="394901397" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/183" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/183/hovercard" href="https://github.com/reactphp/socket/pull/183">#183</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+<li>
+<p>Update documentation to use full class names with namespaces.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="396040268" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/187" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/187/hovercard" href="https://github.com/reactphp/socket/pull/187">#187</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite to avoid some possible race conditions,<br>
+test against PHP 7.3 on Travis and<br>
+use dedicated <code>assertInstanceOf()</code> assertions.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="395084900" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/185" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/185/hovercard" href="https://github.com/reactphp/socket/pull/185">#185</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="374436516" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/178" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/178/hovercard" href="https://github.com/reactphp/socket/pull/178">#178</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="379523025" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/181" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/181/hovercard" href="https://github.com/reactphp/socket/pull/181">#181</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/carusogabriel/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/carusogabriel">@carusogabriel</a>)</p>
+</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2018" class="anchor" href="#2018" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2018
+    </h2>
+
+    
+            <h3>
+        <a id="110-2018-10-01" class="anchor" href="#110-2018-10-01" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.1.0
+
+        <small>
+            (2018-10-01)
+            <a href="https://github.com/reactphp/socket/releases/tag/v1.1.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Improve error reporting for failed connection attempts and improve<br>
+cancellation forwarding during DNS lookup, TCP/IP connection or TLS handshake.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="342009514" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/168" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/168/hovercard" href="https://github.com/reactphp/socket/pull/168">#168</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="342683404" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/169" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/169/hovercard" href="https://github.com/reactphp/socket/pull/169">#169</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="346511755" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/170" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/170/hovercard" href="https://github.com/reactphp/socket/pull/170">#170</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="348085928" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/171" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/171/hovercard" href="https://github.com/reactphp/socket/pull/171">#171</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="362933766" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/176" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/176/hovercard" href="https://github.com/reactphp/socket/pull/176">#176</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="364365413" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/177" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/177/hovercard" href="https://github.com/reactphp/socket/pull/177">#177</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>All error messages now always contain a reference to the remote URI to give<br>
+more details which connection actually failed and the reason for this error.<br>
+Accordingly, failures during DNS lookup will now mention both the remote URI<br>
+as well as the DNS error reason. TCP/IP connection issues and errors during<br>
+a secure TLS handshake will both mention the remote URI as well as the<br>
+underlying socket error. Similarly, lost/dropped connections during a TLS<br>
+handshake will now report a lost connection instead of an empty error reason.</p>
+<p>For most common use cases this means that simply reporting the <code>Exception</code><br>
+message should give the most relevant details for any connection issues:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> <span class="pl-smi">$connector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>tls://example.com:443<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"><span class="pl-smi">$promise</span><span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$conn</span>) <span class="pl-k">use</span> (<span class="pl-smi">$loop</span>) {</span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> …</span></span>
+<span class="pl-s1">}, <span class="pl-k">function</span> (<span class="pl-c1">Exception</span> <span class="pl-smi">$e</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-smi">$e</span><span class="pl-k">-&gt;</span>getMessage();</span>
+<span class="pl-s1">});</span></pre></div>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="100-2018-07-11" class="anchor" href="#100-2018-07-11" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.0.0
+
+        <small>
+            (2018-07-11)
+            <a href="https://github.com/reactphp/socket/releases/tag/v1.0.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>First stable LTS release, now following <a href="https://semver.org/" rel="nofollow">SemVer</a>.<br>
+We'd like to emphasize that this component is production ready and battle-tested.<br>
+We plan to support all long-term support (LTS) releases for at least 24 months,<br>
+so you have a rock-solid foundation to build on top of.</li>
+</ul>
+<blockquote>
+<p>Contains no other changes, so it's actually fully compatible with the v0.8.12 release.</p>
+</blockquote>
+
+    <hr>
+    
+            <h3>
+        <a id="0812-2018-06-11" class="anchor" href="#0812-2018-06-11" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.8.12
+
+        <small>
+            (2018-06-11)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.8.12" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Improve memory consumption for failed and cancelled connection attempts.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="320498009" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/161" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/161/hovercard" href="https://github.com/reactphp/socket/pull/161">#161</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite to fix Travis config to test against legacy PHP 5.3 again.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="320515617" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/162" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/162/hovercard" href="https://github.com/reactphp/socket/pull/162">#162</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="0811-2018-04-24" class="anchor" href="#0811-2018-04-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.8.11
+
+        <small>
+            (2018-04-24)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.8.11" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Improve memory consumption for cancelled connection attempts and<br>
+simplify skipping DNS lookup when connecting to IP addresses.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="316722153" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/159" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/159/hovercard" href="https://github.com/reactphp/socket/pull/159">#159</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="316745437" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/160" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/160/hovercard" href="https://github.com/reactphp/socket/pull/160">#160</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="0810-2018-02-28" class="anchor" href="#0810-2018-02-28" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.8.10
+
+        <small>
+            (2018-02-28)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.8.10" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Update DNS dependency to support loading system default DNS<br>
+nameserver config on all supported platforms<br>
+(<code>/etc/resolv.conf</code> on Unix/Linux/Mac/Docker/WSL and WMIC on Windows)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="300621054" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/152" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/152/hovercard" href="https://github.com/reactphp/socket/pull/152">#152</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>This means that connecting to hosts that are managed by a local DNS server,<br>
+such as a corporate DNS server or when using Docker containers, will now<br>
+work as expected across all platforms with no changes required:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$connector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Connector</span>(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$connector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>intranet.example:80<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> …</span></span>
+<span class="pl-s1">});</span></pre></div>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="089-2018-01-18" class="anchor" href="#089-2018-01-18" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.8.9
+
+        <small>
+            (2018-01-18)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.8.9" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Support explicitly choosing TLS version to negotiate with remote side<br>
+by respecting <code>crypto_method</code> context parameter for all classes.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="288880718" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/149" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/149/hovercard" href="https://github.com/reactphp/socket/pull/149">#149</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>By default, all connector and server classes support TLSv1.0+ and exclude<br>
+support for legacy SSLv2/SSLv3. As of PHP 5.6+ you can also explicitly<br>
+choose the TLS version you want to negotiate with the remote side:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new: now supports 'crypto_method` context parameter for all classes</span></span>
+<span class="pl-s1"><span class="pl-smi">$connector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Connector</span>(<span class="pl-smi">$loop</span>, <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>tls<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">        <span class="pl-s"><span class="pl-pds">'</span>crypto_method<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT</span></span>
+<span class="pl-s1">    )</span>
+<span class="pl-s1">));</span></pre></div>
+</li>
+<li>
+<p>Minor internal clean up to unify class imports<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="288872868" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/148" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/148/hovercard" href="https://github.com/reactphp/socket/pull/148">#148</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="088-2018-01-06" class="anchor" href="#088-2018-01-06" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.8.8
+
+        <small>
+            (2018-01-06)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.8.8" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improve test suite by adding test group to skip integration tests relying on<br>
+internet connection and fix minor documentation typo.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="286403640" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/146" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/146/hovercard" href="https://github.com/reactphp/socket/pull/146">#146</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="285625461" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/145" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/145/hovercard" href="https://github.com/reactphp/socket/pull/145">#145</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/cn007b/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/cn007b">@cn007b</a>)</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2017" class="anchor" href="#2017" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2017
+    </h2>
+
+    
+            <h3>
+        <a id="087-2017-12-24" class="anchor" href="#087-2017-12-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.8.7
+
+        <small>
+            (2017-12-24)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.8.7" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Fix: Fix closing socket resource before removing from loop<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="284322182" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/141" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/141/hovercard" href="https://github.com/reactphp/socket/pull/141">#141</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>This fixes the root cause of an uncaught <code>Exception</code> that only manifested<br>
+itself after the recent Stream v0.7.4 component update and only if you're<br>
+using <code>ext-event</code> (<code>ExtEventLoop</code>).</p>
+</li>
+<li>
+<p>Improve test suite by testing against PHP 7.2<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278458521" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/140" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/140/hovercard" href="https://github.com/reactphp/socket/pull/140">#140</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/carusogabriel/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/carusogabriel">@carusogabriel</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="086-2017-11-18" class="anchor" href="#086-2017-11-18" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.8.6
+
+        <small>
+            (2017-11-18)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.8.6" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Add Unix domain socket (UDS) support to <code>Server</code> with <code>unix://</code> URI scheme<br>
+and add advanced <code>UnixServer</code> class.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="263643414" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/120" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/120/hovercard" href="https://github.com/reactphp/socket/pull/120">#120</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/andig/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/andig">@andig</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new: Server now supports "unix://" scheme</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-s"><span class="pl-pds">'</span>unix:///tmp/server.sock<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new: advanced usage</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">UnixServer</span>(<span class="pl-s"><span class="pl-pds">'</span>/tmp/server.sock<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+</li>
+<li>
+<p>Restructure examples to ease getting started<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="275084657" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/136" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/136/hovercard" href="https://github.com/reactphp/socket/pull/136">#136</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by adding forward compatibility with PHPUnit 6 and<br>
+ignore Mac OS X test failures for now until Travis tests work again<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="273192715" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/133" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/133/hovercard" href="https://github.com/reactphp/socket/pull/133">#133</a> by @gabriel-caruso and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="273485503" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/134" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/134/hovercard" href="https://github.com/reactphp/socket/pull/134">#134</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="085-2017-10-23" class="anchor" href="#085-2017-10-23" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.8.5
+
+        <small>
+            (2017-10-23)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.8.5" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Fix: Work around PHP bug with Unix domain socket (UDS) paths for Mac OS X<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="263655223" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/123" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/123/hovercard" href="https://github.com/reactphp/socket/pull/123">#123</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/andig/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/andig">@andig</a>)</p>
+</li>
+<li>
+<p>Fix: Fix <code>SecureServer</code> to return <code>null</code> URI if server socket is already closed<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="265358393" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/129" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/129/hovercard" href="https://github.com/reactphp/socket/pull/129">#129</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by adding forward compatibility with PHPUnit v5 and<br>
+forward compatibility with upcoming EventLoop releases in tests and<br>
+test Mac OS X on Travis<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="263651039" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/122" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/122/hovercard" href="https://github.com/reactphp/socket/pull/122">#122</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/andig/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/andig">@andig</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="263719207" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/125" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/125/hovercard" href="https://github.com/reactphp/socket/pull/125">#125</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="264684286" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/127" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/127/hovercard" href="https://github.com/reactphp/socket/pull/127">#127</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="267480956" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/130" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/130/hovercard" href="https://github.com/reactphp/socket/pull/130">#130</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Readme improvements<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="262001059" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/118" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/118/hovercard" href="https://github.com/reactphp/socket/pull/118">#118</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="084-2017-09-16" class="anchor" href="#084-2017-09-16" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.8.4
+
+        <small>
+            (2017-09-16)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.8.4" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Add <code>FixedUriConnector</code> decorator to use fixed, preconfigured URI instead<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="258032672" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/117" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/117/hovercard" href="https://github.com/reactphp/socket/pull/117">#117</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>This can be useful for consumers that do not support certain URIs, such as<br>
+when you want to explicitly connect to a Unix domain socket (UDS) path<br>
+instead of connecting to a default address assumed by an higher-level API:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$connector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">FixedUriConnector</span>(</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>unix:///var/run/docker.sock<span class="pl-pds">'</span></span>,</span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">UnixConnector</span>(<span class="pl-smi">$loop</span>)</span>
+<span class="pl-s1">);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> destination will be ignored, actually connects to Unix domain socket</span></span>
+<span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> <span class="pl-smi">$connector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>localhost:80<span class="pl-pds">'</span></span>);</span></pre></div>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="083-2017-09-08" class="anchor" href="#083-2017-09-08" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.8.3
+
+        <small>
+            (2017-09-08)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.8.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Reduce memory consumption for failed connections<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="254614468" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/113" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/113/hovercard" href="https://github.com/reactphp/socket/pull/113">#113</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/valga/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/valga">@valga</a>)</p>
+</li>
+<li>
+<p>Fix: Work around write chunk size for TLS streams for PHP &lt; 7.1.14<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="256246825" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/114" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/114/hovercard" href="https://github.com/reactphp/socket/pull/114">#114</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="082-2017-08-25" class="anchor" href="#082-2017-08-25" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.8.2
+
+        <small>
+            (2017-08-25)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.8.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Update DNS dependency to support hosts file on all platforms<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="252837020" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/112" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/112/hovercard" href="https://github.com/reactphp/socket/pull/112">#112</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>This means that connecting to hosts such as <code>localhost</code> will now work as<br>
+expected across all platforms with no changes required:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$connector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Connector</span>(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$connector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>localhost:8080<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> …</span></span>
+<span class="pl-s1">});</span></pre></div>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="081-2017-08-15" class="anchor" href="#081-2017-08-15" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.8.1
+
+        <small>
+            (2017-08-15)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.8.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Forward compatibility with upcoming EventLoop v1.0 and v0.5 and<br>
+target evenement 3.0 a long side 2.0 and 1.0<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="230023829" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/104" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/104/hovercard" href="https://github.com/reactphp/socket/pull/104">#104</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248200949" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/111" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/111/hovercard" href="https://github.com/reactphp/socket/pull/111">#111</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+<li>
+<p>Improve test suite by locking Travis distro so new defaults will not break the build and<br>
+fix HHVM build for now again and ignore future HHVM build errors<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="235168171" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/109" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/109/hovercard" href="https://github.com/reactphp/socket/pull/109">#109</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248011984" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/110" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/110/hovercard" href="https://github.com/reactphp/socket/pull/110">#110</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Minor documentation fixes<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="228658383" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/103" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/103/hovercard" href="https://github.com/reactphp/socket/pull/103">#103</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/christiaan/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/christiaan">@christiaan</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="235095527" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/108" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/108/hovercard" href="https://github.com/reactphp/socket/pull/108">#108</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/hansott/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/hansott">@hansott</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="080-2017-05-09" class="anchor" href="#080-2017-05-09" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.8.0
+
+        <small>
+            (2017-05-09)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.8.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: New <code>Server</code> class now acts as a facade for existing server classes<br>
+and renamed old <code>Server</code> to <code>TcpServer</code> for advanced usage.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="223777520" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/96" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/96/hovercard" href="https://github.com/reactphp/socket/pull/96">#96</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="225122944" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/97" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/97/hovercard" href="https://github.com/reactphp/socket/pull/97">#97</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>The <code>Server</code> class is now the main class in this package that implements the<br>
+<code>ServerInterface</code> and allows you to accept incoming streaming connections,<br>
+such as plaintext TCP/IP or secure TLS connection streams.</p>
+<blockquote>
+<p>This is not a BC break and consumer code does not have to be updated.</p>
+</blockquote>
+</li>
+<li>
+<p>Feature / BC break: All addresses are now URIs that include the URI scheme<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="225141367" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/98" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/98/hovercard" href="https://github.com/reactphp/socket/pull/98">#98</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-source-diff"><pre><span class="pl-md"><span class="pl-md">-</span> $parts = parse_url('tcp://' . $conn-&gt;getRemoteAddress());</span>
+<span class="pl-mi1"><span class="pl-mi1">+</span> $parts = parse_url($conn-&gt;getRemoteAddress());</span></pre></div>
+</li>
+<li>
+<p>Fix: Fix <code>unix://</code> addresses for Unix domain socket (UDS) paths<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="227005937" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/100" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/100/hovercard" href="https://github.com/reactphp/socket/pull/100">#100</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature: Forward compatibility with Stream v1.0 and v0.7<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="226647809" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/99" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/99/hovercard" href="https://github.com/reactphp/socket/pull/99">#99</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="072-2017-04-24" class="anchor" href="#072-2017-04-24" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.7.2
+
+        <small>
+            (2017-04-24)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.7.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix: Work around latest PHP 7.0.18 and 7.1.4 no longer accepting full URIs<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="223574812" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/94" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/94/hovercard" href="https://github.com/reactphp/socket/pull/94">#94</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="071-2017-04-10" class="anchor" href="#071-2017-04-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.7.1
+
+        <small>
+            (2017-04-10)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.7.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Fix: Ignore HHVM errors when closing connection that is already closing<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="220691001" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/91" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/91/hovercard" href="https://github.com/reactphp/socket/pull/91">#91</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="070-2017-04-10" class="anchor" href="#070-2017-04-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.7.0
+
+        <small>
+            (2017-04-10)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.7.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Merge SocketClient component into this component<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="219318125" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/87" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/87/hovercard" href="https://github.com/reactphp/socket/pull/87">#87</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>This means that this package now provides async, streaming plaintext TCP/IP<br>
+and secure TLS socket server and client connections for ReactPHP.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$connector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Connector</span>(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$connector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>google.com:80<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$conn</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>…<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1">});</span></pre></div>
+<p>Accordingly, the <code>ConnectionInterface</code> is now used to represent both incoming<br>
+server side connections as well as outgoing client side connections.</p>
+<p>If you've previously used the SocketClient component to establish outgoing<br>
+client connections, upgrading should take no longer than a few minutes.<br>
+All classes have been merged as-is from the latest <code>v0.7.0</code> release with no<br>
+other changes, so you can simply update your code to use the updated namespace<br>
+like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old from SocketClient component and namespace</span></span>
+<span class="pl-s1"><span class="pl-smi">$connector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\SocketClient\</span><span class="pl-c1">Connector</span>(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$connector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>google.com:80<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$conn</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>…<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new</span></span>
+<span class="pl-s1"><span class="pl-smi">$connector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Connector</span>(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$connector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>google.com:80<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$conn</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>…<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1">});</span></pre></div>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="060-2017-04-04" class="anchor" href="#060-2017-04-04" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.6.0
+
+        <small>
+            (2017-04-04)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.6.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Add <code>LimitingServer</code> to limit and keep track of open connections<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="218795441" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/86" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/86/hovercard" href="https://github.com/reactphp/socket/pull/86">#86</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-c1">0</span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">LimitingServer</span>(<span class="pl-smi">$server</span>, <span class="pl-c1">100</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>connection<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>hello there!<span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>);</span>
+<span class="pl-s1">    …</span>
+<span class="pl-s1">});</span></pre></div>
+</li>
+<li>
+<p>Feature / BC break: Add <code>pause()</code> and <code>resume()</code> methods to limit active<br>
+connections<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="217096848" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/84" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/84/hovercard" href="https://github.com/reactphp/socket/pull/84">#84</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-c1">0</span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>pause();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addTimer(<span class="pl-c1">1.0</span>, <span class="pl-k">function</span>() <span class="pl-k">use</span> (<span class="pl-smi">$server</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>resume();</span>
+<span class="pl-s1">});</span></pre></div>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="051-2017-03-09" class="anchor" href="#051-2017-03-09" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.5.1
+
+        <small>
+            (2017-03-09)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.5.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Forward compatibility with Stream v0.5 and upcoming v0.6<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="212760724" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/79" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/79/hovercard" href="https://github.com/reactphp/socket/pull/79">#79</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="050-2017-02-14" class="anchor" href="#050-2017-02-14" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.5.0
+
+        <small>
+            (2017-02-14)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.5.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature / BC break: Replace <code>listen()</code> call with URIs passed to constructor<br>
+and reject listening on hostnames with <code>InvalidArgumentException</code><br>
+and replace <code>ConnectionException</code> with <code>RuntimeException</code> for consistency<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="201196498" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/61" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/61/hovercard" href="https://github.com/reactphp/socket/pull/61">#61</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="203649238" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/66" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/66/hovercard" href="https://github.com/reactphp/socket/pull/66">#66</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206189853" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/72" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/72/hovercard" href="https://github.com/reactphp/socket/pull/72">#72</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>listen(<span class="pl-c1">8080</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-c1">8080</span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+<p>Similarly, you can now pass a full listening URI to the constructor to change<br>
+the listening host:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>listen(<span class="pl-c1">8080</span>, <span class="pl-s"><span class="pl-pds">'</span>127.0.0.1<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-s"><span class="pl-pds">'</span>127.0.0.1:8080<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+<p>Trying to start listening on (DNS) host names will now throw an<br>
+<code>InvalidArgumentException</code>, use IP addresses instead:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>listen(<span class="pl-c1">8080</span>, <span class="pl-s"><span class="pl-pds">'</span>localhost<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-s"><span class="pl-pds">'</span>127.0.0.1:8080<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+<p>If trying to listen fails (such as if port is already in use or port below<br>
+1024 may require root access etc.), it will now throw a <code>RuntimeException</code>,<br>
+the <code>ConnectionException</code> class has been removed:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old: throws React\Socket\ConnectionException</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>listen(<span class="pl-c1">80</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new: throws RuntimeException</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Server</span>(<span class="pl-c1">80</span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+</li>
+<li>
+<p>Feature / BC break: Rename <code>shutdown()</code> to <code>close()</code> for consistency throughout React<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="201220570" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/62" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/62/hovercard" href="https://github.com/reactphp/socket/pull/62">#62</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>shutdown();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>close();</span></pre></div>
+</li>
+<li>
+<p>Feature / BC break: Replace <code>getPort()</code> with <code>getAddress()</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="205420718" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/67" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/67/hovercard" href="https://github.com/reactphp/socket/pull/67">#67</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old</span></span>
+<span class="pl-s1"><span class="pl-c1">echo</span> <span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>getPort(); <span class="pl-c"><span class="pl-c">//</span> 8080</span></span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new</span></span>
+<span class="pl-s1"><span class="pl-c1">echo</span> <span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>getAddress(); <span class="pl-c"><span class="pl-c">//</span> 127.0.0.1:8080</span></span></pre></div>
+</li>
+<li>
+<p>Feature / BC break: <code>getRemoteAddress()</code> returns full address instead of only IP<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="203327734" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/65" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/65/hovercard" href="https://github.com/reactphp/socket/pull/65">#65</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old</span></span>
+<span class="pl-s1"><span class="pl-c1">echo</span> <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>getRemoteAddress(); <span class="pl-c"><span class="pl-c">//</span> 192.168.0.1</span></span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new</span></span>
+<span class="pl-s1"><span class="pl-c1">echo</span> <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>getRemoteAddress(); <span class="pl-c"><span class="pl-c">//</span> 192.168.0.1:51743</span></span></pre></div>
+</li>
+<li>
+<p>Feature / BC break: Add <code>getLocalAddress()</code> method<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="205428178" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/68" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/68/hovercard" href="https://github.com/reactphp/socket/pull/68">#68</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c1">echo</span> <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>getLocalAddress(); <span class="pl-c"><span class="pl-c">//</span> 127.0.0.1:8080</span></span></pre></div>
+</li>
+<li>
+<p>BC break: The <code>Server</code> and <code>SecureServer</code> class are now marked <code>final</code><br>
+and you can no longer <code>extend</code> them<br>
+(which was never documented or recommended anyway).<br>
+Public properties and event handlers are now internal only.<br>
+Please use composition instead of extension.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206188067" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/71" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/71/hovercard" href="https://github.com/reactphp/socket/pull/71">#71</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206165079" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/70" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/70/hovercard" href="https://github.com/reactphp/socket/pull/70">#70</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="206140559" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/69" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/69/hovercard" href="https://github.com/reactphp/socket/pull/69">#69</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="046-2017-01-26" class="anchor" href="#046-2017-01-26" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.6
+
+        <small>
+            (2017-01-26)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.4.6" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Support socket context options passed to <code>Server</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="202817509" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/64" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/64/hovercard" href="https://github.com/reactphp/socket/pull/64">#64</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Fix: Properly return <code>null</code> for unknown addresses<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="202649771" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/63" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/63/hovercard" href="https://github.com/reactphp/socket/pull/63">#63</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Improve documentation for <code>ServerInterface</code> and lock test suite requirements<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="200869964" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/60" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/60/hovercard" href="https://github.com/reactphp/socket/pull/60">#60</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="199442321" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/57" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/57/hovercard" href="https://github.com/reactphp/socket/pull/57">#57</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/shaunbramley/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/shaunbramley">@shaunbramley</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="045-2017-01-08" class="anchor" href="#045-2017-01-08" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.5
+
+        <small>
+            (2017-01-08)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.4.5" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Add <code>SecureServer</code> for secure TLS connections<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="198240316" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/55" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/55/hovercard" href="https://github.com/reactphp/socket/pull/55">#55</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Add functional integration tests<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="197990494" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/54" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/54/hovercard" href="https://github.com/reactphp/socket/pull/54">#54</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2016" class="anchor" href="#2016" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2016
+    </h2>
+
+    
+            <h3>
+        <a id="044-2016-12-19" class="anchor" href="#044-2016-12-19" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.4
+
+        <small>
+            (2016-12-19)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.4.4" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature / Fix: <code>ConnectionInterface</code> should extend <code>DuplexStreamInterface</code> + documentation<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="188979236" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/50" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/50/hovercard" href="https://github.com/reactphp/socket/pull/50">#50</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Feature / Fix: Improve test suite and switch to normal stream handler<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="189327106" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/51" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/51/hovercard" href="https://github.com/reactphp/socket/pull/51">#51</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Feature: Add examples<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="188333298" data-permission-text="Title is private" data-url="https://github.com/reactphp/socket/issues/49" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/socket/pull/49/hovercard" href="https://github.com/reactphp/socket/pull/49">#49</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="043-2016-03-01" class="anchor" href="#043-2016-03-01" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.3
+
+        <small>
+            (2016-03-01)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.4.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Suppress errors on stream_socket_accept to prevent PHP from crashing</li>
+<li>Support for PHP7 and HHVM</li>
+<li>Support PHP 5.3 again</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2014" class="anchor" href="#2014" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2014
+    </h2>
+
+    
+            <h3>
+        <a id="042-2014-05-25" class="anchor" href="#042-2014-05-25" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.2
+
+        <small>
+            (2014-05-25)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.4.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>[Connection] Verify stream is valid resource</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="041-2014-04-13" class="anchor" href="#041-2014-04-13" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.1
+
+        <small>
+            (2014-04-13)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.4.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: Check read buffer for data before shutdown signal and end emit (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/artydev/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/artydev">@artydev</a>)</li>
+<li>Bug fix: v0.3.4 changes merged for v0.4.1</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="034-2014-02-17" class="anchor" href="#034-2014-02-17" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.3.4
+
+        <small>
+            (2014-02-17)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.3.4" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: Reset socket to non-blocking after shutting down (PHP bug)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="040-2014-02-02" class="anchor" href="#040-2014-02-02" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.0
+
+        <small>
+            (2014-02-02)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.4.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>BC break: Bump minimum PHP version to PHP 5.4, remove 5.3 specific hacks</li>
+<li>BC break: Update to React/Promise 2.0</li>
+<li>BC break: Update to Evenement 2.0</li>
+<li>Dependency: Autoloading and filesystem structure now PSR-4 instead of PSR-0</li>
+<li>Bump React dependencies to v0.4</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2013" class="anchor" href="#2013" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2013
+    </h2>
+
+    
+            <h3>
+        <a id="033-2013-07-08" class="anchor" href="#033-2013-07-08" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.3.3
+
+        <small>
+            (2013-07-08)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.3.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="032-2013-04-26" class="anchor" href="#032-2013-04-26" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.3.2
+
+        <small>
+            (2013-04-26)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.3.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="031-2013-04-20" class="anchor" href="#031-2013-04-20" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.3.1
+
+        <small>
+            (2013-04-20)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.3.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Support binding to IPv6 addresses (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="030-2013-01-21" class="anchor" href="#030-2013-01-21" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.3.0
+
+        <small>
+            (2013-01-21)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.3.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bump React dependencies to v0.3</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2012" class="anchor" href="#2012" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2012
+    </h2>
+
+    
+            <h3>
+        <a id="026-2012-12-14" class="anchor" href="#026-2012-12-14" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.2.6
+
+        <small>
+            (2012-12-14)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.2.6" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="023-2012-11-05" class="anchor" href="#023-2012-11-05" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.2.3
+
+        <small>
+            (2012-11-05)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.2.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="020-2012-09-10" class="anchor" href="#020-2012-09-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.2.0
+
+        <small>
+            (2012-09-10)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.2.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bump React dependencies to v0.2</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="011-2012-07-12" class="anchor" href="#011-2012-07-12" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.1.1
+
+        <small>
+            (2012-07-12)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.1.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="010-2012-07-11" class="anchor" href="#010-2012-07-11" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.1.0
+
+        <small>
+            (2012-07-11)
+            <a href="https://github.com/reactphp/socket/releases/tag/v0.1.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>First tagged release</li>
+</ul>
+
+    <hr>
+    
+    <ul class="links">
+        <li>
+            <a href="https://github.com/reactphp/socket/releases.atom">
+                <i class="icon-feed" aria-hidden="true"></i>
+                Subscribe to the Changelog feed
+            </a>
+        </li>
+    </ul>
+                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../socket/">Socket</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v1.4.0
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/socket#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v1.3.0#readme" class="version-selector__version">
+                                                    v1.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v1.2.1#readme" class="version-selector__version">
+                                                    v1.2.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v1.2.0#readme" class="version-selector__version">
+                                                    v1.2.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v1.1.0#readme" class="version-selector__version">
+                                                    v1.1.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v1.0.0#readme" class="version-selector__version">
+                                                    v1.0.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.12#readme" class="version-selector__version">
+                                                    v0.8.12
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.11#readme" class="version-selector__version">
+                                                    v0.8.11
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.10#readme" class="version-selector__version">
+                                                    v0.8.10
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.9#readme" class="version-selector__version">
+                                                    v0.8.9
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.8#readme" class="version-selector__version">
+                                                    v0.8.8
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.7#readme" class="version-selector__version">
+                                                    v0.8.7
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.6#readme" class="version-selector__version">
+                                                    v0.8.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.5#readme" class="version-selector__version">
+                                                    v0.8.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.4#readme" class="version-selector__version">
+                                                    v0.8.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.3#readme" class="version-selector__version">
+                                                    v0.8.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.2#readme" class="version-selector__version">
+                                                    v0.8.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.1#readme" class="version-selector__version">
+                                                    v0.8.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.0#readme" class="version-selector__version">
+                                                    v0.8.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.7.2#readme" class="version-selector__version">
+                                                    v0.7.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.7.1#readme" class="version-selector__version">
+                                                    v0.7.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.7.0#readme" class="version-selector__version">
+                                                    v0.7.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.6.0#readme" class="version-selector__version">
+                                                    v0.6.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.5.1#readme" class="version-selector__version">
+                                                    v0.5.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.5.0#readme" class="version-selector__version">
+                                                    v0.5.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.4.6#readme" class="version-selector__version">
+                                                    v0.4.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.4.5#readme" class="version-selector__version">
+                                                    v0.4.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.4.4#readme" class="version-selector__version">
+                                                    v0.4.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.4.3#readme" class="version-selector__version">
+                                                    v0.4.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.4.2#readme" class="version-selector__version">
+                                                    v0.4.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.4.1#readme" class="version-selector__version">
+                                                    v0.4.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.3.4#readme" class="version-selector__version">
+                                                    v0.3.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.4.0#readme" class="version-selector__version">
+                                                    v0.4.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.3.3#readme" class="version-selector__version">
+                                                    v0.3.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.3.2#readme" class="version-selector__version">
+                                                    v0.3.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.3.1#readme" class="version-selector__version">
+                                                    v0.3.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.3.0#readme" class="version-selector__version">
+                                                    v0.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.2.6#readme" class="version-selector__version">
+                                                    v0.2.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.2.3#readme" class="version-selector__version">
+                                                    v0.2.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.2.0#readme" class="version-selector__version">
+                                                    v0.2.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.1.1#readme" class="version-selector__version">
+                                                    v0.1.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.1.0#readme" class="version-selector__version">
+                                                    v0.1.0
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/socket">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../socket/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../socket/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/socket:^1.4.0</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (307 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cboden">
+                                    <img src="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=80 2x" alt="cboden" title="cboden (87 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/igorw">
+                                    <img src="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=80 2x" alt="igorw" title="igorw (69 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (63 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (31 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/andig">
+                                    <img src="https://avatars1.githubusercontent.com/u/184815?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/184815?v=4&amp;s=80 2x" alt="andig" title="andig (5 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/carusogabriel">
+                                    <img src="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=80 2x" alt="carusogabriel" title="carusogabriel (4 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/artggd">
+                                    <img src="https://avatars2.githubusercontent.com/u/1837559?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/1837559?v=4&amp;s=80 2x" alt="artggd" title="artggd (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/tkleinhakisa">
+                                    <img src="https://avatars3.githubusercontent.com/u/1912952?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/1912952?v=4&amp;s=80 2x" alt="tkleinhakisa" title="tkleinhakisa (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/valga">
+                                    <img src="https://avatars2.githubusercontent.com/u/23472603?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/23472603?v=4&amp;s=80 2x" alt="valga" title="valga (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/alexmace">
+                                    <img src="https://avatars2.githubusercontent.com/u/207391?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/207391?v=4&amp;s=80 2x" alt="alexmace" title="alexmace (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/DaveRandom">
+                                    <img src="https://avatars1.githubusercontent.com/u/2396425?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/2396425?v=4&amp;s=80 2x" alt="DaveRandom" title="DaveRandom (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/christiaan">
+                                    <img src="https://avatars0.githubusercontent.com/u/118490?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/118490?v=4&amp;s=80 2x" alt="christiaan" title="christiaan (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/elliot">
+                                    <img src="https://avatars2.githubusercontent.com/u/9938?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/9938?v=4&amp;s=80 2x" alt="elliot" title="elliot (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/hansott">
+                                    <img src="https://avatars1.githubusercontent.com/u/3886384?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/3886384?v=4&amp;s=80 2x" alt="hansott" title="hansott (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/mmoreram">
+                                    <img src="https://avatars1.githubusercontent.com/u/521409?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/521409?v=4&amp;s=80 2x" alt="mmoreram" title="mmoreram (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/kelunik">
+                                    <img src="https://avatars0.githubusercontent.com/u/2743004?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/2743004?v=4&amp;s=80 2x" alt="kelunik" title="kelunik (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/Sgoettschkes">
+                                    <img src="https://avatars1.githubusercontent.com/u/628796?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/628796?v=4&amp;s=80 2x" alt="Sgoettschkes" title="Sgoettschkes (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cn007b">
+                                    <img src="https://avatars1.githubusercontent.com/u/5052324?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/5052324?v=4&amp;s=80 2x" alt="cn007b" title="cn007b (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/e3betht">
+                                    <img src="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=80 2x" alt="e3betht" title="e3betht (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/the-eater">
+                                    <img src="https://avatars2.githubusercontent.com/u/1922630?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/1922630?v=4&amp;s=80 2x" alt="the-eater" title="the-eater (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-socket-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-socket-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,3 6,2 12,1 18,1 24,1 30,4 36,1 42,3 48,1 54,1 60,1 66,4 72,1 78,1 84,1 90,1 96,1 102,1 108,1 114,1 120,2 126,2 132,1 138,1 144,5 150,1 156,2 162,2 168,1 174,1 180,1 186,1 192,1 198,1 204,1 210,1 216,1 222,1 228,1 234,3 240,9 246,2 252,1 258,1 264,1 270,2 276,1 282,1 288,1 294,7 300,12 306,3" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-socket-participation-gradient);mask:url(#reactphp-socket-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/socket/index.html b/socket/index.html
new file mode 100644
index 000000000..98bedf6b2
--- /dev/null
+++ b/socket/index.html
@@ -0,0 +1,1769 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>Socket: 
+Socket - ReactPHP</title>
+
+        <meta name="description" content="Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+            </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                                    <h1>Socket</h1>
+
+                    
+<p><a href="https://travis-ci.org/reactphp/socket" rel="nofollow"><img src="https://camo.githubusercontent.com/bd4896d7cbfc5054f3eb51b2b30e141abce8dd0b/68747470733a2f2f7472617669732d63692e6f72672f72656163747068702f736f636b65742e7376673f6272616e63683d6d6173746572" alt="Build Status" data-canonical-src="https://travis-ci.org/reactphp/socket.svg?branch=master" style="max-width:100%;"></a></p>
+<p>Async, streaming plaintext TCP/IP and secure TLS socket server and client
+connections for <a href="https://reactphp.org/" rel="nofollow">ReactPHP</a>.</p>
+<p>The socket library provides re-usable interfaces for a socket-layer
+server and client based on the <a href="../event-loop/"><code>EventLoop</code></a>
+and <a href="../stream/"><code>Stream</code></a> components.
+Its server component allows you to build networking servers that accept incoming
+connections from networking clients (such as an HTTP server).
+Its client component allows you to build networking clients that establish
+outgoing connections to networking servers (such as an HTTP or database client).
+This library provides async, streaming means for all of this, so you can
+handle multiple concurrent connections without blocking.</p>
+<p><strong>Table of Contents</strong></p>
+<ul>
+<li><a href="#quickstart-example">Quickstart example</a></li>
+<li>
+<a href="#connection-usage">Connection usage</a>
+<ul>
+<li>
+<a href="#connectioninterface">ConnectionInterface</a>
+<ul>
+<li><a href="#getremoteaddress">getRemoteAddress()</a></li>
+<li><a href="#getlocaladdress">getLocalAddress()</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li>
+<a href="#server-usage">Server usage</a>
+<ul>
+<li>
+<a href="#serverinterface">ServerInterface</a>
+<ul>
+<li><a href="#connection-event">connection event</a></li>
+<li><a href="#error-event">error event</a></li>
+<li><a href="#getaddress">getAddress()</a></li>
+<li><a href="#pause">pause()</a></li>
+<li><a href="#resume">resume()</a></li>
+<li><a href="#close">close()</a></li>
+</ul>
+</li>
+<li><a href="#server">Server</a></li>
+<li>
+<a href="#advanced-server-usage">Advanced server usage</a>
+<ul>
+<li><a href="#tcpserver">TcpServer</a></li>
+<li><a href="#secureserver">SecureServer</a></li>
+<li><a href="#unixserver">UnixServer</a></li>
+<li>
+<a href="#limitingserver">LimitingServer</a>
+<ul>
+<li><a href="#getconnections">getConnections()</a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+<li>
+<a href="#client-usage">Client usage</a>
+<ul>
+<li>
+<a href="#connectorinterface">ConnectorInterface</a>
+<ul>
+<li><a href="#connect">connect()</a></li>
+</ul>
+</li>
+<li><a href="#connector">Connector</a></li>
+<li>
+<a href="#advanced-client-usage">Advanced client usage</a>
+<ul>
+<li><a href="#tcpconnector">TcpConnector</a></li>
+<li><a href="#happyeyeballsconnector">HappyEyeBallsConnector</a></li>
+<li><a href="#dnsconnector">DnsConnector</a></li>
+<li><a href="#secureconnector">SecureConnector</a></li>
+<li><a href="#timeoutconnector">TimeoutConnector</a></li>
+<li><a href="#unixconnector">UnixConnector</a></li>
+<li><a href="#fixeduriconnector">FixUriConnector</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li><a href="#install">Install</a></li>
+<li><a href="#tests">Tests</a></li>
+<li><a href="#license">License</a></li>
+</ul>
+<h2>
+<a id="quickstart-example" class="anchor" href="#quickstart-example" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Quickstart example</h2>
+<p>Here is a server that closes the connection if you send it anything:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$loop</span> <span class="pl-k">=</span> <span class="pl-c1">React\EventLoop\</span><span class="pl-c1">Factory</span><span class="pl-k">::</span>create();</span>
+<span class="pl-s1"><span class="pl-smi">$socket</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Server</span>(<span class="pl-s"><span class="pl-pds">'</span>127.0.0.1:8080<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$socket</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>connection<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-c1">React\Socket\</span><span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">"</span>Hello <span class="pl-pds">"</span></span> <span class="pl-k">.</span> <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>getRemoteAddress() <span class="pl-k">.</span> <span class="pl-s"><span class="pl-pds">"</span>!<span class="pl-cce">\n</span><span class="pl-pds">"</span></span>);</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">"</span>Welcome to this amazing server!<span class="pl-cce">\n</span><span class="pl-pds">"</span></span>);</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">"</span>Here's a tip: don't say anything.<span class="pl-cce">\n</span><span class="pl-pds">"</span></span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>data<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-smi">$data</span>) <span class="pl-k">use</span> (<span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">        <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>close();</span>
+<span class="pl-s1">    });</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>run();</span></pre></div>
+<p>See also the <a href="https://github.com/reactphp/socket/blob/v1.4.0/examples">examples</a>.</p>
+<p>Here's a client that outputs the output of said server and then attempts to
+send it a string:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$loop</span> <span class="pl-k">=</span> <span class="pl-c1">React\EventLoop\</span><span class="pl-c1">Factory</span><span class="pl-k">::</span>create();</span>
+<span class="pl-s1"><span class="pl-smi">$connector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Connector</span>(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$connector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>127.0.0.1:8080<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-c1">React\Socket\</span><span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$connection</span>) <span class="pl-k">use</span> (<span class="pl-smi">$loop</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>pipe(<span class="pl-k">new</span> <span class="pl-c1">React\Stream\</span><span class="pl-c1">WritableResourceStream</span>(<span class="pl-c1">STDOUT</span>, <span class="pl-smi">$loop</span>));</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">"</span>Hello World!<span class="pl-cce">\n</span><span class="pl-pds">"</span></span>);</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>run();</span></pre></div>
+<h2>
+<a id="connection-usage" class="anchor" href="#connection-usage" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Connection usage</h2>
+<h3>
+<a id="connectioninterface" class="anchor" href="#connectioninterface" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>ConnectionInterface</h3>
+<p>The <code>ConnectionInterface</code> is used to represent any incoming and outgoing
+connection, such as a normal TCP/IP connection.</p>
+<p>An incoming or outgoing connection is a duplex stream (both readable and
+writable) that implements React's
+<a href="../stream/#duplexstreaminterface"><code>DuplexStreamInterface</code></a>.
+It contains additional properties for the local and remote address (client IP)
+where this connection has been established to/from.</p>
+<p>Most commonly, instances implementing this <code>ConnectionInterface</code> are emitted
+by all classes implementing the <a href="#serverinterface"><code>ServerInterface</code></a> and
+used by all classes implementing the <a href="#connectorinterface"><code>ConnectorInterface</code></a>.</p>
+<p>Because the <code>ConnectionInterface</code> implements the underlying
+<a href="../stream/#duplexstreaminterface"><code>DuplexStreamInterface</code></a>
+you can use any of its events and methods as usual:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>data<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-smi">$chunk</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-smi">$chunk</span>;</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>end<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> () {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>ended<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>error<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-c1">Exception</span> <span class="pl-smi">$e</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>error: <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$e</span><span class="pl-k">-&gt;</span>getMessage();</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>close<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> () {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>closed<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-smi">$data</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>end(<span class="pl-smi">$data</span> <span class="pl-k">=</span> <span class="pl-c1">null</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>close();</span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> …</span></span></pre></div>
+<p>For more details, see the
+<a href="../stream/#duplexstreaminterface"><code>DuplexStreamInterface</code></a>.</p>
+<h4>
+<a id="getremoteaddress" class="anchor" href="#getremoteaddress" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>getRemoteAddress()</h4>
+<p>The <code>getRemoteAddress(): ?string</code> method returns the full remote address
+(URI) where this connection has been established with.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$address</span> <span class="pl-k">=</span> <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>getRemoteAddress();</span>
+<span class="pl-s1"><span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>Connection with <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$address</span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span></pre></div>
+<p>If the remote address can not be determined or is unknown at this time (such as
+after the connection has been closed), it MAY return a <code>NULL</code> value instead.</p>
+<p>Otherwise, it will return the full address (URI) as a string value, such
+as <code>tcp://127.0.0.1:8080</code>, <code>tcp://[::1]:80</code>, <code>tls://127.0.0.1:443</code>,
+<code>unix://example.sock</code> or <code>unix:///path/to/example.sock</code>.
+Note that individual URI components are application specific and depend
+on the underlying transport protocol.</p>
+<p>If this is a TCP/IP based connection and you only want the remote IP, you may
+use something like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$address</span> <span class="pl-k">=</span> <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>getRemoteAddress();</span>
+<span class="pl-s1"><span class="pl-smi">$ip</span> <span class="pl-k">=</span> <span class="pl-c1">trim</span>(<span class="pl-c1">parse_url</span>(<span class="pl-smi">$address</span>, <span class="pl-c1">PHP_URL_HOST</span>), <span class="pl-s"><span class="pl-pds">'</span>[]<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"><span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>Connection with <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$ip</span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span></pre></div>
+<h4>
+<a id="getlocaladdress" class="anchor" href="#getlocaladdress" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>getLocalAddress()</h4>
+<p>The <code>getLocalAddress(): ?string</code> method returns the full local address
+(URI) where this connection has been established with.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$address</span> <span class="pl-k">=</span> <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>getLocalAddress();</span>
+<span class="pl-s1"><span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>Connection with <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$address</span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span></pre></div>
+<p>If the local address can not be determined or is unknown at this time (such as
+after the connection has been closed), it MAY return a <code>NULL</code> value instead.</p>
+<p>Otherwise, it will return the full address (URI) as a string value, such
+as <code>tcp://127.0.0.1:8080</code>, <code>tcp://[::1]:80</code>, <code>tls://127.0.0.1:443</code>,
+<code>unix://example.sock</code> or <code>unix:///path/to/example.sock</code>.
+Note that individual URI components are application specific and depend
+on the underlying transport protocol.</p>
+<p>This method complements the <a href="#getremoteaddress"><code>getRemoteAddress()</code></a> method,
+so they should not be confused.</p>
+<p>If your <code>TcpServer</code> instance is listening on multiple interfaces (e.g. using
+the address <code>0.0.0.0</code>), you can use this method to find out which interface
+actually accepted this connection (such as a public or local interface).</p>
+<p>If your system has multiple interfaces (e.g. a WAN and a LAN interface),
+you can use this method to find out which interface was actually
+used for this connection.</p>
+<h2>
+<a id="server-usage" class="anchor" href="#server-usage" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Server usage</h2>
+<h3>
+<a id="serverinterface" class="anchor" href="#serverinterface" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>ServerInterface</h3>
+<p>The <code>ServerInterface</code> is responsible for providing an interface for accepting
+incoming streaming connections, such as a normal TCP/IP connection.</p>
+<p>Most higher-level components (such as a HTTP server) accept an instance
+implementing this interface to accept incoming streaming connections.
+This is usually done via dependency injection, so it's fairly simple to actually
+swap this implementation against any other implementation of this interface.
+This means that you SHOULD typehint against this interface instead of a concrete
+implementation of this interface.</p>
+<p>Besides defining a few methods, this interface also implements the
+<a href="https://github.com/igorw/evenement"><code>EventEmitterInterface</code></a>
+which allows you to react to certain events.</p>
+<h4>
+<a id="connection-event" class="anchor" href="#connection-event" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>connection event</h4>
+<p>The <code>connection</code> event will be emitted whenever a new connection has been
+established, i.e. a new client connects to this server socket:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>connection<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-c1">React\Socket\</span><span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>new connection<span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">});</span></pre></div>
+<p>See also the <a href="#connectioninterface"><code>ConnectionInterface</code></a> for more details
+about handling the incoming connection.</p>
+<h4>
+<a id="error-event" class="anchor" href="#error-event" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>error event</h4>
+<p>The <code>error</code> event will be emitted whenever there's an error accepting a new
+connection from a client.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>error<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-c1">Exception</span> <span class="pl-smi">$e</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>error: <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$e</span><span class="pl-k">-&gt;</span>getMessage() <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">});</span></pre></div>
+<p>Note that this is not a fatal error event, i.e. the server keeps listening for
+new connections even after this event.</p>
+<h4>
+<a id="getaddress" class="anchor" href="#getaddress" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>getAddress()</h4>
+<p>The <code>getAddress(): ?string</code> method can be used to
+return the full address (URI) this server is currently listening on.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$address</span> <span class="pl-k">=</span> <span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>getAddress();</span>
+<span class="pl-s1"><span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>Server listening on <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$address</span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span></pre></div>
+<p>If the address can not be determined or is unknown at this time (such as
+after the socket has been closed), it MAY return a <code>NULL</code> value instead.</p>
+<p>Otherwise, it will return the full address (URI) as a string value, such
+as <code>tcp://127.0.0.1:8080</code>, <code>tcp://[::1]:80</code>, <code>tls://127.0.0.1:443</code>
+<code>unix://example.sock</code> or <code>unix:///path/to/example.sock</code>.
+Note that individual URI components are application specific and depend
+on the underlying transport protocol.</p>
+<p>If this is a TCP/IP based server and you only want the local port, you may
+use something like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$address</span> <span class="pl-k">=</span> <span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>getAddress();</span>
+<span class="pl-s1"><span class="pl-smi">$port</span> <span class="pl-k">=</span> <span class="pl-c1">parse_url</span>(<span class="pl-smi">$address</span>, <span class="pl-c1">PHP_URL_PORT</span>);</span>
+<span class="pl-s1"><span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>Server listening on port <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$port</span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span></pre></div>
+<h4>
+<a id="pause" class="anchor" href="#pause" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>pause()</h4>
+<p>The <code>pause(): void</code> method can be used to
+pause accepting new incoming connections.</p>
+<p>Removes the socket resource from the EventLoop and thus stop accepting
+new connections. Note that the listening socket stays active and is not
+closed.</p>
+<p>This means that new incoming connections will stay pending in the
+operating system backlog until its configurable backlog is filled.
+Once the backlog is filled, the operating system may reject further
+incoming connections until the backlog is drained again by resuming
+to accept new connections.</p>
+<p>Once the server is paused, no futher <code>connection</code> events SHOULD
+be emitted.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>pause();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>connection<span class="pl-pds">'</span></span>, assertShouldNeverCalled());</span></pre></div>
+<p>This method is advisory-only, though generally not recommended, the
+server MAY continue emitting <code>connection</code> events.</p>
+<p>Unless otherwise noted, a successfully opened server SHOULD NOT start
+in paused state.</p>
+<p>You can continue processing events by calling <code>resume()</code> again.</p>
+<p>Note that both methods can be called any number of times, in particular
+calling <code>pause()</code> more than once SHOULD NOT have any effect.
+Similarly, calling this after <code>close()</code> is a NO-OP.</p>
+<h4>
+<a id="resume" class="anchor" href="#resume" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>resume()</h4>
+<p>The <code>resume(): void</code> method can be used to
+resume accepting new incoming connections.</p>
+<p>Re-attach the socket resource to the EventLoop after a previous <code>pause()</code>.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>pause();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addTimer(<span class="pl-c1">1.0</span>, <span class="pl-k">function</span> () <span class="pl-k">use</span> (<span class="pl-smi">$server</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>resume();</span>
+<span class="pl-s1">});</span></pre></div>
+<p>Note that both methods can be called any number of times, in particular
+calling <code>resume()</code> without a prior <code>pause()</code> SHOULD NOT have any effect.
+Similarly, calling this after <code>close()</code> is a NO-OP.</p>
+<h4>
+<a id="close" class="anchor" href="#close" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>close()</h4>
+<p>The <code>close(): void</code> method can be used to
+shut down this listening socket.</p>
+<p>This will stop listening for new incoming connections on this socket.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>Shutting down server socket<span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>close();</span></pre></div>
+<p>Calling this method more than once on the same instance is a NO-OP.</p>
+<h3>
+<a id="server" class="anchor" href="#server" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Server</h3>
+<p>The <code>Server</code> class is the main class in this package that implements the
+<a href="#serverinterface"><code>ServerInterface</code></a> and allows you to accept incoming
+streaming connections, such as plaintext TCP/IP or secure TLS connection streams.
+Connections can also be accepted on Unix domain sockets.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Server</span>(<span class="pl-c1">8080</span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+<p>As above, the <code>$uri</code> parameter can consist of only a port, in which case the
+server will default to listening on the localhost address <code>127.0.0.1</code>,
+which means it will not be reachable from outside of this system.</p>
+<p>In order to use a random port assignment, you can use the port <code>0</code>:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Server</span>(<span class="pl-c1">0</span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$address</span> <span class="pl-k">=</span> <span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>getAddress();</span></pre></div>
+<p>In order to change the host the socket is listening on, you can provide an IP
+address through the first parameter provided to the constructor, optionally
+preceded by the <code>tcp://</code> scheme:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Server</span>(<span class="pl-s"><span class="pl-pds">'</span>192.168.0.1:8080<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+<p>If you want to listen on an IPv6 address, you MUST enclose the host in square
+brackets:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Server</span>(<span class="pl-s"><span class="pl-pds">'</span>[::1]:8080<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+<p>To listen on a Unix domain socket (UDS) path, you MUST prefix the URI with the
+<code>unix://</code> scheme:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Server</span>(<span class="pl-s"><span class="pl-pds">'</span>unix:///tmp/server.sock<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+<p>If the given URI is invalid, does not contain a port, any other scheme or if it
+contains a hostname, it will throw an <code>InvalidArgumentException</code>:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> throws InvalidArgumentException due to missing port</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Server</span>(<span class="pl-s"><span class="pl-pds">'</span>127.0.0.1<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+<p>If the given URI appears to be valid, but listening on it fails (such as if port
+is already in use or port below 1024 may require root access etc.), it will
+throw a <code>RuntimeException</code>:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$first</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Server</span>(<span class="pl-c1">8080</span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> throws RuntimeException because port is already in use</span></span>
+<span class="pl-s1"><span class="pl-smi">$second</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Server</span>(<span class="pl-c1">8080</span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+<blockquote>
+<p>Note that these error conditions may vary depending on your system and/or
+configuration.
+See the exception message and code for more details about the actual error
+condition.</p>
+</blockquote>
+<p>Optionally, you can specify <a href="https://www.php.net/manual/en/context.socket.php" rel="nofollow">TCP socket context options</a>
+for the underlying stream socket resource like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Server</span>(<span class="pl-s"><span class="pl-pds">'</span>[::1]:8080<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>, <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>tcp<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">        <span class="pl-s"><span class="pl-pds">'</span>backlog<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">200</span>,</span>
+<span class="pl-s1">        <span class="pl-s"><span class="pl-pds">'</span>so_reuseport<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">true</span>,</span>
+<span class="pl-s1">        <span class="pl-s"><span class="pl-pds">'</span>ipv6_v6only<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">true</span></span>
+<span class="pl-s1">    )</span>
+<span class="pl-s1">));</span></pre></div>
+<blockquote>
+<p>Note that available <a href="https://www.php.net/manual/en/context.socket.php" rel="nofollow">socket context options</a>,
+their defaults and effects of changing these may vary depending on your system
+and/or PHP version.
+Passing unknown context options has no effect.
+For BC reasons, you can also pass the TCP socket context options as a simple
+array without wrapping this in another array under the <code>tcp</code> key.</p>
+</blockquote>
+<p>You can start a secure TLS (formerly known as SSL) server by simply prepending
+the <code>tls://</code> URI scheme.
+Internally, it will wait for plaintext TCP/IP connections and then performs a
+TLS handshake for each connection.
+It thus requires valid <a href="https://www.php.net/manual/en/context.ssl.php" rel="nofollow">TLS context options</a>,
+which in its most basic form may look something like this if you're using a
+PEM encoded certificate file:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Server</span>(<span class="pl-s"><span class="pl-pds">'</span>tls://127.0.0.1:8080<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>, <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>tls<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">        <span class="pl-s"><span class="pl-pds">'</span>local_cert<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>server.pem<span class="pl-pds">'</span></span></span>
+<span class="pl-s1">    )</span>
+<span class="pl-s1">));</span></pre></div>
+<blockquote>
+<p>Note that the certificate file will not be loaded on instantiation but when an
+incoming connection initializes its TLS context.
+This implies that any invalid certificate file paths or contents will only cause
+an <code>error</code> event at a later time.</p>
+</blockquote>
+<p>If your private key is encrypted with a passphrase, you have to specify it
+like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Server</span>(<span class="pl-s"><span class="pl-pds">'</span>tls://127.0.0.1:8000<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>, <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>tls<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">        <span class="pl-s"><span class="pl-pds">'</span>local_cert<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>server.pem<span class="pl-pds">'</span></span>,</span>
+<span class="pl-s1">        <span class="pl-s"><span class="pl-pds">'</span>passphrase<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>secret<span class="pl-pds">'</span></span></span>
+<span class="pl-s1">    )</span>
+<span class="pl-s1">));</span></pre></div>
+<p>By default, this server supports TLSv1.0+ and excludes support for legacy
+SSLv2/SSLv3. As of PHP 5.6+ you can also explicitly choose the TLS version you
+want to negotiate with the remote side:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Server</span>(<span class="pl-s"><span class="pl-pds">'</span>tls://127.0.0.1:8000<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>, <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>tls<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">        <span class="pl-s"><span class="pl-pds">'</span>local_cert<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>server.pem<span class="pl-pds">'</span></span>,</span>
+<span class="pl-s1">        <span class="pl-s"><span class="pl-pds">'</span>crypto_method<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">STREAM_CRYPTO_METHOD_TLSv1_2_SERVER</span></span>
+<span class="pl-s1">    )</span>
+<span class="pl-s1">));</span></pre></div>
+<blockquote>
+<p>Note that available <a href="https://www.php.net/manual/en/context.ssl.php" rel="nofollow">TLS context options</a>,
+their defaults and effects of changing these may vary depending on your system
+and/or PHP version.
+The outer context array allows you to also use <code>tcp</code> (and possibly more)
+context options at the same time.
+Passing unknown context options has no effect.
+If you do not use the <code>tls://</code> scheme, then passing <code>tls</code> context options
+has no effect.</p>
+</blockquote>
+<p>Whenever a client connects, it will emit a <code>connection</code> event with a connection
+instance implementing <a href="#connectioninterface"><code>ConnectionInterface</code></a>:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>connection<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-c1">React\Socket\</span><span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>Plaintext connection from <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>getRemoteAddress() <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">    </span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>hello there!<span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>);</span>
+<span class="pl-s1">    …</span>
+<span class="pl-s1">});</span></pre></div>
+<p>See also the <a href="#serverinterface"><code>ServerInterface</code></a> for more details.</p>
+<blockquote>
+<p>Note that the <code>Server</code> class is a concrete implementation for TCP/IP sockets.
+If you want to typehint in your higher-level protocol implementation, you SHOULD
+use the generic <a href="#serverinterface"><code>ServerInterface</code></a> instead.</p>
+</blockquote>
+<h3>
+<a id="advanced-server-usage" class="anchor" href="#advanced-server-usage" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Advanced server usage</h3>
+<h4>
+<a id="tcpserver" class="anchor" href="#tcpserver" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>TcpServer</h4>
+<p>The <code>TcpServer</code> class implements the <a href="#serverinterface"><code>ServerInterface</code></a> and
+is responsible for accepting plaintext TCP/IP connections.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">TcpServer</span>(<span class="pl-c1">8080</span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+<p>As above, the <code>$uri</code> parameter can consist of only a port, in which case the
+server will default to listening on the localhost address <code>127.0.0.1</code>,
+which means it will not be reachable from outside of this system.</p>
+<p>In order to use a random port assignment, you can use the port <code>0</code>:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">TcpServer</span>(<span class="pl-c1">0</span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$address</span> <span class="pl-k">=</span> <span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>getAddress();</span></pre></div>
+<p>In order to change the host the socket is listening on, you can provide an IP
+address through the first parameter provided to the constructor, optionally
+preceded by the <code>tcp://</code> scheme:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">TcpServer</span>(<span class="pl-s"><span class="pl-pds">'</span>192.168.0.1:8080<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+<p>If you want to listen on an IPv6 address, you MUST enclose the host in square
+brackets:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">TcpServer</span>(<span class="pl-s"><span class="pl-pds">'</span>[::1]:8080<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+<p>If the given URI is invalid, does not contain a port, any other scheme or if it
+contains a hostname, it will throw an <code>InvalidArgumentException</code>:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> throws InvalidArgumentException due to missing port</span></span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">TcpServer</span>(<span class="pl-s"><span class="pl-pds">'</span>127.0.0.1<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+<p>If the given URI appears to be valid, but listening on it fails (such as if port
+is already in use or port below 1024 may require root access etc.), it will
+throw a <code>RuntimeException</code>:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$first</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">TcpServer</span>(<span class="pl-c1">8080</span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> throws RuntimeException because port is already in use</span></span>
+<span class="pl-s1"><span class="pl-smi">$second</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">TcpServer</span>(<span class="pl-c1">8080</span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+<blockquote>
+<p>Note that these error conditions may vary depending on your system and/or
+configuration.
+See the exception message and code for more details about the actual error
+condition.</p>
+</blockquote>
+<p>Optionally, you can specify <a href="https://www.php.net/manual/en/context.socket.php" rel="nofollow">socket context options</a>
+for the underlying stream socket resource like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">TcpServer</span>(<span class="pl-s"><span class="pl-pds">'</span>[::1]:8080<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>, <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>backlog<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">200</span>,</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>so_reuseport<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">true</span>,</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>ipv6_v6only<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">true</span></span>
+<span class="pl-s1">));</span></pre></div>
+<blockquote>
+<p>Note that available <a href="https://www.php.net/manual/en/context.socket.php" rel="nofollow">socket context options</a>,
+their defaults and effects of changing these may vary depending on your system
+and/or PHP version.
+Passing unknown context options has no effect.</p>
+</blockquote>
+<p>Whenever a client connects, it will emit a <code>connection</code> event with a connection
+instance implementing <a href="#connectioninterface"><code>ConnectionInterface</code></a>:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>connection<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-c1">React\Socket\</span><span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>Plaintext connection from <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>getRemoteAddress() <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">    </span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>hello there!<span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>);</span>
+<span class="pl-s1">    …</span>
+<span class="pl-s1">});</span></pre></div>
+<p>See also the <a href="#serverinterface"><code>ServerInterface</code></a> for more details.</p>
+<h4>
+<a id="secureserver" class="anchor" href="#secureserver" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>SecureServer</h4>
+<p>The <code>SecureServer</code> class implements the <a href="#serverinterface"><code>ServerInterface</code></a>
+and is responsible for providing a secure TLS (formerly known as SSL) server.</p>
+<p>It does so by wrapping a <a href="#tcpserver"><code>TcpServer</code></a> instance which waits for plaintext
+TCP/IP connections and then performs a TLS handshake for each connection.
+It thus requires valid <a href="https://www.php.net/manual/en/context.ssl.php" rel="nofollow">TLS context options</a>,
+which in its most basic form may look something like this if you're using a
+PEM encoded certificate file:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">TcpServer</span>(<span class="pl-c1">8000</span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">SecureServer</span>(<span class="pl-smi">$server</span>, <span class="pl-smi">$loop</span>, <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>local_cert<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>server.pem<span class="pl-pds">'</span></span></span>
+<span class="pl-s1">));</span></pre></div>
+<blockquote>
+<p>Note that the certificate file will not be loaded on instantiation but when an
+incoming connection initializes its TLS context.
+This implies that any invalid certificate file paths or contents will only cause
+an <code>error</code> event at a later time.</p>
+</blockquote>
+<p>If your private key is encrypted with a passphrase, you have to specify it
+like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">TcpServer</span>(<span class="pl-c1">8000</span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">SecureServer</span>(<span class="pl-smi">$server</span>, <span class="pl-smi">$loop</span>, <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>local_cert<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>server.pem<span class="pl-pds">'</span></span>,</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>passphrase<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>secret<span class="pl-pds">'</span></span></span>
+<span class="pl-s1">));</span></pre></div>
+<p>By default, this server supports TLSv1.0+ and excludes support for legacy
+SSLv2/SSLv3. As of PHP 5.6+ you can also explicitly choose the TLS version you
+want to negotiate with the remote side:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">TcpServer</span>(<span class="pl-c1">8000</span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">SecureServer</span>(<span class="pl-smi">$server</span>, <span class="pl-smi">$loop</span>, <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>local_cert<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>server.pem<span class="pl-pds">'</span></span>,</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>crypto_method<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">STREAM_CRYPTO_METHOD_TLSv1_2_SERVER</span></span>
+<span class="pl-s1">));</span></pre></div>
+<blockquote>
+<p>Note that available <a href="https://www.php.net/manual/en/context.ssl.php" rel="nofollow">TLS context options</a>,
+their defaults and effects of changing these may vary depending on your system
+and/or PHP version.
+Passing unknown context options has no effect.</p>
+</blockquote>
+<p>Whenever a client completes the TLS handshake, it will emit a <code>connection</code> event
+with a connection instance implementing <a href="#connectioninterface"><code>ConnectionInterface</code></a>:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>connection<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-c1">React\Socket\</span><span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>Secure connection from<span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>getRemoteAddress() <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">    </span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>hello there!<span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>);</span>
+<span class="pl-s1">    …</span>
+<span class="pl-s1">});</span></pre></div>
+<p>Whenever a client fails to perform a successful TLS handshake, it will emit an
+<code>error</code> event and then close the underlying TCP/IP connection:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>error<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-c1">Exception</span> <span class="pl-smi">$e</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>Error<span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$e</span><span class="pl-k">-&gt;</span>getMessage() <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">});</span></pre></div>
+<p>See also the <a href="#serverinterface"><code>ServerInterface</code></a> for more details.</p>
+<p>Note that the <code>SecureServer</code> class is a concrete implementation for TLS sockets.
+If you want to typehint in your higher-level protocol implementation, you SHOULD
+use the generic <a href="#serverinterface"><code>ServerInterface</code></a> instead.</p>
+<blockquote>
+<p>Advanced usage: Despite allowing any <code>ServerInterface</code> as first parameter,
+you SHOULD pass a <code>TcpServer</code> instance as first parameter, unless you
+know what you're doing.
+Internally, the <code>SecureServer</code> has to set the required TLS context options on
+the underlying stream resources.
+These resources are not exposed through any of the interfaces defined in this
+package, but only through the internal <code>Connection</code> class.
+The <code>TcpServer</code> class is guaranteed to emit connections that implement
+the <code>ConnectionInterface</code> and uses the internal <code>Connection</code> class in order to
+expose these underlying resources.
+If you use a custom <code>ServerInterface</code> and its <code>connection</code> event does not
+meet this requirement, the <code>SecureServer</code> will emit an <code>error</code> event and
+then close the underlying connection.</p>
+</blockquote>
+<h4>
+<a id="unixserver" class="anchor" href="#unixserver" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>UnixServer</h4>
+<p>The <code>UnixServer</code> class implements the <a href="#serverinterface"><code>ServerInterface</code></a> and
+is responsible for accepting connections on Unix domain sockets (UDS).</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">UnixServer</span>(<span class="pl-s"><span class="pl-pds">'</span>/tmp/server.sock<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+<p>As above, the <code>$uri</code> parameter can consist of only a socket path or socket path
+prefixed by the <code>unix://</code> scheme.</p>
+<p>If the given URI appears to be valid, but listening on it fails (such as if the
+socket is already in use or the file not accessible etc.), it will throw a
+<code>RuntimeException</code>:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$first</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">UnixServer</span>(<span class="pl-s"><span class="pl-pds">'</span>/tmp/same.sock<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> throws RuntimeException because socket is already in use</span></span>
+<span class="pl-s1"><span class="pl-smi">$second</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">UnixServer</span>(<span class="pl-s"><span class="pl-pds">'</span>/tmp/same.sock<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+<blockquote>
+<p>Note that these error conditions may vary depending on your system and/or
+configuration.
+In particular, Zend PHP does only report "Unknown error" when the UDS path
+already exists and can not be bound. You may want to check <code>is_file()</code> on the
+given UDS path to report a more user-friendly error message in this case.
+See the exception message and code for more details about the actual error
+condition.</p>
+</blockquote>
+<p>Whenever a client connects, it will emit a <code>connection</code> event with a connection
+instance implementing <a href="#connectioninterface"><code>ConnectionInterface</code></a>:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>connection<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-c1">React\Socket\</span><span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>New connection<span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>hello there!<span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>);</span>
+<span class="pl-s1">    …</span>
+<span class="pl-s1">});</span></pre></div>
+<p>See also the <a href="#serverinterface"><code>ServerInterface</code></a> for more details.</p>
+<h4>
+<a id="limitingserver" class="anchor" href="#limitingserver" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>LimitingServer</h4>
+<p>The <code>LimitingServer</code> decorator wraps a given <code>ServerInterface</code> and is responsible
+for limiting and keeping track of open connections to this server instance.</p>
+<p>Whenever the underlying server emits a <code>connection</code> event, it will check its
+limits and then either</p>
+<ul>
+<li>keep track of this connection by adding it to the list of
+open connections and then forward the <code>connection</code> event</li>
+<li>or reject (close) the connection when its limits are exceeded and will
+forward an <code>error</code> event instead.</li>
+</ul>
+<p>Whenever a connection closes, it will remove this connection from the list of
+open connections.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">LimitingServer</span>(<span class="pl-smi">$server</span>, <span class="pl-c1">100</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>connection<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-c1">React\Socket\</span><span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>hello there!<span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>);</span>
+<span class="pl-s1">    …</span>
+<span class="pl-s1">});</span></pre></div>
+<p>See also the <a href="https://github.com/reactphp/socket/blob/v1.4.0/examples">second example</a> for more details.</p>
+<p>You have to pass a maximum number of open connections to ensure
+the server will automatically reject (close) connections once this limit
+is exceeded. In this case, it will emit an <code>error</code> event to inform about
+this and no <code>connection</code> event will be emitted.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">LimitingServer</span>(<span class="pl-smi">$server</span>, <span class="pl-c1">100</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>connection<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-c1">React\Socket\</span><span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>hello there!<span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>);</span>
+<span class="pl-s1">    …</span>
+<span class="pl-s1">});</span></pre></div>
+<p>You MAY pass a <code>null</code> limit in order to put no limit on the number of
+open connections and keep accepting new connection until you run out of
+operating system resources (such as open file handles). This may be
+useful if you do not want to take care of applying a limit but still want
+to use the <code>getConnections()</code> method.</p>
+<p>You can optionally configure the server to pause accepting new
+connections once the connection limit is reached. In this case, it will
+pause the underlying server and no longer process any new connections at
+all, thus also no longer closing any excessive connections.
+The underlying operating system is responsible for keeping a backlog of
+pending connections until its limit is reached, at which point it will
+start rejecting further connections.
+Once the server is below the connection limit, it will continue consuming
+connections from the backlog and will process any outstanding data on
+each connection.
+This mode may be useful for some protocols that are designed to wait for
+a response message (such as HTTP), but may be less useful for other
+protocols that demand immediate responses (such as a "welcome" message in
+an interactive chat).</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">LimitingServer</span>(<span class="pl-smi">$server</span>, <span class="pl-c1">100</span>, <span class="pl-c1">true</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>connection<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-c1">React\Socket\</span><span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>hello there!<span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>);</span>
+<span class="pl-s1">    …</span>
+<span class="pl-s1">});</span></pre></div>
+<h5>
+<a id="getconnections" class="anchor" href="#getconnections" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>getConnections()</h5>
+<p>The <code>getConnections(): ConnectionInterface[]</code> method can be used to
+return an array with all currently active connections.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-k">foreach</span> (<span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>getConnection() <span class="pl-k">as</span> <span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>Hi!<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1">}</span></pre></div>
+<h2>
+<a id="client-usage" class="anchor" href="#client-usage" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Client usage</h2>
+<h3>
+<a id="connectorinterface" class="anchor" href="#connectorinterface" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>ConnectorInterface</h3>
+<p>The <code>ConnectorInterface</code> is responsible for providing an interface for
+establishing streaming connections, such as a normal TCP/IP connection.</p>
+<p>This is the main interface defined in this package and it is used throughout
+React's vast ecosystem.</p>
+<p>Most higher-level components (such as HTTP, database or other networking
+service clients) accept an instance implementing this interface to create their
+TCP/IP connection to the underlying networking service.
+This is usually done via dependency injection, so it's fairly simple to actually
+swap this implementation against any other implementation of this interface.</p>
+<p>The interface only offers a single method:</p>
+<h4>
+<a id="connect" class="anchor" href="#connect" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>connect()</h4>
+<p>The <code>connect(string $uri): PromiseInterface&lt;ConnectionInterface,Exception&gt;</code> method
+can be used to create a streaming connection to the given remote address.</p>
+<p>It returns a <a href="../promise/">Promise</a> which either
+fulfills with a stream implementing <a href="#connectioninterface"><code>ConnectionInterface</code></a>
+on success or rejects with an <code>Exception</code> if the connection is not successful:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$connector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>google.com:443<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(</span>
+<span class="pl-s1">    <span class="pl-k">function</span> (<span class="pl-c1">React\Socket\</span><span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">        <span class="pl-c"><span class="pl-c">//</span> connection successfully established</span></span>
+<span class="pl-s1">    },</span>
+<span class="pl-s1">    <span class="pl-k">function</span> (<span class="pl-c1">Exception</span> <span class="pl-smi">$error</span>) {</span>
+<span class="pl-s1">        <span class="pl-c"><span class="pl-c">//</span> failed to connect due to $error</span></span>
+<span class="pl-s1">    }</span>
+<span class="pl-s1">);</span></pre></div>
+<p>See also <a href="#connectioninterface"><code>ConnectionInterface</code></a> for more details.</p>
+<p>The returned Promise MUST be implemented in such a way that it can be
+cancelled when it is still pending. Cancelling a pending promise MUST
+reject its value with an <code>Exception</code>. It SHOULD clean up any underlying
+resources and references as applicable:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> <span class="pl-smi">$connector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-smi">$uri</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$promise</span><span class="pl-k">-&gt;</span>cancel();</span></pre></div>
+<h3>
+<a id="connector" class="anchor" href="#connector" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Connector</h3>
+<p>The <code>Connector</code> class is the main class in this package that implements the
+<a href="#connectorinterface"><code>ConnectorInterface</code></a> and allows you to create streaming connections.</p>
+<p>You can use this connector to create any kind of streaming connections, such
+as plaintext TCP/IP, secure TLS or local Unix connection streams.</p>
+<p>It binds to the main event loop and can be used like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$loop</span> <span class="pl-k">=</span> <span class="pl-c1">React\EventLoop\</span><span class="pl-c1">Factory</span><span class="pl-k">::</span>create();</span>
+<span class="pl-s1"><span class="pl-smi">$connector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Connector</span>(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$connector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-smi">$uri</span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-c1">React\Socket\</span><span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>...<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>end();</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>run();</span></pre></div>
+<p>In order to create a plaintext TCP/IP connection, you can simply pass a host
+and port combination like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$connector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>www.google.com:80<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-c1">React\Socket\</span><span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>...<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>end();</span>
+<span class="pl-s1">});</span></pre></div>
+<blockquote>
+<p>If you do no specify a URI scheme in the destination URI, it will assume
+<code>tcp://</code> as a default and establish a plaintext TCP/IP connection.
+Note that TCP/IP connections require a host and port part in the destination
+URI like above, all other URI components are optional.</p>
+</blockquote>
+<p>In order to create a secure TLS connection, you can use the <code>tls://</code> URI scheme
+like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$connector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>tls://www.google.com:443<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-c1">React\Socket\</span><span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>...<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>end();</span>
+<span class="pl-s1">});</span></pre></div>
+<p>In order to create a local Unix domain socket connection, you can use the
+<code>unix://</code> URI scheme like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$connector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>unix:///tmp/demo.sock<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-c1">React\Socket\</span><span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>...<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>end();</span>
+<span class="pl-s1">});</span></pre></div>
+<blockquote>
+<p>The <a href="#getremoteaddress"><code>getRemoteAddress()</code></a> method will return the target
+Unix domain socket (UDS) path as given to the <code>connect()</code> method, including
+the <code>unix://</code> scheme, for example <code>unix:///tmp/demo.sock</code>.
+The <a href="#getlocaladdress"><code>getLocalAddress()</code></a> method will most likely return a
+<code>null</code> value as this value is not applicable to UDS connections here.</p>
+</blockquote>
+<p>Under the hood, the <code>Connector</code> is implemented as a <em>higher-level facade</em>
+for the lower-level connectors implemented in this package. This means it
+also shares all of their features and implementation details.
+If you want to typehint in your higher-level protocol implementation, you SHOULD
+use the generic <a href="#connectorinterface"><code>ConnectorInterface</code></a> instead.</p>
+<p>As of <code>v1.4.0</code>, the <code>Connector</code> class defaults to using the
+<a href="https://en.wikipedia.org/wiki/Happy_Eyeballs" rel="nofollow">happy eyeballs algorithm</a> to
+automatically connect over IPv4 or IPv6 when a hostname is given.
+This automatically attempts to connect using both IPv4 and IPv6 at the same time
+(preferring IPv6), thus avoiding the usual problems faced by users with imperfect
+IPv6 connections or setups.
+If you want to revert to the old behavior of only doing an IPv4 lookup and
+only attempt a single IPv4 connection, you can set up the <code>Connector</code> like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$connector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Connector</span>(<span class="pl-smi">$loop</span>, <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>happy_eyeballs<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">false</span></span>
+<span class="pl-s1">));</span></pre></div>
+<p>Similarly, you can also affect the default DNS behavior as follows.
+The <code>Connector</code> class will try to detect your system DNS settings (and uses
+Google's public DNS server <code>8.8.8.8</code> as a fallback if unable to determine your
+system settings) to resolve all public hostnames into underlying IP addresses by
+default.
+If you explicitly want to use a custom DNS server (such as a local DNS relay or
+a company wide DNS server), you can set up the <code>Connector</code> like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$connector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Connector</span>(<span class="pl-smi">$loop</span>, <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>dns<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>127.0.1.1<span class="pl-pds">'</span></span></span>
+<span class="pl-s1">));</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$connector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>localhost:80<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-c1">React\Socket\</span><span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>...<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>end();</span>
+<span class="pl-s1">});</span></pre></div>
+<p>If you do not want to use a DNS resolver at all and want to connect to IP
+addresses only, you can also set up your <code>Connector</code> like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$connector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Connector</span>(<span class="pl-smi">$loop</span>, <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>dns<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">false</span></span>
+<span class="pl-s1">));</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$connector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>127.0.0.1:80<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-c1">React\Socket\</span><span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>...<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>end();</span>
+<span class="pl-s1">});</span></pre></div>
+<p>Advanced: If you need a custom DNS <code>React\Dns\Resolver\ResolverInterface</code> instance, you
+can also set up your <code>Connector</code> like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$dnsResolverFactory</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Dns\Resolver\</span><span class="pl-c1">Factory</span>();</span>
+<span class="pl-s1"><span class="pl-smi">$resolver</span> <span class="pl-k">=</span> <span class="pl-smi">$dnsResolverFactory</span><span class="pl-k">-&gt;</span>createCached(<span class="pl-s"><span class="pl-pds">'</span>127.0.1.1<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$connector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Connector</span>(<span class="pl-smi">$loop</span>, <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>dns<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-smi">$resolver</span></span>
+<span class="pl-s1">));</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$connector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>localhost:80<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-c1">React\Socket\</span><span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>...<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>end();</span>
+<span class="pl-s1">});</span></pre></div>
+<p>By default, the <code>tcp://</code> and <code>tls://</code> URI schemes will use timeout value that
+respects your <code>default_socket_timeout</code> ini setting (which defaults to 60s).
+If you want a custom timeout value, you can simply pass this like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$connector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Connector</span>(<span class="pl-smi">$loop</span>, <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>timeout<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">10.0</span></span>
+<span class="pl-s1">));</span></pre></div>
+<p>Similarly, if you do not want to apply a timeout at all and let the operating
+system handle this, you can pass a boolean flag like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$connector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Connector</span>(<span class="pl-smi">$loop</span>, <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>timeout<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">false</span></span>
+<span class="pl-s1">));</span></pre></div>
+<p>By default, the <code>Connector</code> supports the <code>tcp://</code>, <code>tls://</code> and <code>unix://</code>
+URI schemes. If you want to explicitly prohibit any of these, you can simply
+pass boolean flags like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> only allow secure TLS connections</span></span>
+<span class="pl-s1"><span class="pl-smi">$connector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Connector</span>(<span class="pl-smi">$loop</span>, <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>tcp<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">false</span>,</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>tls<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">true</span>,</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>unix<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">false</span>,</span>
+<span class="pl-s1">));</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$connector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>tls://google.com:443<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-c1">React\Socket\</span><span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>...<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>end();</span>
+<span class="pl-s1">});</span></pre></div>
+<p>The <code>tcp://</code> and <code>tls://</code> also accept additional context options passed to
+the underlying connectors.
+If you want to explicitly pass additional context options, you can simply
+pass arrays of context options like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> allow insecure TLS connections</span></span>
+<span class="pl-s1"><span class="pl-smi">$connector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Connector</span>(<span class="pl-smi">$loop</span>, <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>tcp<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">        <span class="pl-s"><span class="pl-pds">'</span>bindto<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>192.168.0.1:0<span class="pl-pds">'</span></span></span>
+<span class="pl-s1">    ),</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>tls<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">        <span class="pl-s"><span class="pl-pds">'</span>verify_peer<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">false</span>,</span>
+<span class="pl-s1">        <span class="pl-s"><span class="pl-pds">'</span>verify_peer_name<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">false</span></span>
+<span class="pl-s1">    ),</span>
+<span class="pl-s1">));</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$connector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>tls://localhost:443<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-c1">React\Socket\</span><span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>...<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>end();</span>
+<span class="pl-s1">});</span></pre></div>
+<p>By default, this connector supports TLSv1.0+ and excludes support for legacy
+SSLv2/SSLv3. As of PHP 5.6+ you can also explicitly choose the TLS version you
+want to negotiate with the remote side:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$connector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Connector</span>(<span class="pl-smi">$loop</span>, <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>tls<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">        <span class="pl-s"><span class="pl-pds">'</span>crypto_method<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT</span></span>
+<span class="pl-s1">    )</span>
+<span class="pl-s1">));</span></pre></div>
+<blockquote>
+<p>For more details about context options, please refer to the PHP documentation
+about <a href="https://www.php.net/manual/en/context.socket.php" rel="nofollow">socket context options</a>
+and <a href="https://www.php.net/manual/en/context.ssl.php" rel="nofollow">SSL context options</a>.</p>
+</blockquote>
+<p>Advanced: By default, the <code>Connector</code> supports the <code>tcp://</code>, <code>tls://</code> and
+<code>unix://</code> URI schemes.
+For this, it sets up the required connector classes automatically.
+If you want to explicitly pass custom connectors for any of these, you can simply
+pass an instance implementing the <code>ConnectorInterface</code> like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$dnsResolverFactory</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Dns\Resolver\</span><span class="pl-c1">Factory</span>();</span>
+<span class="pl-s1"><span class="pl-smi">$resolver</span> <span class="pl-k">=</span> <span class="pl-smi">$dnsResolverFactory</span><span class="pl-k">-&gt;</span>createCached(<span class="pl-s"><span class="pl-pds">'</span>127.0.1.1<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$tcp</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">HappyEyeBallsConnector</span>(<span class="pl-smi">$loop</span>, <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">TcpConnector</span>(<span class="pl-smi">$loop</span>), <span class="pl-smi">$resolver</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$tls</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">SecureConnector</span>(<span class="pl-smi">$tcp</span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$unix</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">UnixConnector</span>(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$connector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">Connector</span>(<span class="pl-smi">$loop</span>, <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>tcp<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-smi">$tcp</span>,</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>tls<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-smi">$tls</span>,</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>unix<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-smi">$unix</span>,</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>dns<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">false</span>,</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>timeout<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">false</span>,</span>
+<span class="pl-s1">));</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$connector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>google.com:80<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-c1">React\Socket\</span><span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>...<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>end();</span>
+<span class="pl-s1">});</span></pre></div>
+<blockquote>
+<p>Internally, the <code>tcp://</code> connector will always be wrapped by the DNS resolver,
+unless you disable DNS like in the above example. In this case, the <code>tcp://</code>
+connector receives the actual hostname instead of only the resolved IP address
+and is thus responsible for performing the lookup.
+Internally, the automatically created <code>tls://</code> connector will always wrap the
+underlying <code>tcp://</code> connector for establishing the underlying plaintext
+TCP/IP connection before enabling secure TLS mode. If you want to use a custom
+underlying <code>tcp://</code> connector for secure TLS connections only, you may
+explicitly pass a <code>tls://</code> connector like above instead.
+Internally, the <code>tcp://</code> and <code>tls://</code> connectors will always be wrapped by
+<code>TimeoutConnector</code>, unless you disable timeouts like in the above example.</p>
+</blockquote>
+<h3>
+<a id="advanced-client-usage" class="anchor" href="#advanced-client-usage" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Advanced client usage</h3>
+<h4>
+<a id="tcpconnector" class="anchor" href="#tcpconnector" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>TcpConnector</h4>
+<p>The <code>TcpConnector</code> class implements the
+<a href="#connectorinterface"><code>ConnectorInterface</code></a> and allows you to create plaintext
+TCP/IP connections to any IP-port-combination:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$tcpConnector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">TcpConnector</span>(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$tcpConnector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>127.0.0.1:80<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-c1">React\Socket\</span><span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>...<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>end();</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>run();</span></pre></div>
+<p>See also the <a href="https://github.com/reactphp/socket/blob/v1.4.0/examples">examples</a>.</p>
+<p>Pending connection attempts can be cancelled by cancelling its pending promise like so:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> <span class="pl-smi">$tcpConnector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>127.0.0.1:80<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$promise</span><span class="pl-k">-&gt;</span>cancel();</span></pre></div>
+<p>Calling <code>cancel()</code> on a pending promise will close the underlying socket
+resource, thus cancelling the pending TCP/IP connection, and reject the
+resulting promise.</p>
+<p>You can optionally pass additional
+<a href="https://www.php.net/manual/en/context.socket.php" rel="nofollow">socket context options</a>
+to the constructor like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$tcpConnector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">TcpConnector</span>(<span class="pl-smi">$loop</span>, <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>bindto<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-s"><span class="pl-pds">'</span>192.168.0.1:0<span class="pl-pds">'</span></span></span>
+<span class="pl-s1">));</span></pre></div>
+<p>Note that this class only allows you to connect to IP-port-combinations.
+If the given URI is invalid, does not contain a valid IP address and port
+or contains any other scheme, it will reject with an
+<code>InvalidArgumentException</code>:</p>
+<p>If the given URI appears to be valid, but connecting to it fails (such as if
+the remote host rejects the connection etc.), it will reject with a
+<code>RuntimeException</code>.</p>
+<p>If you want to connect to hostname-port-combinations, see also the following chapter.</p>
+<blockquote>
+<p>Advanced usage: Internally, the <code>TcpConnector</code> allocates an empty <em>context</em>
+resource for each stream resource.
+If the destination URI contains a <code>hostname</code> query parameter, its value will
+be used to set up the TLS peer name.
+This is used by the <code>SecureConnector</code> and <code>DnsConnector</code> to verify the peer
+name and can also be used if you want a custom TLS peer name.</p>
+</blockquote>
+<h4>
+<a id="happyeyeballsconnector" class="anchor" href="#happyeyeballsconnector" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>HappyEyeBallsConnector</h4>
+<p>The <code>HappyEyeBallsConnector</code> class implements the
+<a href="#connectorinterface"><code>ConnectorInterface</code></a> and allows you to create plaintext
+TCP/IP connections to any hostname-port-combination. Internally it implements the
+happy eyeballs algorithm from <a href="https://tools.ietf.org/html/rfc6555" rel="nofollow"><code>RFC6555</code></a> and
+<a href="https://tools.ietf.org/html/rfc8305" rel="nofollow"><code>RFC8305</code></a> to support IPv6 and IPv4 hostnames.</p>
+<p>It does so by decorating a given <code>TcpConnector</code> instance so that it first
+looks up the given domain name via DNS (if applicable) and then establishes the
+underlying TCP/IP connection to the resolved target IP address.</p>
+<p>Make sure to set up your DNS resolver and underlying TCP connector like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$dnsResolverFactory</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Dns\Resolver\</span><span class="pl-c1">Factory</span>();</span>
+<span class="pl-s1"><span class="pl-smi">$dns</span> <span class="pl-k">=</span> <span class="pl-smi">$dnsResolverFactory</span><span class="pl-k">-&gt;</span>createCached(<span class="pl-s"><span class="pl-pds">'</span>8.8.8.8<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$dnsConnector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">HappyEyeBallsConnector</span>(<span class="pl-smi">$loop</span>, <span class="pl-smi">$tcpConnector</span>, <span class="pl-smi">$dns</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$dnsConnector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>www.google.com:80<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-c1">React\Socket\</span><span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>...<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>end();</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>run();</span></pre></div>
+<p>See also the <a href="https://github.com/reactphp/socket/blob/v1.4.0/examples">examples</a>.</p>
+<p>Pending connection attempts can be cancelled by cancelling its pending promise like so:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> <span class="pl-smi">$dnsConnector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>www.google.com:80<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$promise</span><span class="pl-k">-&gt;</span>cancel();</span></pre></div>
+<p>Calling <code>cancel()</code> on a pending promise will cancel the underlying DNS lookups
+and/or the underlying TCP/IP connection(s) and reject the resulting promise.</p>
+<blockquote>
+<p>Advanced usage: Internally, the <code>HappyEyeBallsConnector</code> relies on a <code>Resolver</code> to
+look up the IP addresses for the given hostname.
+It will then replace the hostname in the destination URI with this IP's and
+append a <code>hostname</code> query parameter and pass this updated URI to the underlying
+connector.
+The Happy Eye Balls algorithm describes looking the IPv6 and IPv4 address for
+the given hostname so this connector sends out two DNS lookups for the A and
+AAAA records. It then uses all IP addresses (both v6 and v4) and tries to
+connect to all of them with a 50ms interval in between. Alterating between IPv6
+and IPv4 addresses. When a connection is established all the other DNS lookups
+and connection attempts are cancelled.</p>
+</blockquote>
+<h4>
+<a id="dnsconnector" class="anchor" href="#dnsconnector" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>DnsConnector</h4>
+<p>The <code>DnsConnector</code> class implements the
+<a href="#connectorinterface"><code>ConnectorInterface</code></a> and allows you to create plaintext
+TCP/IP connections to any hostname-port-combination.</p>
+<p>It does so by decorating a given <code>TcpConnector</code> instance so that it first
+looks up the given domain name via DNS (if applicable) and then establishes the
+underlying TCP/IP connection to the resolved target IP address.</p>
+<p>Make sure to set up your DNS resolver and underlying TCP connector like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$dnsResolverFactory</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Dns\Resolver\</span><span class="pl-c1">Factory</span>();</span>
+<span class="pl-s1"><span class="pl-smi">$dns</span> <span class="pl-k">=</span> <span class="pl-smi">$dnsResolverFactory</span><span class="pl-k">-&gt;</span>createCached(<span class="pl-s"><span class="pl-pds">'</span>8.8.8.8<span class="pl-pds">'</span></span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$dnsConnector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">DnsConnector</span>(<span class="pl-smi">$tcpConnector</span>, <span class="pl-smi">$dns</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$dnsConnector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>www.google.com:80<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-c1">React\Socket\</span><span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>...<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>end();</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>run();</span></pre></div>
+<p>See also the <a href="https://github.com/reactphp/socket/blob/v1.4.0/examples">examples</a>.</p>
+<p>Pending connection attempts can be cancelled by cancelling its pending promise like so:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> <span class="pl-smi">$dnsConnector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>www.google.com:80<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$promise</span><span class="pl-k">-&gt;</span>cancel();</span></pre></div>
+<p>Calling <code>cancel()</code> on a pending promise will cancel the underlying DNS lookup
+and/or the underlying TCP/IP connection and reject the resulting promise.</p>
+<blockquote>
+<p>Advanced usage: Internally, the <code>DnsConnector</code> relies on a <code>React\Dns\Resolver\ResolverInterface</code>
+to look up the IP address for the given hostname.
+It will then replace the hostname in the destination URI with this IP and
+append a <code>hostname</code> query parameter and pass this updated URI to the underlying
+connector.
+The underlying connector is thus responsible for creating a connection to the
+target IP address, while this query parameter can be used to check the original
+hostname and is used by the <code>TcpConnector</code> to set up the TLS peer name.
+If a <code>hostname</code> is given explicitly, this query parameter will not be modified,
+which can be useful if you want a custom TLS peer name.</p>
+</blockquote>
+<h4>
+<a id="secureconnector" class="anchor" href="#secureconnector" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>SecureConnector</h4>
+<p>The <code>SecureConnector</code> class implements the
+<a href="#connectorinterface"><code>ConnectorInterface</code></a> and allows you to create secure
+TLS (formerly known as SSL) connections to any hostname-port-combination.</p>
+<p>It does so by decorating a given <code>DnsConnector</code> instance so that it first
+creates a plaintext TCP/IP connection and then enables TLS encryption on this
+stream.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$secureConnector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">SecureConnector</span>(<span class="pl-smi">$dnsConnector</span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$secureConnector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>www.google.com:443<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-c1">React\Socket\</span><span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">"</span>GET / HTTP/1.0<span class="pl-cce">\r\n</span>Host: www.google.com<span class="pl-cce">\r\n\r\n</span><span class="pl-pds">"</span></span>);</span>
+<span class="pl-s1">    <span class="pl-k">...</span></span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>run();</span></pre></div>
+<p>See also the <a href="https://github.com/reactphp/socket/blob/v1.4.0/examples">examples</a>.</p>
+<p>Pending connection attempts can be cancelled by cancelling its pending promise like so:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> <span class="pl-smi">$secureConnector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>www.google.com:443<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$promise</span><span class="pl-k">-&gt;</span>cancel();</span></pre></div>
+<p>Calling <code>cancel()</code> on a pending promise will cancel the underlying TCP/IP
+connection and/or the SSL/TLS negotiation and reject the resulting promise.</p>
+<p>You can optionally pass additional
+<a href="https://www.php.net/manual/en/context.ssl.php" rel="nofollow">SSL context options</a>
+to the constructor like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$secureConnector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">SecureConnector</span>(<span class="pl-smi">$dnsConnector</span>, <span class="pl-smi">$loop</span>, <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>verify_peer<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">false</span>,</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>verify_peer_name<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">false</span></span>
+<span class="pl-s1">));</span></pre></div>
+<p>By default, this connector supports TLSv1.0+ and excludes support for legacy
+SSLv2/SSLv3. As of PHP 5.6+ you can also explicitly choose the TLS version you
+want to negotiate with the remote side:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$secureConnector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">SecureConnector</span>(<span class="pl-smi">$dnsConnector</span>, <span class="pl-smi">$loop</span>, <span class="pl-c1">array</span>(</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>crypto_method<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT</span></span>
+<span class="pl-s1">));</span></pre></div>
+<blockquote>
+<p>Advanced usage: Internally, the <code>SecureConnector</code> relies on setting up the
+required <em>context options</em> on the underlying stream resource.
+It should therefor be used with a <code>TcpConnector</code> somewhere in the connector
+stack so that it can allocate an empty <em>context</em> resource for each stream
+resource and verify the peer name.
+Failing to do so may result in a TLS peer name mismatch error or some hard to
+trace race conditions, because all stream resources will use a single, shared
+<em>default context</em> resource otherwise.</p>
+</blockquote>
+<h4>
+<a id="timeoutconnector" class="anchor" href="#timeoutconnector" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>TimeoutConnector</h4>
+<p>The <code>TimeoutConnector</code> class implements the
+<a href="#connectorinterface"><code>ConnectorInterface</code></a> and allows you to add timeout
+handling to any existing connector instance.</p>
+<p>It does so by decorating any given <a href="#connectorinterface"><code>ConnectorInterface</code></a>
+instance and starting a timer that will automatically reject and abort any
+underlying connection attempt if it takes too long.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$timeoutConnector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">TimeoutConnector</span>(<span class="pl-smi">$connector</span>, <span class="pl-c1">3.0</span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$timeoutConnector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>google.com:80<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-c1">React\Socket\</span><span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> connection succeeded within 3.0 seconds</span></span>
+<span class="pl-s1">});</span></pre></div>
+<p>See also any of the <a href="https://github.com/reactphp/socket/blob/v1.4.0/examples">examples</a>.</p>
+<p>Pending connection attempts can be cancelled by cancelling its pending promise like so:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> <span class="pl-smi">$timeoutConnector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>google.com:80<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$promise</span><span class="pl-k">-&gt;</span>cancel();</span></pre></div>
+<p>Calling <code>cancel()</code> on a pending promise will cancel the underlying connection
+attempt, abort the timer and reject the resulting promise.</p>
+<h4>
+<a id="unixconnector" class="anchor" href="#unixconnector" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>UnixConnector</h4>
+<p>The <code>UnixConnector</code> class implements the
+<a href="#connectorinterface"><code>ConnectorInterface</code></a> and allows you to connect to
+Unix domain socket (UDS) paths like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$connector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">UnixConnector</span>(<span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$connector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>/tmp/demo.sock<span class="pl-pds">'</span></span>)<span class="pl-k">-&gt;</span>then(<span class="pl-k">function</span> (<span class="pl-c1">React\Socket\</span><span class="pl-c1">ConnectionInterface</span> <span class="pl-smi">$connection</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">"</span>HELLO<span class="pl-cce">\n</span><span class="pl-pds">"</span></span>);</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>run();</span></pre></div>
+<p>Connecting to Unix domain sockets is an atomic operation, i.e. its promise will
+settle (either resolve or reject) immediately.
+As such, calling <code>cancel()</code> on the resulting promise has no effect.</p>
+<blockquote>
+<p>The <a href="#getremoteaddress"><code>getRemoteAddress()</code></a> method will return the target
+Unix domain socket (UDS) path as given to the <code>connect()</code> method, prepended
+with the <code>unix://</code> scheme, for example <code>unix:///tmp/demo.sock</code>.
+The <a href="#getlocaladdress"><code>getLocalAddress()</code></a> method will most likely return a
+<code>null</code> value as this value is not applicable to UDS connections here.</p>
+</blockquote>
+<h4>
+<a id="fixeduriconnector" class="anchor" href="#fixeduriconnector" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>FixedUriConnector</h4>
+<p>The <code>FixedUriConnector</code> class implements the
+<a href="#connectorinterface"><code>ConnectorInterface</code></a> and decorates an existing Connector
+to always use a fixed, preconfigured URI.</p>
+<p>This can be useful for consumers that do not support certain URIs, such as
+when you want to explicitly connect to a Unix domain socket (UDS) path
+instead of connecting to a default address assumed by an higher-level API:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$connector</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">FixedUriConnector</span>(</span>
+<span class="pl-s1">    <span class="pl-s"><span class="pl-pds">'</span>unix:///var/run/docker.sock<span class="pl-pds">'</span></span>,</span>
+<span class="pl-s1">    <span class="pl-k">new</span> <span class="pl-c1">React\Socket\</span><span class="pl-c1">UnixConnector</span>(<span class="pl-smi">$loop</span>)</span>
+<span class="pl-s1">);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> destination will be ignored, actually connects to Unix domain socket</span></span>
+<span class="pl-s1"><span class="pl-smi">$promise</span> <span class="pl-k">=</span> <span class="pl-smi">$connector</span><span class="pl-k">-&gt;</span>connect(<span class="pl-s"><span class="pl-pds">'</span>localhost:80<span class="pl-pds">'</span></span>);</span></pre></div>
+<h2>
+<a id="install" class="anchor" href="#install" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Install</h2>
+<p>The recommended way to install this library is <a href="https://getcomposer.org" rel="nofollow">through Composer</a>.
+<a href="https://getcomposer.org/doc/00-intro.md" rel="nofollow">New to Composer?</a></p>
+<p>This project follows <a href="https://semver.org/" rel="nofollow">SemVer</a>.
+This will install the latest supported version:</p>
+<div class="highlight highlight-source-shell"><pre>$ composer require react/socket:^1.4</pre></div>
+<p>See also the <a href="changelog.html">CHANGELOG</a> for details about version upgrades.</p>
+<p>This project aims to run on any platform and thus does not require any PHP
+extensions and supports running on legacy PHP 5.3 through current PHP 7+ and HHVM.
+It's <em>highly recommended to use PHP 7+</em> for this project, partly due to its vast
+performance improvements and partly because legacy PHP versions require several
+workarounds as described below.</p>
+<p>Secure TLS connections received some major upgrades starting with PHP 5.6, with
+the defaults now being more secure, while older versions required explicit
+context options.
+This library does not take responsibility over these context options, so it's
+up to consumers of this library to take care of setting appropriate context
+options as described above.</p>
+<p>PHP &lt; 7.3.3 (and PHP &lt; 7.2.15) suffers from a bug where feof() might
+block with 100% CPU usage on fragmented TLS records.
+We try to work around this by always consuming the complete receive
+buffer at once to avoid stale data in TLS buffers. This is known to
+work around high CPU usage for well-behaving peers, but this may
+cause very large data chunks for high throughput scenarios. The buggy
+behavior can still be triggered due to network I/O buffers or
+malicious peers on affected versions, upgrading is highly recommended.</p>
+<p>PHP &lt; 7.1.4 (and PHP &lt; 7.0.18) suffers from a bug when writing big
+chunks of data over TLS streams at once.
+We try to work around this by limiting the write chunk size to 8192
+bytes for older PHP versions only.
+This is only a work-around and has a noticable performance penalty on
+affected versions.</p>
+<p>This project also supports running on HHVM.
+Note that really old HHVM &lt; 3.8 does not support secure TLS connections, as it
+lacks the required <code>stream_socket_enable_crypto()</code> function.
+As such, trying to create a secure TLS connections on affected versions will
+return a rejected promise instead.
+This issue is also covered by our test suite, which will skip related tests
+on affected versions.</p>
+<h2>
+<a id="tests" class="anchor" href="#tests" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Tests</h2>
+<p>To run the test suite, you first need to clone this repo and then install all
+dependencies <a href="https://getcomposer.org" rel="nofollow">through Composer</a>:</p>
+<div class="highlight highlight-source-shell"><pre>$ composer install</pre></div>
+<p>To run the test suite, go to the project root and run:</p>
+<div class="highlight highlight-source-shell"><pre>$ php vendor/bin/phpunit</pre></div>
+<p>The test suite also contains a number of functional integration tests that rely
+on a stable internet connection.
+If you do not want to run these, they can simply be skipped like this:</p>
+<div class="highlight highlight-source-shell"><pre>$ php vendor/bin/phpunit --exclude-group internet</pre></div>
+<h2>
+<a id="license" class="anchor" href="#license" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>License</h2>
+<p>MIT, see <a href="license.html">LICENSE file</a>.</p>
+                                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../socket/">Socket</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v1.4.0
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/socket#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v1.3.0#readme" class="version-selector__version">
+                                                    v1.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v1.2.1#readme" class="version-selector__version">
+                                                    v1.2.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v1.2.0#readme" class="version-selector__version">
+                                                    v1.2.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v1.1.0#readme" class="version-selector__version">
+                                                    v1.1.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v1.0.0#readme" class="version-selector__version">
+                                                    v1.0.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.12#readme" class="version-selector__version">
+                                                    v0.8.12
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.11#readme" class="version-selector__version">
+                                                    v0.8.11
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.10#readme" class="version-selector__version">
+                                                    v0.8.10
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.9#readme" class="version-selector__version">
+                                                    v0.8.9
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.8#readme" class="version-selector__version">
+                                                    v0.8.8
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.7#readme" class="version-selector__version">
+                                                    v0.8.7
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.6#readme" class="version-selector__version">
+                                                    v0.8.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.5#readme" class="version-selector__version">
+                                                    v0.8.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.4#readme" class="version-selector__version">
+                                                    v0.8.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.3#readme" class="version-selector__version">
+                                                    v0.8.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.2#readme" class="version-selector__version">
+                                                    v0.8.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.1#readme" class="version-selector__version">
+                                                    v0.8.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.0#readme" class="version-selector__version">
+                                                    v0.8.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.7.2#readme" class="version-selector__version">
+                                                    v0.7.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.7.1#readme" class="version-selector__version">
+                                                    v0.7.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.7.0#readme" class="version-selector__version">
+                                                    v0.7.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.6.0#readme" class="version-selector__version">
+                                                    v0.6.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.5.1#readme" class="version-selector__version">
+                                                    v0.5.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.5.0#readme" class="version-selector__version">
+                                                    v0.5.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.4.6#readme" class="version-selector__version">
+                                                    v0.4.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.4.5#readme" class="version-selector__version">
+                                                    v0.4.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.4.4#readme" class="version-selector__version">
+                                                    v0.4.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.4.3#readme" class="version-selector__version">
+                                                    v0.4.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.4.2#readme" class="version-selector__version">
+                                                    v0.4.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.4.1#readme" class="version-selector__version">
+                                                    v0.4.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.3.4#readme" class="version-selector__version">
+                                                    v0.3.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.4.0#readme" class="version-selector__version">
+                                                    v0.4.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.3.3#readme" class="version-selector__version">
+                                                    v0.3.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.3.2#readme" class="version-selector__version">
+                                                    v0.3.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.3.1#readme" class="version-selector__version">
+                                                    v0.3.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.3.0#readme" class="version-selector__version">
+                                                    v0.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.2.6#readme" class="version-selector__version">
+                                                    v0.2.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.2.3#readme" class="version-selector__version">
+                                                    v0.2.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.2.0#readme" class="version-selector__version">
+                                                    v0.2.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.1.1#readme" class="version-selector__version">
+                                                    v0.1.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.1.0#readme" class="version-selector__version">
+                                                    v0.1.0
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/socket">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../socket/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../socket/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/socket:^1.4.0</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (307 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cboden">
+                                    <img src="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=80 2x" alt="cboden" title="cboden (87 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/igorw">
+                                    <img src="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=80 2x" alt="igorw" title="igorw (69 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (63 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (31 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/andig">
+                                    <img src="https://avatars1.githubusercontent.com/u/184815?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/184815?v=4&amp;s=80 2x" alt="andig" title="andig (5 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/carusogabriel">
+                                    <img src="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=80 2x" alt="carusogabriel" title="carusogabriel (4 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/artggd">
+                                    <img src="https://avatars2.githubusercontent.com/u/1837559?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/1837559?v=4&amp;s=80 2x" alt="artggd" title="artggd (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/tkleinhakisa">
+                                    <img src="https://avatars3.githubusercontent.com/u/1912952?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/1912952?v=4&amp;s=80 2x" alt="tkleinhakisa" title="tkleinhakisa (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/valga">
+                                    <img src="https://avatars2.githubusercontent.com/u/23472603?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/23472603?v=4&amp;s=80 2x" alt="valga" title="valga (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/alexmace">
+                                    <img src="https://avatars2.githubusercontent.com/u/207391?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/207391?v=4&amp;s=80 2x" alt="alexmace" title="alexmace (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/DaveRandom">
+                                    <img src="https://avatars1.githubusercontent.com/u/2396425?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/2396425?v=4&amp;s=80 2x" alt="DaveRandom" title="DaveRandom (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/christiaan">
+                                    <img src="https://avatars0.githubusercontent.com/u/118490?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/118490?v=4&amp;s=80 2x" alt="christiaan" title="christiaan (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/elliot">
+                                    <img src="https://avatars2.githubusercontent.com/u/9938?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/9938?v=4&amp;s=80 2x" alt="elliot" title="elliot (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/hansott">
+                                    <img src="https://avatars1.githubusercontent.com/u/3886384?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/3886384?v=4&amp;s=80 2x" alt="hansott" title="hansott (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/mmoreram">
+                                    <img src="https://avatars1.githubusercontent.com/u/521409?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/521409?v=4&amp;s=80 2x" alt="mmoreram" title="mmoreram (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/kelunik">
+                                    <img src="https://avatars0.githubusercontent.com/u/2743004?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/2743004?v=4&amp;s=80 2x" alt="kelunik" title="kelunik (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/Sgoettschkes">
+                                    <img src="https://avatars1.githubusercontent.com/u/628796?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/628796?v=4&amp;s=80 2x" alt="Sgoettschkes" title="Sgoettschkes (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cn007b">
+                                    <img src="https://avatars1.githubusercontent.com/u/5052324?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/5052324?v=4&amp;s=80 2x" alt="cn007b" title="cn007b (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/e3betht">
+                                    <img src="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=80 2x" alt="e3betht" title="e3betht (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/the-eater">
+                                    <img src="https://avatars2.githubusercontent.com/u/1922630?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/1922630?v=4&amp;s=80 2x" alt="the-eater" title="the-eater (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-socket-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-socket-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,3 6,2 12,1 18,1 24,1 30,4 36,1 42,3 48,1 54,1 60,1 66,4 72,1 78,1 84,1 90,1 96,1 102,1 108,1 114,1 120,2 126,2 132,1 138,1 144,5 150,1 156,2 162,2 168,1 174,1 180,1 186,1 192,1 198,1 204,1 210,1 216,1 222,1 228,1 234,3 240,9 246,2 252,1 258,1 264,1 270,2 276,1 282,1 288,1 294,7 300,12 306,3" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-socket-participation-gradient);mask:url(#reactphp-socket-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/socket/license.html b/socket/license.html
new file mode 100644
index 000000000..9083f7c99
--- /dev/null
+++ b/socket/license.html
@@ -0,0 +1,637 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>Socket: License - ReactPHP</title>
+
+        <meta name="description" content="Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+            </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                    <h1>Socket License</h1>
+
+    <p>Copyright (c) 2012 Igor Wiedler, Chris Boden</p>
+<p>Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:</p>
+<p>The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.</p>
+<p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.</p>
+                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../socket/">Socket</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v1.4.0
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/socket#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v1.3.0#readme" class="version-selector__version">
+                                                    v1.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v1.2.1#readme" class="version-selector__version">
+                                                    v1.2.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v1.2.0#readme" class="version-selector__version">
+                                                    v1.2.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v1.1.0#readme" class="version-selector__version">
+                                                    v1.1.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v1.0.0#readme" class="version-selector__version">
+                                                    v1.0.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.12#readme" class="version-selector__version">
+                                                    v0.8.12
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.11#readme" class="version-selector__version">
+                                                    v0.8.11
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.10#readme" class="version-selector__version">
+                                                    v0.8.10
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.9#readme" class="version-selector__version">
+                                                    v0.8.9
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.8#readme" class="version-selector__version">
+                                                    v0.8.8
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.7#readme" class="version-selector__version">
+                                                    v0.8.7
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.6#readme" class="version-selector__version">
+                                                    v0.8.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.5#readme" class="version-selector__version">
+                                                    v0.8.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.4#readme" class="version-selector__version">
+                                                    v0.8.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.3#readme" class="version-selector__version">
+                                                    v0.8.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.2#readme" class="version-selector__version">
+                                                    v0.8.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.1#readme" class="version-selector__version">
+                                                    v0.8.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.8.0#readme" class="version-selector__version">
+                                                    v0.8.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.7.2#readme" class="version-selector__version">
+                                                    v0.7.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.7.1#readme" class="version-selector__version">
+                                                    v0.7.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.7.0#readme" class="version-selector__version">
+                                                    v0.7.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.6.0#readme" class="version-selector__version">
+                                                    v0.6.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.5.1#readme" class="version-selector__version">
+                                                    v0.5.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.5.0#readme" class="version-selector__version">
+                                                    v0.5.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.4.6#readme" class="version-selector__version">
+                                                    v0.4.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.4.5#readme" class="version-selector__version">
+                                                    v0.4.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.4.4#readme" class="version-selector__version">
+                                                    v0.4.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.4.3#readme" class="version-selector__version">
+                                                    v0.4.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.4.2#readme" class="version-selector__version">
+                                                    v0.4.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.4.1#readme" class="version-selector__version">
+                                                    v0.4.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.3.4#readme" class="version-selector__version">
+                                                    v0.3.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.4.0#readme" class="version-selector__version">
+                                                    v0.4.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.3.3#readme" class="version-selector__version">
+                                                    v0.3.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.3.2#readme" class="version-selector__version">
+                                                    v0.3.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.3.1#readme" class="version-selector__version">
+                                                    v0.3.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.3.0#readme" class="version-selector__version">
+                                                    v0.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.2.6#readme" class="version-selector__version">
+                                                    v0.2.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.2.3#readme" class="version-selector__version">
+                                                    v0.2.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.2.0#readme" class="version-selector__version">
+                                                    v0.2.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.1.1#readme" class="version-selector__version">
+                                                    v0.1.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/socket/tree/v0.1.0#readme" class="version-selector__version">
+                                                    v0.1.0
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/socket">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../socket/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../socket/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/socket:^1.4.0</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (307 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cboden">
+                                    <img src="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=80 2x" alt="cboden" title="cboden (87 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/igorw">
+                                    <img src="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=80 2x" alt="igorw" title="igorw (69 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (63 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (31 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/andig">
+                                    <img src="https://avatars1.githubusercontent.com/u/184815?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/184815?v=4&amp;s=80 2x" alt="andig" title="andig (5 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/carusogabriel">
+                                    <img src="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=80 2x" alt="carusogabriel" title="carusogabriel (4 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/artggd">
+                                    <img src="https://avatars2.githubusercontent.com/u/1837559?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/1837559?v=4&amp;s=80 2x" alt="artggd" title="artggd (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/tkleinhakisa">
+                                    <img src="https://avatars3.githubusercontent.com/u/1912952?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/1912952?v=4&amp;s=80 2x" alt="tkleinhakisa" title="tkleinhakisa (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/valga">
+                                    <img src="https://avatars2.githubusercontent.com/u/23472603?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/23472603?v=4&amp;s=80 2x" alt="valga" title="valga (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/alexmace">
+                                    <img src="https://avatars2.githubusercontent.com/u/207391?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/207391?v=4&amp;s=80 2x" alt="alexmace" title="alexmace (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/DaveRandom">
+                                    <img src="https://avatars1.githubusercontent.com/u/2396425?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/2396425?v=4&amp;s=80 2x" alt="DaveRandom" title="DaveRandom (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/christiaan">
+                                    <img src="https://avatars0.githubusercontent.com/u/118490?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/118490?v=4&amp;s=80 2x" alt="christiaan" title="christiaan (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/elliot">
+                                    <img src="https://avatars2.githubusercontent.com/u/9938?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/9938?v=4&amp;s=80 2x" alt="elliot" title="elliot (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/hansott">
+                                    <img src="https://avatars1.githubusercontent.com/u/3886384?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/3886384?v=4&amp;s=80 2x" alt="hansott" title="hansott (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/mmoreram">
+                                    <img src="https://avatars1.githubusercontent.com/u/521409?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/521409?v=4&amp;s=80 2x" alt="mmoreram" title="mmoreram (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/kelunik">
+                                    <img src="https://avatars0.githubusercontent.com/u/2743004?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/2743004?v=4&amp;s=80 2x" alt="kelunik" title="kelunik (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/Sgoettschkes">
+                                    <img src="https://avatars1.githubusercontent.com/u/628796?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/628796?v=4&amp;s=80 2x" alt="Sgoettschkes" title="Sgoettschkes (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cn007b">
+                                    <img src="https://avatars1.githubusercontent.com/u/5052324?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/5052324?v=4&amp;s=80 2x" alt="cn007b" title="cn007b (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/e3betht">
+                                    <img src="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/1811561?v=4&amp;s=80 2x" alt="e3betht" title="e3betht (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/the-eater">
+                                    <img src="https://avatars2.githubusercontent.com/u/1922630?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/1922630?v=4&amp;s=80 2x" alt="the-eater" title="the-eater (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-socket-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-socket-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,3 6,2 12,1 18,1 24,1 30,4 36,1 42,3 48,1 54,1 60,1 66,4 72,1 78,1 84,1 90,1 96,1 102,1 108,1 114,1 120,2 126,2 132,1 138,1 144,5 150,1 156,2 162,2 168,1 174,1 180,1 186,1 192,1 198,1 204,1 210,1 216,1 222,1 228,1 234,3 240,9 246,2 252,1 258,1 264,1 270,2 276,1 282,1 288,1 294,7 300,12 306,3" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-socket-participation-gradient);mask:url(#reactphp-socket-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/stream/changelog.html b/stream/changelog.html
new file mode 100644
index 000000000..ab05fa250
--- /dev/null
+++ b/stream/changelog.html
@@ -0,0 +1,1564 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>Stream: Changelog - ReactPHP</title>
+
+        <meta name="description" content="Event-driven readable and writable streams for non-blocking I/O in ReactPHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+        <link href="https://github.com/reactphp/stream/releases.atom" type="application/atom+xml" rel="alternate" title="Stream Changelog">
+    </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                    <h1>Stream Changelog</h1>
+
+    <ul class="toc">
+            <li><a href="#2020" title="Jump to year 2020 (1 release)">2020</a></li>
+            <li><a href="#2019" title="Jump to year 2019 (1 release)">2019</a></li>
+            <li><a href="#2018" title="Jump to year 2018 (2 releases)">2018</a></li>
+            <li><a href="#2017" title="Jump to year 2017 (10 releases)">2017</a></li>
+            <li><a href="#2016" title="Jump to year 2016 (2 releases)">2016</a></li>
+            <li><a href="#2015" title="Jump to year 2015 (1 release)">2015</a></li>
+            <li><a href="#2014" title="Jump to year 2014 (4 releases)">2014</a></li>
+            <li><a href="#2013" title="Jump to year 2013 (4 releases)">2013</a></li>
+            <li><a href="#2012" title="Jump to year 2012 (9 releases)">2012</a></li>
+        </ul>
+
+    <h2>
+        <a id="2020" class="anchor" href="#2020" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2020
+    </h2>
+
+    
+            <h3>
+        <a id="111-2020-05-04" class="anchor" href="#111-2020-05-04" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.1.1
+
+        <small>
+            (2020-05-04)
+            <a href="https://github.com/reactphp/stream/releases/tag/v1.1.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Fix: Fix faulty write buffer behavior when sending large data chunks over TLS (Mac OS X only).<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="609798969" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/150" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/150/hovercard" href="https://github.com/reactphp/stream/pull/150">#150</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Minor code style improvements to fix phpstan analysis warnings and<br>
+add <code>.gitattributes</code> to exclude dev files from exports.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="443419394" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/140" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/140/hovercard" href="https://github.com/reactphp/stream/pull/140">#140</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/flow-control/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/flow-control">@flow-control</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="530765542" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/144" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/144/hovercard" href="https://github.com/reactphp/stream/pull/144">#144</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/reedy/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/reedy">@reedy</a>)</p>
+</li>
+<li>
+<p>Improve test suite to run tests on PHP 7.4 and simplify test matrix.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="547450197" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/147" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/147/hovercard" href="https://github.com/reactphp/stream/pull/147">#147</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2019" class="anchor" href="#2019" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2019
+    </h2>
+
+    
+            <h3>
+        <a id="110-2019-01-01" class="anchor" href="#110-2019-01-01" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.1.0
+
+        <small>
+            (2019-01-01)
+            <a href="https://github.com/reactphp/stream/releases/tag/v1.1.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Improvement: Increase performance by optimizing global function and constant look ups.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="371711734" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/137" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/137/hovercard" href="https://github.com/reactphp/stream/pull/137">#137</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+<li>
+<p>Travis: Test against PHP 7.3.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="374435409" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/138" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/138/hovercard" href="https://github.com/reactphp/stream/pull/138">#138</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+<li>
+<p>Fix: Ignore empty reads.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="384006525" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/139" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/139/hovercard" href="https://github.com/reactphp/stream/pull/139">#139</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</p>
+</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2018" class="anchor" href="#2018" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2018
+    </h2>
+
+    
+            <h3>
+        <a id="100-2018-07-11" class="anchor" href="#100-2018-07-11" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        1.0.0
+
+        <small>
+            (2018-07-11)
+            <a href="https://github.com/reactphp/stream/releases/tag/v1.0.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>First stable LTS release, now following <a href="https://semver.org/" rel="nofollow">SemVer</a>.<br>
+We'd like to emphasize that this component is production ready and battle-tested.<br>
+We plan to support all long-term support (LTS) releases for at least 24 months,<br>
+so you have a rock-solid foundation to build on top of.</li>
+</ul>
+<blockquote>
+<p>Contains no other changes, so it's actually fully compatible with the v0.7.7 release.</p>
+</blockquote>
+
+    <hr>
+    
+            <h3>
+        <a id="077-2018-01-19" class="anchor" href="#077-2018-01-19" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.7.7
+
+        <small>
+            (2018-01-19)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.7.7" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improve test suite by fixing forward compatibility with upcoming EventLoop<br>
+releases, avoid risky tests and add test group to skip integration tests<br>
+relying on internet connection and apply appropriate test timeouts.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="284177347" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/128" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/128/hovercard" href="https://github.com/reactphp/stream/pull/128">#128</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="289951762" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/131" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/131/hovercard" href="https://github.com/reactphp/stream/pull/131">#131</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="289953509" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/132" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/132/hovercard" href="https://github.com/reactphp/stream/pull/132">#132</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2017" class="anchor" href="#2017" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2017
+    </h2>
+
+    
+            <h3>
+        <a id="076-2017-12-21" class="anchor" href="#076-2017-12-21" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.7.6
+
+        <small>
+            (2017-12-21)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.7.6" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Fix: Work around reading from unbuffered pipe stream in legacy PHP &lt; 5.4.28 and PHP &lt; 5.5.12<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="283633104" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/126" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/126/hovercard" href="https://github.com/reactphp/stream/pull/126">#126</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by simplifying test bootstrapping logic via Composer and<br>
+test against PHP 7.2<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="283873223" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/127" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/127/hovercard" href="https://github.com/reactphp/stream/pull/127">#127</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="278459875" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/124" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/124/hovercard" href="https://github.com/reactphp/stream/pull/124">#124</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/carusogabriel/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/carusogabriel">@carusogabriel</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="075-2017-11-20" class="anchor" href="#075-2017-11-20" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.7.5
+
+        <small>
+            (2017-11-20)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.7.5" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Fix: Igore excessive <code>fopen()</code> mode flags for <code>WritableResourceStream</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="272511458" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/119" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/119/hovercard" href="https://github.com/reactphp/stream/pull/119">#119</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Fix forward compatibility with upcoming EventLoop releases<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="272994745" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/121" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/121/hovercard" href="https://github.com/reactphp/stream/pull/121">#121</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Restructure examples to ease getting started<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="275158598" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/123" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/123/hovercard" href="https://github.com/reactphp/stream/pull/123">#123</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by adding forward compatibility with PHPUnit 6 and<br>
+ignore Mac OS X test failures for now until Travis tests work again<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="273193264" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/122" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/122/hovercard" href="https://github.com/reactphp/stream/pull/122">#122</a> by @gabriel-caruso and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="272570863" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/120" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/120/hovercard" href="https://github.com/reactphp/stream/pull/120">#120</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="074-2017-10-11" class="anchor" href="#074-2017-10-11" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.7.4
+
+        <small>
+            (2017-10-11)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.7.4" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Fix: Remove event listeners from <code>CompositeStream</code> once closed and<br>
+remove undocumented left-over <code>close</code> event argument<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="264238876" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/116" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/116/hovercard" href="https://github.com/reactphp/stream/pull/116">#116</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Minor documentation improvements: Fix wrong class name in example,<br>
+fix typos in README and<br>
+fix forward compatibility with upcoming EventLoop releases in example<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="264138990" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/113" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/113/hovercard" href="https://github.com/reactphp/stream/pull/113">#113</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/docteurklein/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/docteurklein">@docteurklein</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="264187481" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/114" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/114/hovercard" href="https://github.com/reactphp/stream/pull/114">#114</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="264188803" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/115" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/115/hovercard" href="https://github.com/reactphp/stream/pull/115">#115</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Improve test suite by running against Mac OS X on Travis<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="263988542" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/112" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/112/hovercard" href="https://github.com/reactphp/stream/pull/112">#112</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="073-2017-08-05" class="anchor" href="#073-2017-08-05" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.7.3
+
+        <small>
+            (2017-08-05)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.7.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Improvement: Support Événement 3.0 a long side 2.0 and 1.0<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="244938597" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/108" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/108/hovercard" href="https://github.com/reactphp/stream/pull/108">#108</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</li>
+<li>Readme: Corrected loop initialization in usage example<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="245345376" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/109" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/109/hovercard" href="https://github.com/reactphp/stream/pull/109">#109</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/pulyavin/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/pulyavin">@pulyavin</a>)</li>
+<li>Travis: Lock linux distribution preventing future builds from breaking<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="248006392" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/110" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/110/hovercard" href="https://github.com/reactphp/stream/pull/110">#110</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="072-2017-06-15" class="anchor" href="#072-2017-06-15" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.7.2
+
+        <small>
+            (2017-06-15)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.7.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: WritableResourceStream: Close the underlying stream when closing the stream.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="235132297" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/107" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/107/hovercard" href="https://github.com/reactphp/stream/pull/107">#107</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/WyriHaximus/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/WyriHaximus">@WyriHaximus</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="071-2017-05-20" class="anchor" href="#071-2017-05-20" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.7.1
+
+        <small>
+            (2017-05-20)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.7.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature: Add optional <code>$writeChunkSize</code> parameter to limit maximum number of<br>
+bytes to write at once.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="230037606" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/105" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/105/hovercard" href="https://github.com/reactphp/stream/pull/105">#105</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">WritableResourceStream</span>(<span class="pl-c1">STDOUT</span>, <span class="pl-smi">$loop</span>, <span class="pl-c1">null</span>, <span class="pl-c1">8192</span>);</span></pre></div>
+</li>
+<li>
+<p>Ignore HHVM test failures for now until Travis tests work again<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="230042502" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/106" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/106/hovercard" href="https://github.com/reactphp/stream/pull/106">#106</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="070-2017-05-04" class="anchor" href="#070-2017-05-04" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.7.0
+
+        <small>
+            (2017-05-04)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.7.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Removed / BC break: Remove deprecated and unneeded functionality<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="156061344" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/45" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/45/hovercard" href="https://github.com/reactphp/stream/pull/45">#45</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="223630853" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/87" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/87/hovercard" href="https://github.com/reactphp/stream/pull/87">#87</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="224692249" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/90" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/90/hovercard" href="https://github.com/reactphp/stream/pull/90">#90</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="224725722" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/91" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/91/hovercard" href="https://github.com/reactphp/stream/pull/91">#91</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="224814479" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/93" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/93/hovercard" href="https://github.com/reactphp/stream/pull/93">#93</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<ul>
+<li>
+<p>Remove deprecated <code>Stream</code> class, use <code>DuplexResourceStream</code> instead<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="223630853" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/87" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/87/hovercard" href="https://github.com/reactphp/stream/pull/87">#87</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Remove public <code>$buffer</code> property, use new constructor parameters instead<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="224725722" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/91" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/91/hovercard" href="https://github.com/reactphp/stream/pull/91">#91</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Remove public <code>$stream</code> property from all resource streams<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="224692249" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/90" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/90/hovercard" href="https://github.com/reactphp/stream/pull/90">#90</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Remove undocumented and now unused <code>ReadableStream</code> and <code>WritableStream</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="224814479" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/93" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/93/hovercard" href="https://github.com/reactphp/stream/pull/93">#93</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Remove <code>BufferedSink</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="156061344" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/45" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/45/hovercard" href="https://github.com/reactphp/stream/pull/45">#45</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+</li>
+<li>
+<p>Feature / BC break: Simplify <code>ThroughStream</code> by using data callback instead of<br>
+inheritance. It is now a direct implementation of <code>DuplexStreamInterface</code>.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="223724023" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/88" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/88/hovercard" href="https://github.com/reactphp/stream/pull/88">#88</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="223771834" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/89" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/89/hovercard" href="https://github.com/reactphp/stream/pull/89">#89</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$through</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">ThroughStream</span>(<span class="pl-k">function</span> (<span class="pl-smi">$data</span>) {</span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-c1">json_encode</span>(<span class="pl-smi">$data</span>) <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"><span class="pl-smi">$through</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>data<span class="pl-pds">'</span></span>, <span class="pl-smi">$this</span><span class="pl-k">-&gt;</span>expectCallableOnceWith(<span class="pl-s"><span class="pl-pds">"</span>[2, true]<span class="pl-cce">\n</span><span class="pl-pds">"</span></span>));</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$through</span><span class="pl-k">-&gt;</span>write(<span class="pl-c1">array</span>(<span class="pl-c1">2</span>, <span class="pl-c1">true</span>));</span></pre></div>
+</li>
+<li>
+<p>Feature / BC break: The <code>CompositeStream</code> starts closed if either side is<br>
+already closed and forwards pause to pipe source on first write attempt.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="225736993" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/96" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/96/hovercard" href="https://github.com/reactphp/stream/pull/96">#96</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="226223986" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/103" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/103/hovercard" href="https://github.com/reactphp/stream/pull/103">#103</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>If either side of the composite stream closes, it will also close the other<br>
+side. We now also ensure that if either side is already closed during<br>
+instantiation, it will also close the other side.</p>
+</li>
+<li>
+<p>BC break: Mark all classes as <code>final</code> and<br>
+mark internal API as <code>private</code> to discourage inheritance<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="225213911" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/95" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/95/hovercard" href="https://github.com/reactphp/stream/pull/95">#95</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="225897746" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/99" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/99/hovercard" href="https://github.com/reactphp/stream/pull/99">#99</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Feature / BC break: Only emit <code>error</code> event for fatal errors<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="224740621" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/92" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/92/hovercard" href="https://github.com/reactphp/stream/pull/92">#92</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<blockquote>
+<p>The <code>error</code> event was previously also allowed to be emitted for non-fatal<br>
+errors, but our implementations actually only ever emitted this as a fatal<br>
+error and then closed the stream.</p>
+</blockquote>
+</li>
+<li>
+<p>Feature: Explicitly allow custom events and exclude any semantics<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="225748501" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/97" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/97/hovercard" href="https://github.com/reactphp/stream/pull/97">#97</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Support legacy PHP 5.3 through PHP 7.1 and HHVM and improve usage documentation<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="225912432" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/100" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/100/hovercard" href="https://github.com/reactphp/stream/pull/100">#100</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="226073183" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/102" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/102/hovercard" href="https://github.com/reactphp/stream/pull/102">#102</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Actually require all dependencies so this is self-contained and improve<br>
+forward compatibility with EventLoop v1.0 and v0.5<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="225209246" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/94" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/94/hovercard" href="https://github.com/reactphp/stream/pull/94">#94</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="225752190" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/98" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/98/hovercard" href="https://github.com/reactphp/stream/pull/98">#98</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="060-2017-03-26" class="anchor" href="#060-2017-03-26" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.6.0
+
+        <small>
+            (2017-03-26)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.6.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature / Fix / BC break: Add <code>DuplexResourceStream</code> and deprecate <code>Stream</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="216772737" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/85" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/85/hovercard" href="https://github.com/reactphp/stream/pull/85">#85</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old (does still work for BC reasons)</span></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Stream</span>(<span class="pl-smi">$connection</span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new</span></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">DuplexResourceStream</span>(<span class="pl-smi">$connection</span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+<p>Note that the <code>DuplexResourceStream</code> now rejects read-only or write-only<br>
+streams, so this may affect BC. If you want a read-only or write-only<br>
+resource, use <code>ReadableResourceStream</code> or <code>WritableResourceStream</code> instead of<br>
+<code>DuplexResourceStream</code>.</p>
+<blockquote>
+<p>BC note: This class was previously called <code>Stream</code>. The <code>Stream</code> class still<br>
+exists for BC reasons and will be removed in future versions of this package.</p>
+</blockquote>
+</li>
+<li>
+<p>Feature / BC break: Add <code>WritableResourceStream</code> (previously called <code>Buffer</code>)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="215384123" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/84" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/84/hovercard" href="https://github.com/reactphp/stream/pull/84">#84</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old</span></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">Buffer</span>(<span class="pl-c1">STDOUT</span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new</span></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">WritableResourceStream</span>(<span class="pl-c1">STDOUT</span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+</li>
+<li>
+<p>Feature: Add <code>ReadableResourceStream</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="215212874" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/83" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/83/hovercard" href="https://github.com/reactphp/stream/pull/83">#83</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">ReadableResourceStream</span>(<span class="pl-c1">STDIN</span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+</li>
+<li>
+<p>Fix / BC Break: Enforce using non-blocking I/O<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="164077700" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/46" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/46/hovercard" href="https://github.com/reactphp/stream/pull/46">#46</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<blockquote>
+<p>BC note: This is known to affect process pipes on Windows which do not<br>
+support non-blocking I/O and could thus block the whole EventLoop previously.</p>
+</blockquote>
+</li>
+<li>
+<p>Feature / Fix / BC break: Consistent semantics for<br>
+<code>DuplexStreamInterface::end()</code> to ensure it SHOULD also end readable side<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="216844641" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/86" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/86/hovercard" href="https://github.com/reactphp/stream/pull/86">#86</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+<li>
+<p>Fix: Do not use unbuffered reads on pipe streams for legacy PHP &lt; 5.4<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="213626959" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/80" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/80/hovercard" href="https://github.com/reactphp/stream/pull/80">#80</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="050-2017-03-08" class="anchor" href="#050-2017-03-08" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.5.0
+
+        <small>
+            (2017-03-08)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.5.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>
+<p>Feature / BC break: Consistent <code>end</code> event semantics (EOF)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="211713580" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/70" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/70/hovercard" href="https://github.com/reactphp/stream/pull/70">#70</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>The <code>end</code> event will now only be emitted for a <em>successful</em> end, not if the<br>
+stream closes due to an unrecoverable <code>error</code> event or if you call <code>close()</code><br>
+explicitly.<br>
+If you want to detect when the stream closes (terminates), use the <code>close</code><br>
+event instead.</p>
+</li>
+<li>
+<p>BC break: Remove custom (undocumented) <code>full-drain</code> event from <code>Buffer</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="188990819" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/63" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/63/hovercard" href="https://github.com/reactphp/stream/pull/63">#63</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="211677985" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/68" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/68/hovercard" href="https://github.com/reactphp/stream/pull/68">#68</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<blockquote>
+<p>The <code>full-drain</code> event was undocumented and mostly used internally.<br>
+Relying on this event has attracted some low-quality code in the past, so<br>
+we've removed this from the public API in order to work out a better<br>
+solution instead.<br>
+If you want to detect when the buffer finishes flushing data to the stream,<br>
+you may want to look into its <code>end()</code> method or the <code>close</code> event instead.</p>
+</blockquote>
+</li>
+<li>
+<p>Feature / BC break: Consistent event semantics and documentation,<br>
+explicitly state <em>when</em> events will be emitted and <em>which</em> arguments they<br>
+receive.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="212385051" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/73" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/73/hovercard" href="https://github.com/reactphp/stream/pull/73">#73</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="211682442" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/69" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/69/hovercard" href="https://github.com/reactphp/stream/pull/69">#69</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>The documentation now explicitly defines each event and its arguments.<br>
+Custom events and event arguments are still supported.<br>
+Most notably, all defined events only receive inherently required event<br>
+arguments and no longer transmit the instance they are emitted on for<br>
+consistency and performance reasons.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> old (inconsistent and not supported by all implementations)</span></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>data<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-smi">$data</span>, <span class="pl-smi">$stream</span>) {</span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> process $data</span></span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> new (consistent throughout the whole ecosystem)</span></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>data<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-smi">$data</span>) <span class="pl-k">use</span> (<span class="pl-smi">$stream</span>) {</span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> process $data</span></span>
+<span class="pl-s1">});</span></pre></div>
+<blockquote>
+<p>This mostly adds documentation (and thus some stricter, consistent<br>
+definitions) for the existing behavior, it does NOT define any major<br>
+changes otherwise.<br>
+Most existing code should be compatible with these changes, unless<br>
+it relied on some undocumented/unintended semantics.</p>
+</blockquote>
+</li>
+<li>
+<p>Feature / BC break: Consistent method semantics and documentation<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="212223280" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/72" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/72/hovercard" href="https://github.com/reactphp/stream/pull/72">#72</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<blockquote>
+<p>This mostly adds documentation (and thus some stricter, consistent<br>
+definitions) for the existing behavior, it does NOT define any major<br>
+changes otherwise.<br>
+Most existing code should be compatible with these changes, unless<br>
+it relied on some undocumented/unintended semantics.</p>
+</blockquote>
+</li>
+<li>
+<p>Feature: Consistent <code>pipe()</code> semantics for closed and closing streams<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="211951382" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/71" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/71/hovercard" href="https://github.com/reactphp/stream/pull/71">#71</a> from <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</p>
+<p>The source stream will now always be paused via <code>pause()</code> when the<br>
+destination stream closes. Also, properly stop piping if the source<br>
+stream closes and remove all event forwarding.</p>
+</li>
+<li>
+<p>Improve test suite by adding PHPUnit to <code>require-dev</code> and improving coverage.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="212393784" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/74" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/74/hovercard" href="https://github.com/reactphp/stream/pull/74">#74</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="212408478" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/75" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/75/hovercard" href="https://github.com/reactphp/stream/pull/75">#75</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="207684806" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/66" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/66/hovercard" href="https://github.com/reactphp/stream/pull/66">#66</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/nawarian/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/nawarian">@nawarian</a>)</p>
+</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="046-2017-01-25" class="anchor" href="#046-2017-01-25" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.6
+
+        <small>
+            (2017-01-25)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.4.6" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: The <code>Buffer</code> can now be injected into the <code>Stream</code> (or be used standalone)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="188990281" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/62" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/62/hovercard" href="https://github.com/reactphp/stream/pull/62">#62</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Fix: Forward <code>close</code> event only once for <code>CompositeStream</code> and <code>ThroughStream</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="188985696" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/60" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/60/hovercard" href="https://github.com/reactphp/stream/pull/60">#60</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Fix: Consistent <code>close</code> event behavior for <code>Buffer</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="188987403" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/61" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/61/hovercard" href="https://github.com/reactphp/stream/pull/61">#61</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2016" class="anchor" href="#2016" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2016
+    </h2>
+
+    
+            <h3>
+        <a id="045-2016-11-13" class="anchor" href="#045-2016-11-13" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.5
+
+        <small>
+            (2016-11-13)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.4.5" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Support setting read buffer size to <code>null</code> (infinite)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="140515904" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/42" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/42/hovercard" href="https://github.com/reactphp/stream/pull/42">#42</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Fix: Do not emit <code>full-drain</code> event if <code>Buffer</code> is closed during <code>drain</code> event<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="172324369" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/55" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/55/hovercard" href="https://github.com/reactphp/stream/pull/55">#55</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Vastly improved performance by factor of 10x to 20x.<br>
+Raise default buffer sizes to 64 KiB and simplify and improve error handling<br>
+and unneeded function calls.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="172272805" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/53" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/53/hovercard" href="https://github.com/reactphp/stream/pull/53">#53</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="172324369" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/55" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/55/hovercard" href="https://github.com/reactphp/stream/pull/55">#55</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="172327657" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/56" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/56/hovercard" href="https://github.com/reactphp/stream/pull/56">#56</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="044-2016-08-22" class="anchor" href="#044-2016-08-22" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.4
+
+        <small>
+            (2016-08-22)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.4.4" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: Emit <code>error</code> event and close <code>Stream</code> when accessing the underlying<br>
+stream resource fails with a permanent error.<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="172138800" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/52" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/52/hovercard" href="https://github.com/reactphp/stream/pull/52">#52</a> and <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="138684703" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/40" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/40/hovercard" href="https://github.com/reactphp/stream/pull/40">#40</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="92505502" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/25" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/25/hovercard" href="https://github.com/reactphp/stream/pull/25">#25</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/lysenkobv/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/lysenkobv">@lysenkobv</a>)</li>
+<li>Bug fix: Do not emit empty <code>data</code> event if nothing has been read (stream reached EOF)<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="138682317" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/39" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/39/hovercard" href="https://github.com/reactphp/stream/pull/39">#39</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Bug fix: Ignore empty writes to <code>Buffer</code><br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="172136407" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/51" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/51/hovercard" href="https://github.com/reactphp/stream/pull/51">#51</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Add benchmarking script to measure throughput in CI<br>
+(<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="138823476" data-permission-text="Title is private" data-url="https://github.com/reactphp/stream/issues/41" data-hovercard-type="pull_request" data-hovercard-url="/reactphp/stream/pull/41/hovercard" href="https://github.com/reactphp/stream/pull/41">#41</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2015" class="anchor" href="#2015" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2015
+    </h2>
+
+    
+            <h3>
+        <a id="043-2015-10-07" class="anchor" href="#043-2015-10-07" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.3
+
+        <small>
+            (2015-10-07)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.4.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: Read buffer to 0 fixes error with libevent and large quantity of I/O (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/mbonneau/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mbonneau">@mbonneau</a>)</li>
+<li>Bug fix: No double-write during drain call (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/arnaud-lb/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/arnaud-lb">@arnaud-lb</a>)</li>
+<li>Bug fix: Support HHVM (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+<li>Adjust compatibility to 5.3 (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/clue/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/clue">@clue</a>)</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2014" class="anchor" href="#2014" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2014
+    </h2>
+
+    
+            <h3>
+        <a id="042-2014-09-10" class="anchor" href="#042-2014-09-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.2
+
+        <small>
+            (2014-09-10)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.4.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Added DuplexStreamInterface</li>
+<li>Stream sets stream resources to non-blocking</li>
+<li>Fixed potential race condition in pipe</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="041-2014-03-30" class="anchor" href="#041-2014-03-30" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.1
+
+        <small>
+            (2014-03-30)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.4.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: v0.3.4 changes merged for v0.4.1</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="034-2014-02-16" class="anchor" href="#034-2014-02-16" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.3.4
+
+        <small>
+            (2014-02-16)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.3.4" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: [Stream] Fixed 100% CPU spike from non-empty write buffer on closed stream</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="040-2014-02-02" class="anchor" href="#040-2014-02-02" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.4.0
+
+        <small>
+            (2014-02-02)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.4.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>BC break: Bump minimum PHP version to PHP 5.4, remove 5.3 specific hacks</li>
+<li>BC break: Update to Evenement 2.0</li>
+<li>Dependency: Autoloading and filesystem structure now PSR-4 instead of PSR-0</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2013" class="anchor" href="#2013" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2013
+    </h2>
+
+    
+            <h3>
+        <a id="033-2013-07-09" class="anchor" href="#033-2013-07-09" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.3.3
+
+        <small>
+            (2013-07-09)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.3.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: [Stream] Correctly detect closed connections</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="032-2013-05-10" class="anchor" href="#032-2013-05-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.3.2
+
+        <small>
+            (2013-05-10)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.3.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: [Stream] Make sure CompositeStream is closed properly</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="031-2013-04-21" class="anchor" href="#031-2013-04-21" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.3.1
+
+        <small>
+            (2013-04-21)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.3.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: [Stream] Allow any <code>ReadableStreamInterface</code> on <code>BufferedSink::createPromise()</code></li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="030-2013-04-14" class="anchor" href="#030-2013-04-14" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.3.0
+
+        <small>
+            (2013-04-14)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.3.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: [Stream] Factory method for BufferedSink</li>
+</ul>
+
+    <hr>
+        <h2>
+        <a id="2012" class="anchor" href="#2012" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+        2012
+    </h2>
+
+    
+            <h3>
+        <a id="026-2012-12-14" class="anchor" href="#026-2012-12-14" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.2.6
+
+        <small>
+            (2012-12-14)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.2.6" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="025-2012-11-19" class="anchor" href="#025-2012-11-19" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.2.5
+
+        <small>
+            (2012-11-19)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.2.5" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Make BufferedSink trigger progress events on the promise (<a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/jsor/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/jsor">@jsor</a>)</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="024-2012-11-18" class="anchor" href="#024-2012-11-18" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.2.4
+
+        <small>
+            (2012-11-18)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.2.4" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Feature: Added ThroughStream, CompositeStream, ReadableStream and WritableStream</li>
+<li>Feature: Added BufferedSink</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="023-2012-11-05" class="anchor" href="#023-2012-11-05" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.2.3
+
+        <small>
+            (2012-11-05)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.2.3" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="022-2012-10-28" class="anchor" href="#022-2012-10-28" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.2.2
+
+        <small>
+            (2012-10-28)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.2.2" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="021-2012-10-13" class="anchor" href="#021-2012-10-13" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.2.1
+
+        <small>
+            (2012-10-13)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.2.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: Check for EOF in <code>Buffer::write()</code></li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="020-2012-09-10" class="anchor" href="#020-2012-09-10" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.2.0
+
+        <small>
+            (2012-09-10)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.2.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Version bump</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="011-2012-07-12" class="anchor" href="#011-2012-07-12" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.1.1
+
+        <small>
+            (2012-07-12)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.1.1" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>Bug fix: Testing and functional against PHP &gt;= 5.3.3 and &lt;= 5.3.8</li>
+</ul>
+
+    <hr>
+    
+            <h3>
+        <a id="010-2012-07-11" class="anchor" href="#010-2012-07-11" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>
+
+        0.1.0
+
+        <small>
+            (2012-07-11)
+            <a href="https://github.com/reactphp/stream/releases/tag/v0.1.0" title="Release on GitHub">
+                <i class="icon-github" aria-hidden="true"></i> <span class="visually-hidden">Release on GitHub</span>
+            </a>
+        </small>
+    </h3>
+
+    <ul>
+<li>First tagged release</li>
+</ul>
+
+    <hr>
+    
+    <ul class="links">
+        <li>
+            <a href="https://github.com/reactphp/stream/releases.atom">
+                <i class="icon-feed" aria-hidden="true"></i>
+                Subscribe to the Changelog feed
+            </a>
+        </li>
+    </ul>
+                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../stream/">Stream</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v1.1.1
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/stream#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v1.1.0#readme" class="version-selector__version">
+                                                    v1.1.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v1.0.0#readme" class="version-selector__version">
+                                                    v1.0.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.7.7#readme" class="version-selector__version">
+                                                    v0.7.7
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.7.6#readme" class="version-selector__version">
+                                                    v0.7.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.7.5#readme" class="version-selector__version">
+                                                    v0.7.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.7.4#readme" class="version-selector__version">
+                                                    v0.7.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.7.3#readme" class="version-selector__version">
+                                                    v0.7.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.7.2#readme" class="version-selector__version">
+                                                    v0.7.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.7.1#readme" class="version-selector__version">
+                                                    v0.7.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.7.0#readme" class="version-selector__version">
+                                                    v0.7.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.6.0#readme" class="version-selector__version">
+                                                    v0.6.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.5.0#readme" class="version-selector__version">
+                                                    v0.5.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.4.6#readme" class="version-selector__version">
+                                                    v0.4.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.4.5#readme" class="version-selector__version">
+                                                    v0.4.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.4.4#readme" class="version-selector__version">
+                                                    v0.4.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.4.3#readme" class="version-selector__version">
+                                                    v0.4.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.4.2#readme" class="version-selector__version">
+                                                    v0.4.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.4.1#readme" class="version-selector__version">
+                                                    v0.4.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.3.4#readme" class="version-selector__version">
+                                                    v0.3.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.4.0#readme" class="version-selector__version">
+                                                    v0.4.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.3.3#readme" class="version-selector__version">
+                                                    v0.3.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.3.2#readme" class="version-selector__version">
+                                                    v0.3.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.3.1#readme" class="version-selector__version">
+                                                    v0.3.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.3.0#readme" class="version-selector__version">
+                                                    v0.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.2.6#readme" class="version-selector__version">
+                                                    v0.2.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.2.5#readme" class="version-selector__version">
+                                                    v0.2.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.2.4#readme" class="version-selector__version">
+                                                    v0.2.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.2.3#readme" class="version-selector__version">
+                                                    v0.2.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.2.2#readme" class="version-selector__version">
+                                                    v0.2.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.2.1#readme" class="version-selector__version">
+                                                    v0.2.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.2.0#readme" class="version-selector__version">
+                                                    v0.2.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.1.1#readme" class="version-selector__version">
+                                                    v0.1.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.1.0#readme" class="version-selector__version">
+                                                    v0.1.0
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/stream">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../stream/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../stream/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/stream:^1.1.1</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (172 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (52 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/igorw">
+                                    <img src="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=80 2x" alt="igorw" title="igorw (43 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cboden">
+                                    <img src="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=80 2x" alt="cboden" title="cboden (43 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (12 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/steverhoades">
+                                    <img src="https://avatars0.githubusercontent.com/u/1146668?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/1146668?v=4&amp;s=80 2x" alt="steverhoades" title="steverhoades (4 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/arnaud-lb">
+                                    <img src="https://avatars3.githubusercontent.com/u/365207?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/365207?v=4&amp;s=80 2x" alt="arnaud-lb" title="arnaud-lb (3 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/carusogabriel">
+                                    <img src="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=80 2x" alt="carusogabriel" title="carusogabriel (3 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/lysenkobv">
+                                    <img src="https://avatars3.githubusercontent.com/u/1250142?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/1250142?v=4&amp;s=80 2x" alt="lysenkobv" title="lysenkobv (3 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jmalloc">
+                                    <img src="https://avatars3.githubusercontent.com/u/761536?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/761536?v=4&amp;s=80 2x" alt="jmalloc" title="jmalloc (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/nawarian">
+                                    <img src="https://avatars2.githubusercontent.com/u/3905582?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/3905582?v=4&amp;s=80 2x" alt="nawarian" title="nawarian (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/pulyavin">
+                                    <img src="https://avatars3.githubusercontent.com/u/9364583?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/9364583?v=4&amp;s=80 2x" alt="pulyavin" title="pulyavin (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/DaveRandom">
+                                    <img src="https://avatars1.githubusercontent.com/u/2396425?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/2396425?v=4&amp;s=80 2x" alt="DaveRandom" title="DaveRandom (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/docteurklein">
+                                    <img src="https://avatars3.githubusercontent.com/u/109846?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/109846?v=4&amp;s=80 2x" alt="docteurklein" title="docteurklein (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/andig">
+                                    <img src="https://avatars1.githubusercontent.com/u/184815?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/184815?v=4&amp;s=80 2x" alt="andig" title="andig (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-stream-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-stream-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,1 6,1 12,1 18,1 24,1 30,1 36,1 42,1 48,1 54,1 60,1 66,1 72,1 78,1 84,1 90,1 96,1 102,1 108,1 114,1 120,1 126,1 132,1 138,1 144,1 150,1 156,1 162,1 168,1 174,3 180,1 186,1 192,3 198,1 204,1 210,1 216,1 222,1 228,1 234,1 240,1 246,1 252,1 258,1 264,1 270,1 276,1 282,1 288,6 294,1 300,1 306,1" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-stream-participation-gradient);mask:url(#reactphp-stream-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/stream/index.html b/stream/index.html
new file mode 100644
index 000000000..3aadf53c9
--- /dev/null
+++ b/stream/index.html
@@ -0,0 +1,1469 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>Stream: 
+Stream - ReactPHP</title>
+
+        <meta name="description" content="Event-driven readable and writable streams for non-blocking I/O in ReactPHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+            </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                                    <h1>Stream</h1>
+
+                    
+<p><a href="https://travis-ci.org/reactphp/stream" rel="nofollow"><img src="https://camo.githubusercontent.com/de9b0c50fb2454d1d9e798cd5aae153c1fc715b8/68747470733a2f2f7472617669732d63692e6f72672f72656163747068702f73747265616d2e7376673f6272616e63683d6d6173746572" alt="Build Status" data-canonical-src="https://travis-ci.org/reactphp/stream.svg?branch=master" style="max-width:100%;"></a></p>
+<p>Event-driven readable and writable streams for non-blocking I/O in <a href="https://reactphp.org/" rel="nofollow">ReactPHP</a>.</p>
+<p>In order to make the <a href="../event-loop/">EventLoop</a>
+easier to use, this component introduces the powerful concept of "streams".
+Streams allow you to efficiently process huge amounts of data (such as a multi
+Gigabyte file download) in small chunks without having to store everything in
+memory at once.
+They are very similar to the streams found in PHP itself,
+but have an interface more suited for async, non-blocking I/O.</p>
+<p><strong>Table of contents</strong></p>
+<ul>
+<li>
+<a href="#stream-usage">Stream usage</a>
+<ul>
+<li>
+<a href="#readablestreaminterface">ReadableStreamInterface</a>
+<ul>
+<li><a href="#data-event">data event</a></li>
+<li><a href="#end-event">end event</a></li>
+<li><a href="#error-event">error event</a></li>
+<li><a href="#close-event">close event</a></li>
+<li><a href="#isreadable">isReadable()</a></li>
+<li><a href="#pause">pause()</a></li>
+<li><a href="#resume">resume()</a></li>
+<li><a href="#pipe">pipe()</a></li>
+<li><a href="#close">close()</a></li>
+</ul>
+</li>
+<li>
+<a href="#writablestreaminterface">WritableStreamInterface</a>
+<ul>
+<li><a href="#drain-event">drain event</a></li>
+<li><a href="#pipe-event">pipe event</a></li>
+<li><a href="#error-event-1">error event</a></li>
+<li><a href="#close-event-1">close event</a></li>
+<li><a href="#iswritable">isWritable()</a></li>
+<li><a href="#write">write()</a></li>
+<li><a href="#end">end()</a></li>
+<li><a href="#close-1">close()</a></li>
+</ul>
+</li>
+<li><a href="#duplexstreaminterface">DuplexStreamInterface</a></li>
+</ul>
+</li>
+<li>
+<a href="#creating-streams">Creating streams</a>
+<ul>
+<li><a href="#readableresourcestream">ReadableResourceStream</a></li>
+<li><a href="#writableresourcestream">WritableResourceStream</a></li>
+<li><a href="#duplexresourcestream">DuplexResourceStream</a></li>
+<li><a href="#throughstream">ThroughStream</a></li>
+<li><a href="#compositestream">CompositeStream</a></li>
+</ul>
+</li>
+<li><a href="#usage">Usage</a></li>
+<li><a href="#install">Install</a></li>
+<li><a href="#tests">Tests</a></li>
+<li><a href="#license">License</a></li>
+<li><a href="#more">More</a></li>
+</ul>
+<h2>
+<a id="stream-usage" class="anchor" href="#stream-usage" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Stream usage</h2>
+<p>ReactPHP uses the concept of "streams" throughout its ecosystem to provide a
+consistent higher-level abstraction for processing streams of arbitrary data
+contents and size.
+While a stream itself is a quite low-level concept, it can be used as a powerful
+abstraction to build higher-level components and protocols on top.</p>
+<p>If you're new to this concept, it helps to think of them as a water pipe:
+You can consume water from a source or you can produce water and forward (pipe)
+it to any destination (sink).</p>
+<p>Similarly, streams can either be</p>
+<ul>
+<li>readable (such as <code>STDIN</code> terminal input) or</li>
+<li>writable (such as <code>STDOUT</code> terminal output) or</li>
+<li>duplex (both readable <em>and</em> writable, such as a TCP/IP connection)</li>
+</ul>
+<p>Accordingly, this package defines the following three interfaces</p>
+<ul>
+<li><a href="#readablestreaminterface"><code>ReadableStreamInterface</code></a></li>
+<li><a href="#writablestreaminterface"><code>WritableStreamInterface</code></a></li>
+<li><a href="#duplexstreaminterface"><code>DuplexStreamInterface</code></a></li>
+</ul>
+<h3>
+<a id="readablestreaminterface" class="anchor" href="#readablestreaminterface" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>ReadableStreamInterface</h3>
+<p>The <code>ReadableStreamInterface</code> is responsible for providing an interface for
+read-only streams and the readable side of duplex streams.</p>
+<p>Besides defining a few methods, this interface also implements the
+<code>EventEmitterInterface</code> which allows you to react to certain events.</p>
+<p>The event callback functions MUST be a valid <code>callable</code> that obeys strict
+parameter definitions and MUST accept event parameters exactly as documented.
+The event callback functions MUST NOT throw an <code>Exception</code>.
+The return value of the event callback functions will be ignored and has no
+effect, so for performance reasons you're recommended to not return any
+excessive data structures.</p>
+<p>Every implementation of this interface MUST follow these event semantics in
+order to be considered a well-behaving stream.</p>
+<blockquote>
+<p>Note that higher-level implementations of this interface may choose to
+define additional events with dedicated semantics not defined as part of
+this low-level stream specification. Conformance with these event semantics
+is out of scope for this interface, so you may also have to refer to the
+documentation of such a higher-level implementation.</p>
+</blockquote>
+<h4>
+<a id="data-event" class="anchor" href="#data-event" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>data event</h4>
+<p>The <code>data</code> event will be emitted whenever some data was read/received
+from this source stream.
+The event receives a single mixed argument for incoming data.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>data<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-smi">$data</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-smi">$data</span>;</span>
+<span class="pl-s1">});</span></pre></div>
+<p>This event MAY be emitted any number of times, which may be zero times if
+this stream does not send any data at all.
+It SHOULD not be emitted after an <code>end</code> or <code>close</code> event.</p>
+<p>The given <code>$data</code> argument may be of mixed type, but it's usually
+recommended it SHOULD be a <code>string</code> value or MAY use a type that allows
+representation as a <code>string</code> for maximum compatibility.</p>
+<p>Many common streams (such as a TCP/IP connection or a file-based stream)
+will emit the raw (binary) payload data that is received over the wire as
+chunks of <code>string</code> values.</p>
+<p>Due to the stream-based nature of this, the sender may send any number
+of chunks with varying sizes. There are no guarantees that these chunks
+will be received with the exact same framing the sender intended to send.
+In other words, many lower-level protocols (such as TCP/IP) transfer the
+data in chunks that may be anywhere between single-byte values to several
+dozens of kilobytes. You may want to apply a higher-level protocol to
+these low-level data chunks in order to achieve proper message framing.</p>
+<h4>
+<a id="end-event" class="anchor" href="#end-event" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>end event</h4>
+<p>The <code>end</code> event will be emitted once the source stream has successfully
+reached the end of the stream (EOF).</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>end<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> () {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>END<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1">});</span></pre></div>
+<p>This event SHOULD be emitted once or never at all, depending on whether
+a successful end was detected.
+It SHOULD NOT be emitted after a previous <code>end</code> or <code>close</code> event.
+It MUST NOT be emitted if the stream closes due to a non-successful
+end, such as after a previous <code>error</code> event.</p>
+<p>After the stream is ended, it MUST switch to non-readable mode,
+see also <code>isReadable()</code>.</p>
+<p>This event will only be emitted if the <em>end</em> was reached successfully,
+not if the stream was interrupted by an unrecoverable error or explicitly
+closed. Not all streams know this concept of a "successful end".
+Many use-cases involve detecting when the stream closes (terminates)
+instead, in this case you should use the <code>close</code> event.
+After the stream emits an <code>end</code> event, it SHOULD usually be followed by a
+<code>close</code> event.</p>
+<p>Many common streams (such as a TCP/IP connection or a file-based stream)
+will emit this event if either the remote side closes the connection or
+a file handle was successfully read until reaching its end (EOF).</p>
+<p>Note that this event should not be confused with the <code>end()</code> method.
+This event defines a successful end <em>reading</em> from a source stream, while
+the <code>end()</code> method defines <em>writing</em> a successful end to a destination
+stream.</p>
+<h4>
+<a id="error-event" class="anchor" href="#error-event" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>error event</h4>
+<p>The <code>error</code> event will be emitted once a fatal error occurs, usually while
+trying to read from this stream.
+The event receives a single <code>Exception</code> argument for the error instance.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$server</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>error<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-c1">Exception</span> <span class="pl-smi">$e</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>Error: <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$e</span><span class="pl-k">-&gt;</span>getMessage() <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">});</span></pre></div>
+<p>This event SHOULD be emitted once the stream detects a fatal error, such
+as a fatal transmission error or after an unexpected <code>data</code> or premature
+<code>end</code> event.
+It SHOULD NOT be emitted after a previous <code>error</code>, <code>end</code> or <code>close</code> event.
+It MUST NOT be emitted if this is not a fatal error condition, such as
+a temporary network issue that did not cause any data to be lost.</p>
+<p>After the stream errors, it MUST close the stream and SHOULD thus be
+followed by a <code>close</code> event and then switch to non-readable mode, see
+also <code>close()</code> and <code>isReadable()</code>.</p>
+<p>Many common streams (such as a TCP/IP connection or a file-based stream)
+only deal with data transmission and do not make assumption about data
+boundaries (such as unexpected <code>data</code> or premature <code>end</code> events).
+In other words, many lower-level protocols (such as TCP/IP) may choose
+to only emit this for a fatal transmission error once and will then
+close (terminate) the stream in response.</p>
+<p>If this stream is a <code>DuplexStreamInterface</code>, you should also notice
+how the writable side of the stream also implements an <code>error</code> event.
+In other words, an error may occur while either reading or writing the
+stream which should result in the same error processing.</p>
+<h4>
+<a id="close-event" class="anchor" href="#close-event" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>close event</h4>
+<p>The <code>close</code> event will be emitted once the stream closes (terminates).</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>close<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> () {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>CLOSED<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1">});</span></pre></div>
+<p>This event SHOULD be emitted once or never at all, depending on whether
+the stream ever terminates.
+It SHOULD NOT be emitted after a previous <code>close</code> event.</p>
+<p>After the stream is closed, it MUST switch to non-readable mode,
+see also <code>isReadable()</code>.</p>
+<p>Unlike the <code>end</code> event, this event SHOULD be emitted whenever the stream
+closes, irrespective of whether this happens implicitly due to an
+unrecoverable error or explicitly when either side closes the stream.
+If you only want to detect a <em>successful</em> end, you should use the <code>end</code>
+event instead.</p>
+<p>Many common streams (such as a TCP/IP connection or a file-based stream)
+will likely choose to emit this event after reading a <em>successful</em> <code>end</code>
+event or after a fatal transmission <code>error</code> event.</p>
+<p>If this stream is a <code>DuplexStreamInterface</code>, you should also notice
+how the writable side of the stream also implements a <code>close</code> event.
+In other words, after receiving this event, the stream MUST switch into
+non-writable AND non-readable mode, see also <code>isWritable()</code>.
+Note that this event should not be confused with the <code>end</code> event.</p>
+<h4>
+<a id="isreadable" class="anchor" href="#isreadable" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>isReadable()</h4>
+<p>The <code>isReadable(): bool</code> method can be used to
+check whether this stream is in a readable state (not closed already).</p>
+<p>This method can be used to check if the stream still accepts incoming
+data events or if it is ended or closed already.
+Once the stream is non-readable, no further <code>data</code> or <code>end</code> events SHOULD
+be emitted.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c1">assert</span>(<span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>isReadable() <span class="pl-k">===</span> <span class="pl-c1">false</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>data<span class="pl-pds">'</span></span>, assertNeverCalled());</span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>end<span class="pl-pds">'</span></span>, assertNeverCalled());</span></pre></div>
+<p>A successfully opened stream always MUST start in readable mode.</p>
+<p>Once the stream ends or closes, it MUST switch to non-readable mode.
+This can happen any time, explicitly through <code>close()</code> or
+implicitly due to a remote close or an unrecoverable transmission error.
+Once a stream has switched to non-readable mode, it MUST NOT transition
+back to readable mode.</p>
+<p>If this stream is a <code>DuplexStreamInterface</code>, you should also notice
+how the writable side of the stream also implements an <code>isWritable()</code>
+method. Unless this is a half-open duplex stream, they SHOULD usually
+have the same return value.</p>
+<h4>
+<a id="pause" class="anchor" href="#pause" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>pause()</h4>
+<p>The <code>pause(): void</code> method can be used to
+pause reading incoming data events.</p>
+<p>Removes the data source file descriptor from the event loop. This
+allows you to throttle incoming data.</p>
+<p>Unless otherwise noted, a successfully opened stream SHOULD NOT start
+in paused state.</p>
+<p>Once the stream is paused, no futher <code>data</code> or <code>end</code> events SHOULD
+be emitted.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>pause();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>data<span class="pl-pds">'</span></span>, assertShouldNeverCalled());</span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>end<span class="pl-pds">'</span></span>, assertShouldNeverCalled());</span></pre></div>
+<p>This method is advisory-only, though generally not recommended, the
+stream MAY continue emitting <code>data</code> events.</p>
+<p>You can continue processing events by calling <code>resume()</code> again.</p>
+<p>Note that both methods can be called any number of times, in particular
+calling <code>pause()</code> more than once SHOULD NOT have any effect.</p>
+<p>See also <code>resume()</code>.</p>
+<h4>
+<a id="resume" class="anchor" href="#resume" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>resume()</h4>
+<p>The <code>resume(): void</code> method can be used to
+resume reading incoming data events.</p>
+<p>Re-attach the data source after a previous <code>pause()</code>.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>pause();</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addTimer(<span class="pl-c1">1.0</span>, <span class="pl-k">function</span> () <span class="pl-k">use</span> (<span class="pl-smi">$stream</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>resume();</span>
+<span class="pl-s1">});</span></pre></div>
+<p>Note that both methods can be called any number of times, in particular
+calling <code>resume()</code> without a prior <code>pause()</code> SHOULD NOT have any effect.</p>
+<p>See also <code>pause()</code>.</p>
+<h4>
+<a id="pipe" class="anchor" href="#pipe" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>pipe()</h4>
+<p>The <code>pipe(WritableStreamInterface $dest, array $options = [])</code> method can be used to
+pipe all the data from this readable source into the given writable destination.</p>
+<p>Automatically sends all incoming data to the destination.
+Automatically throttles the source based on what the destination can handle.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$source</span><span class="pl-k">-&gt;</span>pipe(<span class="pl-smi">$dest</span>);</span></pre></div>
+<p>Similarly, you can also pipe an instance implementing <code>DuplexStreamInterface</code>
+into itself in order to write back all the data that is received.
+This may be a useful feature for a TCP/IP echo service:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$connection</span><span class="pl-k">-&gt;</span>pipe(<span class="pl-smi">$connection</span>);</span></pre></div>
+<p>This method returns the destination stream as-is, which can be used to
+set up chains of piped streams:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$source</span><span class="pl-k">-&gt;</span>pipe(<span class="pl-smi">$decodeGzip</span>)<span class="pl-k">-&gt;</span>pipe(<span class="pl-smi">$filterBadWords</span>)<span class="pl-k">-&gt;</span>pipe(<span class="pl-smi">$dest</span>);</span></pre></div>
+<p>By default, this will call <code>end()</code> on the destination stream once the
+source stream emits an <code>end</code> event. This can be disabled like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$source</span><span class="pl-k">-&gt;</span>pipe(<span class="pl-smi">$dest</span>, <span class="pl-c1">array</span>(<span class="pl-s"><span class="pl-pds">'</span>end<span class="pl-pds">'</span></span> <span class="pl-k">=&gt;</span> <span class="pl-c1">false</span>));</span></pre></div>
+<p>Note that this only applies to the <code>end</code> event.
+If an <code>error</code> or explicit <code>close</code> event happens on the source stream,
+you'll have to manually close the destination stream:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$source</span><span class="pl-k">-&gt;</span>pipe(<span class="pl-smi">$dest</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$source</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>close<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> () <span class="pl-k">use</span> (<span class="pl-smi">$dest</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$dest</span><span class="pl-k">-&gt;</span>end(<span class="pl-s"><span class="pl-pds">'</span>BYE!<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1">});</span></pre></div>
+<p>If the source stream is not readable (closed state), then this is a NO-OP.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$source</span><span class="pl-k">-&gt;</span>close();</span>
+<span class="pl-s1"><span class="pl-smi">$source</span><span class="pl-k">-&gt;</span>pipe(<span class="pl-smi">$dest</span>); <span class="pl-c"><span class="pl-c">//</span> NO-OP</span></span></pre></div>
+<p>If the destinantion stream is not writable (closed state), then this will simply
+throttle (pause) the source stream:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$dest</span><span class="pl-k">-&gt;</span>close();</span>
+<span class="pl-s1"><span class="pl-smi">$source</span><span class="pl-k">-&gt;</span>pipe(<span class="pl-smi">$dest</span>); <span class="pl-c"><span class="pl-c">//</span> calls $source-&gt;pause()</span></span></pre></div>
+<p>Similarly, if the destination stream is closed while the pipe is still
+active, it will also throttle (pause) the source stream:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$source</span><span class="pl-k">-&gt;</span>pipe(<span class="pl-smi">$dest</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$dest</span><span class="pl-k">-&gt;</span>close(); <span class="pl-c"><span class="pl-c">//</span> calls $source-&gt;pause()</span></span></pre></div>
+<p>Once the pipe is set up successfully, the destination stream MUST emit
+a <code>pipe</code> event with this source stream an event argument.</p>
+<h4>
+<a id="close" class="anchor" href="#close" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>close()</h4>
+<p>The <code>close(): void</code> method can be used to
+close the stream (forcefully).</p>
+<p>This method can be used to (forcefully) close the stream.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>close();</span></pre></div>
+<p>Once the stream is closed, it SHOULD emit a <code>close</code> event.
+Note that this event SHOULD NOT be emitted more than once, in particular
+if this method is called multiple times.</p>
+<p>After calling this method, the stream MUST switch into a non-readable
+mode, see also <code>isReadable()</code>.
+This means that no further <code>data</code> or <code>end</code> events SHOULD be emitted.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>close();</span>
+<span class="pl-s1"><span class="pl-c1">assert</span>(<span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>isReadable() <span class="pl-k">===</span> <span class="pl-c1">false</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>data<span class="pl-pds">'</span></span>, assertNeverCalled());</span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>end<span class="pl-pds">'</span></span>, assertNeverCalled());</span></pre></div>
+<p>If this stream is a <code>DuplexStreamInterface</code>, you should also notice
+how the writable side of the stream also implements a <code>close()</code> method.
+In other words, after calling this method, the stream MUST switch into
+non-writable AND non-readable mode, see also <code>isWritable()</code>.
+Note that this method should not be confused with the <code>end()</code> method.</p>
+<h3>
+<a id="writablestreaminterface" class="anchor" href="#writablestreaminterface" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>WritableStreamInterface</h3>
+<p>The <code>WritableStreamInterface</code> is responsible for providing an interface for
+write-only streams and the writable side of duplex streams.</p>
+<p>Besides defining a few methods, this interface also implements the
+<code>EventEmitterInterface</code> which allows you to react to certain events.</p>
+<p>The event callback functions MUST be a valid <code>callable</code> that obeys strict
+parameter definitions and MUST accept event parameters exactly as documented.
+The event callback functions MUST NOT throw an <code>Exception</code>.
+The return value of the event callback functions will be ignored and has no
+effect, so for performance reasons you're recommended to not return any
+excessive data structures.</p>
+<p>Every implementation of this interface MUST follow these event semantics in
+order to be considered a well-behaving stream.</p>
+<blockquote>
+<p>Note that higher-level implementations of this interface may choose to
+define additional events with dedicated semantics not defined as part of
+this low-level stream specification. Conformance with these event semantics
+is out of scope for this interface, so you may also have to refer to the
+documentation of such a higher-level implementation.</p>
+</blockquote>
+<h4>
+<a id="drain-event" class="anchor" href="#drain-event" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>drain event</h4>
+<p>The <code>drain</code> event will be emitted whenever the write buffer became full
+previously and is now ready to accept more data.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>drain<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> () <span class="pl-k">use</span> (<span class="pl-smi">$stream</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>Stream is now ready to accept more data<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1">});</span></pre></div>
+<p>This event SHOULD be emitted once every time the buffer became full
+previously and is now ready to accept more data.
+In other words, this event MAY be emitted any number of times, which may
+be zero times if the buffer never became full in the first place.
+This event SHOULD NOT be emitted if the buffer has not become full
+previously.</p>
+<p>This event is mostly used internally, see also <code>write()</code> for more details.</p>
+<h4>
+<a id="pipe-event" class="anchor" href="#pipe-event" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>pipe event</h4>
+<p>The <code>pipe</code> event will be emitted whenever a readable stream is <code>pipe()</code>d
+into this stream.
+The event receives a single <code>ReadableStreamInterface</code> argument for the
+source stream.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>pipe<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-c1">ReadableStreamInterface</span> <span class="pl-smi">$source</span>) <span class="pl-k">use</span> (<span class="pl-smi">$stream</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>Now receiving piped data<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1"></span>
+<span class="pl-s1">    <span class="pl-c"><span class="pl-c">//</span> explicitly close target if source emits an error</span></span>
+<span class="pl-s1">    <span class="pl-smi">$source</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>error<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> () <span class="pl-k">use</span> (<span class="pl-smi">$stream</span>) {</span>
+<span class="pl-s1">        <span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>close();</span>
+<span class="pl-s1">    });</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$source</span><span class="pl-k">-&gt;</span>pipe(<span class="pl-smi">$stream</span>);</span></pre></div>
+<p>This event MUST be emitted once for each readable stream that is
+successfully piped into this destination stream.
+In other words, this event MAY be emitted any number of times, which may
+be zero times if no stream is ever piped into this stream.
+This event MUST NOT be emitted if either the source is not readable
+(closed already) or this destination is not writable (closed already).</p>
+<p>This event is mostly used internally, see also <code>pipe()</code> for more details.</p>
+<h4>
+<a id="error-event-1" class="anchor" href="#error-event-1" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>error event</h4>
+<p>The <code>error</code> event will be emitted once a fatal error occurs, usually while
+trying to write to this stream.
+The event receives a single <code>Exception</code> argument for the error instance.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>error<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-c1">Exception</span> <span class="pl-smi">$e</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>Error: <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$e</span><span class="pl-k">-&gt;</span>getMessage() <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">});</span></pre></div>
+<p>This event SHOULD be emitted once the stream detects a fatal error, such
+as a fatal transmission error.
+It SHOULD NOT be emitted after a previous <code>error</code> or <code>close</code> event.
+It MUST NOT be emitted if this is not a fatal error condition, such as
+a temporary network issue that did not cause any data to be lost.</p>
+<p>After the stream errors, it MUST close the stream and SHOULD thus be
+followed by a <code>close</code> event and then switch to non-writable mode, see
+also <code>close()</code> and <code>isWritable()</code>.</p>
+<p>Many common streams (such as a TCP/IP connection or a file-based stream)
+only deal with data transmission and may choose
+to only emit this for a fatal transmission error once and will then
+close (terminate) the stream in response.</p>
+<p>If this stream is a <code>DuplexStreamInterface</code>, you should also notice
+how the readable side of the stream also implements an <code>error</code> event.
+In other words, an error may occur while either reading or writing the
+stream which should result in the same error processing.</p>
+<h4>
+<a id="close-event-1" class="anchor" href="#close-event-1" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>close event</h4>
+<p>The <code>close</code> event will be emitted once the stream closes (terminates).</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>close<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> () {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>CLOSED<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1">});</span></pre></div>
+<p>This event SHOULD be emitted once or never at all, depending on whether
+the stream ever terminates.
+It SHOULD NOT be emitted after a previous <code>close</code> event.</p>
+<p>After the stream is closed, it MUST switch to non-writable mode,
+see also <code>isWritable()</code>.</p>
+<p>This event SHOULD be emitted whenever the stream closes, irrespective of
+whether this happens implicitly due to an unrecoverable error or
+explicitly when either side closes the stream.</p>
+<p>Many common streams (such as a TCP/IP connection or a file-based stream)
+will likely choose to emit this event after flushing the buffer from
+the <code>end()</code> method, after receiving a <em>successful</em> <code>end</code> event or after
+a fatal transmission <code>error</code> event.</p>
+<p>If this stream is a <code>DuplexStreamInterface</code>, you should also notice
+how the readable side of the stream also implements a <code>close</code> event.
+In other words, after receiving this event, the stream MUST switch into
+non-writable AND non-readable mode, see also <code>isReadable()</code>.
+Note that this event should not be confused with the <code>end</code> event.</p>
+<h4>
+<a id="iswritable" class="anchor" href="#iswritable" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>isWritable()</h4>
+<p>The <code>isWritable(): bool</code> method can be used to
+check whether this stream is in a writable state (not closed already).</p>
+<p>This method can be used to check if the stream still accepts writing
+any data or if it is ended or closed already.
+Writing any data to a non-writable stream is a NO-OP:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c1">assert</span>(<span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>isWritable() <span class="pl-k">===</span> <span class="pl-c1">false</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>end<span class="pl-pds">'</span></span>); <span class="pl-c"><span class="pl-c">//</span> NO-OP</span></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>end(<span class="pl-s"><span class="pl-pds">'</span>end<span class="pl-pds">'</span></span>); <span class="pl-c"><span class="pl-c">//</span> NO-OP</span></span></pre></div>
+<p>A successfully opened stream always MUST start in writable mode.</p>
+<p>Once the stream ends or closes, it MUST switch to non-writable mode.
+This can happen any time, explicitly through <code>end()</code> or <code>close()</code> or
+implicitly due to a remote close or an unrecoverable transmission error.
+Once a stream has switched to non-writable mode, it MUST NOT transition
+back to writable mode.</p>
+<p>If this stream is a <code>DuplexStreamInterface</code>, you should also notice
+how the readable side of the stream also implements an <code>isReadable()</code>
+method. Unless this is a half-open duplex stream, they SHOULD usually
+have the same return value.</p>
+<h4>
+<a id="write" class="anchor" href="#write" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>write()</h4>
+<p>The <code>write(mixed $data): bool</code> method can be used to
+write some data into the stream.</p>
+<p>A successful write MUST be confirmed with a boolean <code>true</code>, which means
+that either the data was written (flushed) immediately or is buffered and
+scheduled for a future write. Note that this interface gives you no
+control over explicitly flushing the buffered data, as finding the
+appropriate time for this is beyond the scope of this interface and left
+up to the implementation of this interface.</p>
+<p>Many common streams (such as a TCP/IP connection or file-based stream)
+may choose to buffer all given data and schedule a future flush by using
+an underlying EventLoop to check when the resource is actually writable.</p>
+<p>If a stream cannot handle writing (or flushing) the data, it SHOULD emit
+an <code>error</code> event and MAY <code>close()</code> the stream if it can not recover from
+this error.</p>
+<p>If the internal buffer is full after adding <code>$data</code>, then <code>write()</code>
+SHOULD return <code>false</code>, indicating that the caller should stop sending
+data until the buffer drains.
+The stream SHOULD send a <code>drain</code> event once the buffer is ready to accept
+more data.</p>
+<p>Similarly, if the the stream is not writable (already in a closed state)
+it MUST NOT process the given <code>$data</code> and SHOULD return <code>false</code>,
+indicating that the caller should stop sending data.</p>
+<p>The given <code>$data</code> argument MAY be of mixed type, but it's usually
+recommended it SHOULD be a <code>string</code> value or MAY use a type that allows
+representation as a <code>string</code> for maximum compatibility.</p>
+<p>Many common streams (such as a TCP/IP connection or a file-based stream)
+will only accept the raw (binary) payload data that is transferred over
+the wire as chunks of <code>string</code> values.</p>
+<p>Due to the stream-based nature of this, the sender may send any number
+of chunks with varying sizes. There are no guarantees that these chunks
+will be received with the exact same framing the sender intended to send.
+In other words, many lower-level protocols (such as TCP/IP) transfer the
+data in chunks that may be anywhere between single-byte values to several
+dozens of kilobytes. You may want to apply a higher-level protocol to
+these low-level data chunks in order to achieve proper message framing.</p>
+<h4>
+<a id="end" class="anchor" href="#end" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>end()</h4>
+<p>The <code>end(mixed $data = null): void</code> method can be used to
+successfully end the stream (after optionally sending some final data).</p>
+<p>This method can be used to successfully end the stream, i.e. close
+the stream after sending out all data that is currently buffered.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>hello<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>world<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>end();</span></pre></div>
+<p>If there's no data currently buffered and nothing to be flushed, then
+this method MAY <code>close()</code> the stream immediately.</p>
+<p>If there's still data in the buffer that needs to be flushed first, then
+this method SHOULD try to write out this data and only then <code>close()</code>
+the stream.
+Once the stream is closed, it SHOULD emit a <code>close</code> event.</p>
+<p>Note that this interface gives you no control over explicitly flushing
+the buffered data, as finding the appropriate time for this is beyond the
+scope of this interface and left up to the implementation of this
+interface.</p>
+<p>Many common streams (such as a TCP/IP connection or file-based stream)
+may choose to buffer all given data and schedule a future flush by using
+an underlying EventLoop to check when the resource is actually writable.</p>
+<p>You can optionally pass some final data that is written to the stream
+before ending the stream. If a non-<code>null</code> value is given as <code>$data</code>, then
+this method will behave just like calling <code>write($data)</code> before ending
+with no data.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> shorter version</span></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>end(<span class="pl-s"><span class="pl-pds">'</span>bye<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> same as longer version</span></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>bye<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>end();</span></pre></div>
+<p>After calling this method, the stream MUST switch into a non-writable
+mode, see also <code>isWritable()</code>.
+This means that no further writes are possible, so any additional
+<code>write()</code> or <code>end()</code> calls have no effect.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>end();</span>
+<span class="pl-s1"><span class="pl-c1">assert</span>(<span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>isWritable() <span class="pl-k">===</span> <span class="pl-c1">false</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>nope<span class="pl-pds">'</span></span>); <span class="pl-c"><span class="pl-c">//</span> NO-OP</span></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>end(); <span class="pl-c"><span class="pl-c">//</span> NO-OP</span></span></pre></div>
+<p>If this stream is a <code>DuplexStreamInterface</code>, calling this method SHOULD
+also end its readable side, unless the stream supports half-open mode.
+In other words, after calling this method, these streams SHOULD switch
+into non-writable AND non-readable mode, see also <code>isReadable()</code>.
+This implies that in this case, the stream SHOULD NOT emit any <code>data</code>
+or <code>end</code> events anymore.
+Streams MAY choose to use the <code>pause()</code> method logic for this, but
+special care may have to be taken to ensure a following call to the
+<code>resume()</code> method SHOULD NOT continue emitting readable events.</p>
+<p>Note that this method should not be confused with the <code>close()</code> method.</p>
+<h4>
+<a id="close-1" class="anchor" href="#close-1" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>close()</h4>
+<p>The <code>close(): void</code> method can be used to
+close the stream (forcefully).</p>
+<p>This method can be used to forcefully close the stream, i.e. close
+the stream without waiting for any buffered data to be flushed.
+If there's still data in the buffer, this data SHOULD be discarded.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>close();</span></pre></div>
+<p>Once the stream is closed, it SHOULD emit a <code>close</code> event.
+Note that this event SHOULD NOT be emitted more than once, in particular
+if this method is called multiple times.</p>
+<p>After calling this method, the stream MUST switch into a non-writable
+mode, see also <code>isWritable()</code>.
+This means that no further writes are possible, so any additional
+<code>write()</code> or <code>end()</code> calls have no effect.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>close();</span>
+<span class="pl-s1"><span class="pl-c1">assert</span>(<span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>isWritable() <span class="pl-k">===</span> <span class="pl-c1">false</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>nope<span class="pl-pds">'</span></span>); <span class="pl-c"><span class="pl-c">//</span> NO-OP</span></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>end(); <span class="pl-c"><span class="pl-c">//</span> NO-OP</span></span></pre></div>
+<p>Note that this method should not be confused with the <code>end()</code> method.
+Unlike the <code>end()</code> method, this method does not take care of any existing
+buffers and simply discards any buffer contents.
+Likewise, this method may also be called after calling <code>end()</code> on a
+stream in order to stop waiting for the stream to flush its final data.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>end();</span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>addTimer(<span class="pl-c1">1.0</span>, <span class="pl-k">function</span> () <span class="pl-k">use</span> (<span class="pl-smi">$stream</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>close();</span>
+<span class="pl-s1">});</span></pre></div>
+<p>If this stream is a <code>DuplexStreamInterface</code>, you should also notice
+how the readable side of the stream also implements a <code>close()</code> method.
+In other words, after calling this method, the stream MUST switch into
+non-writable AND non-readable mode, see also <code>isReadable()</code>.</p>
+<h3>
+<a id="duplexstreaminterface" class="anchor" href="#duplexstreaminterface" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>DuplexStreamInterface</h3>
+<p>The <code>DuplexStreamInterface</code> is responsible for providing an interface for
+duplex streams (both readable and writable).</p>
+<p>It builds on top of the existing interfaces for readable and writable streams
+and follows the exact same method and event semantics.
+If you're new to this concept, you should look into the
+<code>ReadableStreamInterface</code> and <code>WritableStreamInterface</code> first.</p>
+<p>Besides defining a few methods, this interface also implements the
+<code>EventEmitterInterface</code> which allows you to react to the same events defined
+on the <code>ReadbleStreamInterface</code> and <code>WritableStreamInterface</code>.</p>
+<p>The event callback functions MUST be a valid <code>callable</code> that obeys strict
+parameter definitions and MUST accept event parameters exactly as documented.
+The event callback functions MUST NOT throw an <code>Exception</code>.
+The return value of the event callback functions will be ignored and has no
+effect, so for performance reasons you're recommended to not return any
+excessive data structures.</p>
+<p>Every implementation of this interface MUST follow these event semantics in
+order to be considered a well-behaving stream.</p>
+<blockquote>
+<p>Note that higher-level implementations of this interface may choose to
+define additional events with dedicated semantics not defined as part of
+this low-level stream specification. Conformance with these event semantics
+is out of scope for this interface, so you may also have to refer to the
+documentation of such a higher-level implementation.</p>
+</blockquote>
+<p>See also <a href="#readablestreaminterface"><code>ReadableStreamInterface</code></a> and
+<a href="#writablestreaminterface"><code>WritableStreamInterface</code></a> for more details.</p>
+<h2>
+<a id="creating-streams" class="anchor" href="#creating-streams" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Creating streams</h2>
+<p>ReactPHP uses the concept of "streams" throughout its ecosystem, so that
+many higher-level consumers of this package only deal with
+<a href="#stream-usage">stream usage</a>.
+This implies that stream instances are most often created within some
+higher-level components and many consumers never actually have to deal with
+creating a stream instance.</p>
+<ul>
+<li>Use <a href="../socket/">react/socket</a>
+if you want to accept incoming or establish outgoing plaintext TCP/IP or
+secure TLS socket connection streams.</li>
+<li>Use <a href="../http/">react/http</a>
+if you want to receive an incoming HTTP request body streams.</li>
+<li>Use <a href="../child-process/">react/child-process</a>
+if you want to communicate with child processes via process pipes such as
+STDIN, STDOUT, STDERR etc.</li>
+<li>Use experimental <a href="https://github.com/reactphp/filesystem">react/filesystem</a>
+if you want to read from / write to the filesystem.</li>
+<li>See also the last chapter for <a href="#more">more real-world applications</a>.</li>
+</ul>
+<p>However, if you are writing a lower-level component or want to create a stream
+instance from a stream resource, then the following chapter is for you.</p>
+<blockquote>
+<p>Note that the following examples use <code>fopen()</code> and <code>stream_socket_client()</code>
+for illustration purposes only.
+These functions SHOULD NOT be used in a truly async program because each call
+may take several seconds to complete and would block the EventLoop otherwise.
+Additionally, the <code>fopen()</code> call will return a file handle on some platforms
+which may or may not be supported by all EventLoop implementations.
+As an alternative, you may want to use higher-level libraries listed above.</p>
+</blockquote>
+<h3>
+<a id="readableresourcestream" class="anchor" href="#readableresourcestream" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>ReadableResourceStream</h3>
+<p>The <code>ReadableResourceStream</code> is a concrete implementation of the
+<a href="#readablestreaminterface"><code>ReadableStreamInterface</code></a> for PHP's stream resources.</p>
+<p>This can be used to represent a read-only resource like a file stream opened in
+readable mode or a stream such as <code>STDIN</code>:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">ReadableResourceStream</span>(<span class="pl-c1">STDIN</span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>data<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-smi">$chunk</span>) {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-smi">$chunk</span>;</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>end<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> () {</span>
+<span class="pl-s1">    <span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">'</span>END<span class="pl-pds">'</span></span>;</span>
+<span class="pl-s1">});</span></pre></div>
+<p>See also <a href="#readablestreaminterface"><code>ReadableStreamInterface</code></a> for more details.</p>
+<p>The first parameter given to the constructor MUST be a valid stream resource
+that is opened in reading mode (e.g. <code>fopen()</code> mode <code>r</code>).
+Otherwise, it will throw an <code>InvalidArgumentException</code>:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> throws InvalidArgumentException</span></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">ReadableResourceStream</span>(<span class="pl-c1">false</span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+<p>See also the <a href="#readableresourcestream"><code>DuplexResourceStream</code></a> for read-and-write
+stream resources otherwise.</p>
+<p>Internally, this class tries to enable non-blocking mode on the stream resource
+which may not be supported for all stream resources.
+Most notably, this is not supported by pipes on Windows (STDIN etc.).
+If this fails, it will throw a <code>RuntimeException</code>:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> throws RuntimeException on Windows</span></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">ReadableResourceStream</span>(<span class="pl-c1">STDIN</span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+<p>Once the constructor is called with a valid stream resource, this class will
+take care of the underlying stream resource.
+You SHOULD only use its public API and SHOULD NOT interfere with the underlying
+stream resource manually.</p>
+<p>This class takes an optional <code>int|null $readChunkSize</code> parameter that controls
+the maximum buffer size in bytes to read at once from the stream.
+You can use a <code>null</code> value here in order to apply its default value.
+This value SHOULD NOT be changed unless you know what you're doing.
+This can be a positive number which means that up to X bytes will be read
+at once from the underlying stream resource. Note that the actual number
+of bytes read may be lower if the stream resource has less than X bytes
+currently available.
+This can be <code>-1</code> which means "read everything available" from the
+underlying stream resource.
+This should read until the stream resource is not readable anymore
+(i.e. underlying buffer drained), note that this does not neccessarily
+mean it reached EOF.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">ReadableResourceStream</span>(<span class="pl-c1">STDIN</span>, <span class="pl-smi">$loop</span>, <span class="pl-c1">8192</span>);</span></pre></div>
+<blockquote>
+<p>PHP bug warning: If the PHP process has explicitly been started without a
+<code>STDIN</code> stream, then trying to read from <code>STDIN</code> may return data from
+another stream resource. This does not happen if you start this with an empty
+stream like <code>php test.php &lt; /dev/null</code> instead of <code>php test.php &lt;&amp;-</code>.
+See <a href="https://github.com/reactphp/stream/issues/81">#81</a> for more details.</p>
+</blockquote>
+<h3>
+<a id="writableresourcestream" class="anchor" href="#writableresourcestream" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>WritableResourceStream</h3>
+<p>The <code>WritableResourceStream</code> is a concrete implementation of the
+<a href="#writablestreaminterface"><code>WritableStreamInterface</code></a> for PHP's stream resources.</p>
+<p>This can be used to represent a write-only resource like a file stream opened in
+writable mode or a stream such as <code>STDOUT</code> or <code>STDERR</code>:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">WritableResourceStream</span>(<span class="pl-c1">STDOUT</span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>hello!<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>end();</span></pre></div>
+<p>See also <a href="#writablestreaminterface"><code>WritableStreamInterface</code></a> for more details.</p>
+<p>The first parameter given to the constructor MUST be a valid stream resource
+that is opened for writing.
+Otherwise, it will throw an <code>InvalidArgumentException</code>:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> throws InvalidArgumentException</span></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">WritableResourceStream</span>(<span class="pl-c1">false</span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+<p>See also the <a href="#readableresourcestream"><code>DuplexResourceStream</code></a> for read-and-write
+stream resources otherwise.</p>
+<p>Internally, this class tries to enable non-blocking mode on the stream resource
+which may not be supported for all stream resources.
+Most notably, this is not supported by pipes on Windows (STDOUT, STDERR etc.).
+If this fails, it will throw a <code>RuntimeException</code>:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> throws RuntimeException on Windows</span></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">WritableResourceStream</span>(<span class="pl-c1">STDOUT</span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+<p>Once the constructor is called with a valid stream resource, this class will
+take care of the underlying stream resource.
+You SHOULD only use its public API and SHOULD NOT interfere with the underlying
+stream resource manually.</p>
+<p>Any <code>write()</code> calls to this class will not be performed instantly, but will
+be performed asynchronously, once the EventLoop reports the stream resource is
+ready to accept data.
+For this, it uses an in-memory buffer string to collect all outstanding writes.
+This buffer has a soft-limit applied which defines how much data it is willing
+to accept before the caller SHOULD stop sending further data.</p>
+<p>This class takes an optional <code>int|null $writeBufferSoftLimit</code> parameter that controls
+this maximum buffer size in bytes.
+You can use a <code>null</code> value here in order to apply its default value.
+This value SHOULD NOT be changed unless you know what you're doing.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">WritableResourceStream</span>(<span class="pl-c1">STDOUT</span>, <span class="pl-smi">$loop</span>, <span class="pl-c1">8192</span>);</span></pre></div>
+<p>This class takes an optional <code>int|null $writeChunkSize</code> parameter that controls
+this maximum buffer size in bytes to write at once to the stream.
+You can use a <code>null</code> value here in order to apply its default value.
+This value SHOULD NOT be changed unless you know what you're doing.
+This can be a positive number which means that up to X bytes will be written
+at once to the underlying stream resource. Note that the actual number
+of bytes written may be lower if the stream resource has less than X bytes
+currently available.
+This can be <code>-1</code> which means "write everything available" to the
+underlying stream resource.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">WritableResourceStream</span>(<span class="pl-c1">STDOUT</span>, <span class="pl-smi">$loop</span>, <span class="pl-c1">null</span>, <span class="pl-c1">8192</span>);</span></pre></div>
+<p>See also <a href="#write"><code>write()</code></a> for more details.</p>
+<h3>
+<a id="duplexresourcestream" class="anchor" href="#duplexresourcestream" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>DuplexResourceStream</h3>
+<p>The <code>DuplexResourceStream</code> is a concrete implementation of the
+<a href="#duplexstreaminterface"><code>DuplexStreamInterface</code></a> for PHP's stream resources.</p>
+<p>This can be used to represent a read-and-write resource like a file stream opened
+in read and write mode mode or a stream such as a TCP/IP connection:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$conn</span> <span class="pl-k">=</span> <span class="pl-c1">stream_socket_client</span>(<span class="pl-s"><span class="pl-pds">'</span>tcp://google.com:80<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">DuplexResourceStream</span>(<span class="pl-smi">$conn</span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>hello!<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"><span class="pl-smi">$stream</span><span class="pl-k">-&gt;</span>end();</span></pre></div>
+<p>See also <a href="#duplexstreaminterface"><code>DuplexStreamInterface</code></a> for more details.</p>
+<p>The first parameter given to the constructor MUST be a valid stream resource
+that is opened for reading <em>and</em> writing.
+Otherwise, it will throw an <code>InvalidArgumentException</code>:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> throws InvalidArgumentException</span></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">DuplexResourceStream</span>(<span class="pl-c1">false</span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+<p>See also the <a href="#readableresourcestream"><code>ReadableResourceStream</code></a> for read-only
+and the <a href="#writableresourcestream"><code>WritableResourceStream</code></a> for write-only
+stream resources otherwise.</p>
+<p>Internally, this class tries to enable non-blocking mode on the stream resource
+which may not be supported for all stream resources.
+Most notably, this is not supported by pipes on Windows (STDOUT, STDERR etc.).
+If this fails, it will throw a <code>RuntimeException</code>:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-c"><span class="pl-c">//</span> throws RuntimeException on Windows</span></span>
+<span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">DuplexResourceStream</span>(<span class="pl-c1">STDOUT</span>, <span class="pl-smi">$loop</span>);</span></pre></div>
+<p>Once the constructor is called with a valid stream resource, this class will
+take care of the underlying stream resource.
+You SHOULD only use its public API and SHOULD NOT interfere with the underlying
+stream resource manually.</p>
+<p>This class takes an optional <code>int|null $readChunkSize</code> parameter that controls
+the maximum buffer size in bytes to read at once from the stream.
+You can use a <code>null</code> value here in order to apply its default value.
+This value SHOULD NOT be changed unless you know what you're doing.
+This can be a positive number which means that up to X bytes will be read
+at once from the underlying stream resource. Note that the actual number
+of bytes read may be lower if the stream resource has less than X bytes
+currently available.
+This can be <code>-1</code> which means "read everything available" from the
+underlying stream resource.
+This should read until the stream resource is not readable anymore
+(i.e. underlying buffer drained), note that this does not neccessarily
+mean it reached EOF.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$conn</span> <span class="pl-k">=</span> <span class="pl-c1">stream_socket_client</span>(<span class="pl-s"><span class="pl-pds">'</span>tcp://google.com:80<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">DuplexResourceStream</span>(<span class="pl-smi">$conn</span>, <span class="pl-smi">$loop</span>, <span class="pl-c1">8192</span>);</span></pre></div>
+<p>Any <code>write()</code> calls to this class will not be performed instantly, but will
+be performed asynchronously, once the EventLoop reports the stream resource is
+ready to accept data.
+For this, it uses an in-memory buffer string to collect all outstanding writes.
+This buffer has a soft-limit applied which defines how much data it is willing
+to accept before the caller SHOULD stop sending further data.</p>
+<p>This class takes another optional <code>WritableStreamInterface|null $buffer</code> parameter
+that controls this write behavior of this stream.
+You can use a <code>null</code> value here in order to apply its default value.
+This value SHOULD NOT be changed unless you know what you're doing.</p>
+<p>If you want to change the write buffer soft limit, you can pass an instance of
+<a href="#writableresourcestream"><code>WritableResourceStream</code></a> like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$conn</span> <span class="pl-k">=</span> <span class="pl-c1">stream_socket_client</span>(<span class="pl-s"><span class="pl-pds">'</span>tcp://google.com:80<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"><span class="pl-smi">$buffer</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">WritableResourceStream</span>(<span class="pl-smi">$conn</span>, <span class="pl-smi">$loop</span>, <span class="pl-c1">8192</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$stream</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">DuplexResourceStream</span>(<span class="pl-smi">$conn</span>, <span class="pl-smi">$loop</span>, <span class="pl-c1">null</span>, <span class="pl-smi">$buffer</span>);</span></pre></div>
+<p>See also <a href="#writableresourcestream"><code>WritableResourceStream</code></a> for more details.</p>
+<h3>
+<a id="throughstream" class="anchor" href="#throughstream" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>ThroughStream</h3>
+<p>The <code>ThroughStream</code> implements the
+<a href="#duplexstreaminterface"><code>DuplexStreamInterface</code></a> and will simply pass any data
+you write to it through to its readable end.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$through</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">ThroughStream</span>();</span>
+<span class="pl-s1"><span class="pl-smi">$through</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>data<span class="pl-pds">'</span></span>, <span class="pl-smi">$this</span><span class="pl-k">-&gt;</span>expectCallableOnceWith(<span class="pl-s"><span class="pl-pds">'</span>hello<span class="pl-pds">'</span></span>));</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$through</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>hello<span class="pl-pds">'</span></span>);</span></pre></div>
+<p>Similarly, the <a href="#end"><code>end()</code> method</a> will end the stream and emit an
+<a href="#end-event"><code>end</code> event</a> and then <a href="#close-1"><code>close()</code></a> the stream.
+The <a href="#close-1"><code>close()</code> method</a> will close the stream and emit a
+<a href="#close-event"><code>close</code> event</a>.
+Accordingly, this is can also be used in a <a href="#pipe"><code>pipe()</code></a> context like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$through</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">ThroughStream</span>();</span>
+<span class="pl-s1"><span class="pl-smi">$source</span><span class="pl-k">-&gt;</span>pipe(<span class="pl-smi">$through</span>)<span class="pl-k">-&gt;</span>pipe(<span class="pl-smi">$dest</span>);</span></pre></div>
+<p>Optionally, its constructor accepts any callable function which will then be
+used to <em>filter</em> any data written to it. This function receives a single data
+argument as passed to the writable side and must return the data as it will be
+passed to its readable end:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$through</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">ThroughStream</span>(<span class="pl-s"><span class="pl-pds">'</span>strtoupper<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1"><span class="pl-smi">$source</span><span class="pl-k">-&gt;</span>pipe(<span class="pl-smi">$through</span>)<span class="pl-k">-&gt;</span>pipe(<span class="pl-smi">$dest</span>);</span></pre></div>
+<p>Note that this class makes no assumptions about any data types. This can be
+used to convert data, for example for transforming any structured data into
+a newline-delimited JSON (NDJSON) stream like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$through</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">ThroughStream</span>(<span class="pl-k">function</span> (<span class="pl-smi">$data</span>) {</span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-c1">json_encode</span>(<span class="pl-smi">$data</span>) <span class="pl-k">.</span> <span class="pl-c1">PHP_EOL</span>;</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"><span class="pl-smi">$through</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>data<span class="pl-pds">'</span></span>, <span class="pl-smi">$this</span><span class="pl-k">-&gt;</span>expectCallableOnceWith(<span class="pl-s"><span class="pl-pds">"</span>[2, true]<span class="pl-cce">\n</span><span class="pl-pds">"</span></span>));</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$through</span><span class="pl-k">-&gt;</span>write(<span class="pl-c1">array</span>(<span class="pl-c1">2</span>, <span class="pl-c1">true</span>));</span></pre></div>
+<p>The callback function is allowed to throw an <code>Exception</code>. In this case,
+the stream will emit an <code>error</code> event and then <a href="#close-1"><code>close()</code></a> the stream.</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$through</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">ThroughStream</span>(<span class="pl-k">function</span> (<span class="pl-smi">$data</span>) {</span>
+<span class="pl-s1">    <span class="pl-k">if</span> (<span class="pl-k">!</span><span class="pl-c1">is_string</span>(<span class="pl-smi">$data</span>)) {</span>
+<span class="pl-s1">        <span class="pl-k">throw</span> <span class="pl-k">new</span> <span class="pl-c1">\UnexpectedValueException</span>(<span class="pl-s"><span class="pl-pds">'</span>Only strings allowed<span class="pl-pds">'</span></span>);</span>
+<span class="pl-s1">    }</span>
+<span class="pl-s1">    <span class="pl-k">return</span> <span class="pl-smi">$data</span>;</span>
+<span class="pl-s1">});</span>
+<span class="pl-s1"><span class="pl-smi">$through</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>error<span class="pl-pds">'</span></span>, <span class="pl-smi">$this</span><span class="pl-k">-&gt;</span>expectCallableOnce()));</span>
+<span class="pl-s1"><span class="pl-smi">$through</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>close<span class="pl-pds">'</span></span>, <span class="pl-smi">$this</span><span class="pl-k">-&gt;</span>expectCallableOnce()));</span>
+<span class="pl-s1"><span class="pl-smi">$through</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>data<span class="pl-pds">'</span></span>, <span class="pl-smi">$this</span><span class="pl-k">-&gt;</span>expectCallableNever()));</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$through</span><span class="pl-k">-&gt;</span>write(<span class="pl-c1">2</span>);</span></pre></div>
+<h3>
+<a id="compositestream" class="anchor" href="#compositestream" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>CompositeStream</h3>
+<p>The <code>CompositeStream</code> implements the
+<a href="#duplexstreaminterface"><code>DuplexStreamInterface</code></a> and can be used to create a
+single duplex stream from two individual streams implementing
+<a href="#readablestreaminterface"><code>ReadableStreamInterface</code></a> and
+<a href="#writablestreaminterface"><code>WritableStreamInterface</code></a> respectively.</p>
+<p>This is useful for some APIs which may require a single
+<a href="#duplexstreaminterface"><code>DuplexStreamInterface</code></a> or simply because it's often
+more convenient to work with a single stream instance like this:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$stdin</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">ReadableResourceStream</span>(<span class="pl-c1">STDIN</span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$stdout</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">WritableResourceStream</span>(<span class="pl-c1">STDOUT</span>, <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$stdio</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">CompositeStream</span>(<span class="pl-smi">$stdin</span>, <span class="pl-smi">$stdout</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$stdio</span><span class="pl-k">-&gt;</span>on(<span class="pl-s"><span class="pl-pds">'</span>data<span class="pl-pds">'</span></span>, <span class="pl-k">function</span> (<span class="pl-smi">$chunk</span>) <span class="pl-k">use</span> (<span class="pl-smi">$stdio</span>) {</span>
+<span class="pl-s1">    <span class="pl-smi">$stdio</span><span class="pl-k">-&gt;</span>write(<span class="pl-s"><span class="pl-pds">'</span>You said: <span class="pl-pds">'</span></span> <span class="pl-k">.</span> <span class="pl-smi">$chunk</span>);</span>
+<span class="pl-s1">});</span></pre></div>
+<p>This is a well-behaving stream which forwards all stream events from the
+underlying streams and forwards all streams calls to the underlying streams.</p>
+<p>If you <code>write()</code> to the duplex stream, it will simply <code>write()</code> to the
+writable side and return its status.</p>
+<p>If you <code>end()</code> the duplex stream, it will <code>end()</code> the writable side and will
+<code>pause()</code> the readable side.</p>
+<p>If you <code>close()</code> the duplex stream, both input streams will be closed.
+If either of the two input streams emits a <code>close</code> event, the duplex stream
+will also close.
+If either of the two input streams is already closed while constructing the
+duplex stream, it will <code>close()</code> the other side and return a closed stream.</p>
+<h2>
+<a id="usage" class="anchor" href="#usage" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Usage</h2>
+<p>The following example can be used to pipe the contents of a source file into
+a destination file without having to ever read the whole file into memory:</p>
+<div class="highlight highlight-text-html-php"><pre><span class="pl-s1"><span class="pl-smi">$loop</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\EventLoop\</span><span class="pl-c1">StreamSelectLoop</span>;</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$source</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Stream\</span><span class="pl-c1">ReadableResourceStream</span>(<span class="pl-c1">fopen</span>(<span class="pl-s"><span class="pl-pds">'</span>source.txt<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>r<span class="pl-pds">'</span></span>), <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"><span class="pl-smi">$dest</span> <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">React\Stream\</span><span class="pl-c1">WritableResourceStream</span>(<span class="pl-c1">fopen</span>(<span class="pl-s"><span class="pl-pds">'</span>destination.txt<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>w<span class="pl-pds">'</span></span>), <span class="pl-smi">$loop</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$source</span><span class="pl-k">-&gt;</span>pipe(<span class="pl-smi">$dest</span>);</span>
+<span class="pl-s1"></span>
+<span class="pl-s1"><span class="pl-smi">$loop</span><span class="pl-k">-&gt;</span>run();</span></pre></div>
+<blockquote>
+<p>Note that this example uses <code>fopen()</code> for illustration purposes only.
+This should not be used in a truly async program because the filesystem is
+inherently blocking and each call could potentially take several seconds.
+See also <a href="#creating-streams">creating streams</a> for more sophisticated
+examples.</p>
+</blockquote>
+<h2>
+<a id="install" class="anchor" href="#install" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Install</h2>
+<p>The recommended way to install this library is <a href="https://getcomposer.org" rel="nofollow">through Composer</a>.
+<a href="https://getcomposer.org/doc/00-intro.md" rel="nofollow">New to Composer?</a></p>
+<p>This project follows <a href="https://semver.org/" rel="nofollow">SemVer</a>.
+This will install the latest supported version:</p>
+<div class="highlight highlight-source-shell"><pre>$ composer require react/stream:^1.1.1</pre></div>
+<p>See also the <a href="changelog.html">CHANGELOG</a> for details about version upgrades.</p>
+<p>This project aims to run on any platform and thus does not require any PHP
+extensions and supports running on legacy PHP 5.3 through current PHP 7+ and HHVM.
+It's <em>highly recommended to use PHP 7+</em> for this project due to its vast
+performance improvements.</p>
+<h2>
+<a id="tests" class="anchor" href="#tests" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Tests</h2>
+<p>To run the test suite, you first need to clone this repo and then install all
+dependencies <a href="https://getcomposer.org" rel="nofollow">through Composer</a>:</p>
+<div class="highlight highlight-source-shell"><pre>$ composer install</pre></div>
+<p>To run the test suite, go to the project root and run:</p>
+<div class="highlight highlight-source-shell"><pre>$ php vendor/bin/phpunit</pre></div>
+<p>The test suite also contains a number of functional integration tests that rely
+on a stable internet connection.
+If you do not want to run these, they can simply be skipped like this:</p>
+<div class="highlight highlight-source-shell"><pre>$ php vendor/bin/phpunit --exclude-group internet</pre></div>
+<h2>
+<a id="license" class="anchor" href="#license" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>License</h2>
+<p>MIT, see <a href="license.html">LICENSE file</a>.</p>
+<h2>
+<a id="more" class="anchor" href="#more" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>More</h2>
+<ul>
+<li>See <a href="#creating-streams">creating streams</a> for more information on how streams
+are created in real-world applications.</li>
+<li>See our <a href="https://github.com/reactphp/react/wiki/Users">users wiki</a> and the
+<a href="https://packagist.org/packages/react/stream/dependents" rel="nofollow">dependents on Packagist</a>
+for a list of packages that use streams in real-world applications.</li>
+</ul>
+                                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../stream/">Stream</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v1.1.1
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/stream#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v1.1.0#readme" class="version-selector__version">
+                                                    v1.1.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v1.0.0#readme" class="version-selector__version">
+                                                    v1.0.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.7.7#readme" class="version-selector__version">
+                                                    v0.7.7
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.7.6#readme" class="version-selector__version">
+                                                    v0.7.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.7.5#readme" class="version-selector__version">
+                                                    v0.7.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.7.4#readme" class="version-selector__version">
+                                                    v0.7.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.7.3#readme" class="version-selector__version">
+                                                    v0.7.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.7.2#readme" class="version-selector__version">
+                                                    v0.7.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.7.1#readme" class="version-selector__version">
+                                                    v0.7.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.7.0#readme" class="version-selector__version">
+                                                    v0.7.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.6.0#readme" class="version-selector__version">
+                                                    v0.6.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.5.0#readme" class="version-selector__version">
+                                                    v0.5.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.4.6#readme" class="version-selector__version">
+                                                    v0.4.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.4.5#readme" class="version-selector__version">
+                                                    v0.4.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.4.4#readme" class="version-selector__version">
+                                                    v0.4.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.4.3#readme" class="version-selector__version">
+                                                    v0.4.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.4.2#readme" class="version-selector__version">
+                                                    v0.4.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.4.1#readme" class="version-selector__version">
+                                                    v0.4.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.3.4#readme" class="version-selector__version">
+                                                    v0.3.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.4.0#readme" class="version-selector__version">
+                                                    v0.4.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.3.3#readme" class="version-selector__version">
+                                                    v0.3.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.3.2#readme" class="version-selector__version">
+                                                    v0.3.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.3.1#readme" class="version-selector__version">
+                                                    v0.3.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.3.0#readme" class="version-selector__version">
+                                                    v0.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.2.6#readme" class="version-selector__version">
+                                                    v0.2.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.2.5#readme" class="version-selector__version">
+                                                    v0.2.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.2.4#readme" class="version-selector__version">
+                                                    v0.2.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.2.3#readme" class="version-selector__version">
+                                                    v0.2.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.2.2#readme" class="version-selector__version">
+                                                    v0.2.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.2.1#readme" class="version-selector__version">
+                                                    v0.2.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.2.0#readme" class="version-selector__version">
+                                                    v0.2.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.1.1#readme" class="version-selector__version">
+                                                    v0.1.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.1.0#readme" class="version-selector__version">
+                                                    v0.1.0
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/stream">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../stream/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../stream/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/stream:^1.1.1</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (172 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (52 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/igorw">
+                                    <img src="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=80 2x" alt="igorw" title="igorw (43 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cboden">
+                                    <img src="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=80 2x" alt="cboden" title="cboden (43 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (12 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/steverhoades">
+                                    <img src="https://avatars0.githubusercontent.com/u/1146668?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/1146668?v=4&amp;s=80 2x" alt="steverhoades" title="steverhoades (4 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/arnaud-lb">
+                                    <img src="https://avatars3.githubusercontent.com/u/365207?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/365207?v=4&amp;s=80 2x" alt="arnaud-lb" title="arnaud-lb (3 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/carusogabriel">
+                                    <img src="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=80 2x" alt="carusogabriel" title="carusogabriel (3 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/lysenkobv">
+                                    <img src="https://avatars3.githubusercontent.com/u/1250142?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/1250142?v=4&amp;s=80 2x" alt="lysenkobv" title="lysenkobv (3 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jmalloc">
+                                    <img src="https://avatars3.githubusercontent.com/u/761536?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/761536?v=4&amp;s=80 2x" alt="jmalloc" title="jmalloc (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/nawarian">
+                                    <img src="https://avatars2.githubusercontent.com/u/3905582?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/3905582?v=4&amp;s=80 2x" alt="nawarian" title="nawarian (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/pulyavin">
+                                    <img src="https://avatars3.githubusercontent.com/u/9364583?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/9364583?v=4&amp;s=80 2x" alt="pulyavin" title="pulyavin (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/DaveRandom">
+                                    <img src="https://avatars1.githubusercontent.com/u/2396425?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/2396425?v=4&amp;s=80 2x" alt="DaveRandom" title="DaveRandom (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/docteurklein">
+                                    <img src="https://avatars3.githubusercontent.com/u/109846?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/109846?v=4&amp;s=80 2x" alt="docteurklein" title="docteurklein (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/andig">
+                                    <img src="https://avatars1.githubusercontent.com/u/184815?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/184815?v=4&amp;s=80 2x" alt="andig" title="andig (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-stream-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-stream-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,1 6,1 12,1 18,1 24,1 30,1 36,1 42,1 48,1 54,1 60,1 66,1 72,1 78,1 84,1 90,1 96,1 102,1 108,1 114,1 120,1 126,1 132,1 138,1 144,1 150,1 156,1 162,1 168,1 174,3 180,1 186,1 192,3 198,1 204,1 210,1 216,1 222,1 228,1 234,1 240,1 246,1 252,1 258,1 264,1 270,1 276,1 282,1 288,6 294,1 300,1 306,1" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-stream-participation-gradient);mask:url(#reactphp-stream-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
diff --git a/stream/license.html b/stream/license.html
new file mode 100644
index 000000000..3da5ef2ff
--- /dev/null
+++ b/stream/license.html
@@ -0,0 +1,567 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="x-ua-compatible" content="ie=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+        <title>Stream: License - ReactPHP</title>
+
+        <meta name="description" content="Event-driven readable and writable streams for non-blocking I/O in ReactPHP.">
+
+        <link rel="apple-touch-icon" sizes="180x180" href="https://reactphp.org/apple-touch-icon.png">
+        <link rel="icon" type="image/png" sizes="32x32" href="https://reactphp.org/favicon-32x32.png">
+        <link rel="manifest" href="https://reactphp.org/manifest.json">
+        <link rel="mask-icon" href="https://reactphp.org/safari-pinned-tab.svg" color="#4f5b93">
+        <meta name="apple-mobile-web-app-title" content="ReactPHP">
+        <meta name="application-name" content="ReactPHP">
+        <meta name="theme-color" content="#f4f3f1">
+        <meta name="msapplication-config" content="https://reactphp.org/browserconfig.xml" />
+
+        <meta property="og:image" content="https://reactphp.org/og-image.png">
+
+            <link rel="preload" href="../assets/sourcesanspro-regular.19ca4d35.woff" as="font" type="font/woff" crossorigin>
+        <link rel="preload" href="../assets/sourcesanspro-bold.be4ba3dd.woff" as="font" type="font/woff" crossorigin>
+
+        <script>window.__assets = '../assets/';</script>
+        <script>!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f<i.length;f++)o=i[f],Object.prototype.hasOwnProperty.call(a,o)&&a[o]&&d.push(a[o][0]),a[o]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(t);d.length;)d.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,o=1;o<r.length;o++){var c=r[o];0!==a[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},a={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[];o[e]?t.push(o[e]):0!==o[e]&&{3:1,4:1,5:1}[e]&&t.push(o[e]=new Promise((function(t,r){for(var n=({}[e]||e)+"."+{2:"31d6cfe0",3:"284c81ab",4:"87863994",5:"ef18ddd4"}[e]+".css",a=i.p+n,u=document.getElementsByTagName("link"),c=0;c<u.length;c++){var l=(s=u[c]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(l===n||l===a))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){var s;if((l=(s=f[c]).getAttribute("data-href"))===n||l===a)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var n=t&&t.target&&t.target.src||a,u=new Error("Loading CSS chunk "+e+" failed.\n("+n+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=n,delete o[e],d.parentNode.removeChild(d),r(u)},d.href=a,document.getElementsByTagName("head")[0].appendChild(d)})).then((function(){o[e]=0})));var r=a[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=a[e]=[t,n]}));t.push(r[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,i.nc&&c.setAttribute("nonce",i.nc),c.src=function(e){return i.p+""+({}[e]||e)+"."+{2:"0f8f4948",3:"ca2827c9",4:"7d534a7e",5:"99f8f23a"}[e]+".js"}(e);var l=new Error;u=function(t){c.onerror=c.onload=null,clearTimeout(f);var r=a[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+o+")",l.name="ChunkLoadError",l.type=n,l.request=o,r[1](l)}a[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var c=window.webpackJsonp=window.webpackJsonp||[],l=c.push.bind(c);c.push=t,c=c.slice();for(var f=0;f<c.length;f++)t(c[f]);var s=l;r()}([]);</script>
+        <style>@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:400;font-display:swap;src:local("Source Sans Pro Regular"),local("SourceSansPro-Regular"),url(../assets/sourcesanspro-regular.19ca4d35.woff) format("woff")}@font-face{font-family:Source Sans Pro;font-style:normal;font-weight:700;font-display:swap;src:local("Source Sans Pro Bold"),local("SourceSansPro-Bold"),url(../assets/sourcesanspro-bold.be4ba3dd.woff) format("woff")}@font-face{font-family:icons;src:url(../assets/icons.063d0ba7.ttf) format("truetype"),url(../assets/icons.5ea4cc5c.woff) format("woff"),url(../assets/icons.d59afb7d.svg#icons) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icons!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-hash:before{content:"\e900"}.icon-twitter:before{content:"\e901"}.icon-github:before{content:"\e902"}.icon-blog:before{content:"\e905"}.icon-earth:before{content:"\e903"}.icon-link:before{content:"\e906"}.icon-youtube:before{content:"\e904"}.icon-book:before{content:"\f007"}.icon-calendar:before{content:"\f068"}.icon-chevron-down:before{content:"\f0a3"}.icon-chevron-up:before{content:"\f0a2"}.icon-law:before{content:"\f0d8"}.icon-search:before{content:"\f02e"}.icon-x:before{content:"\f081"}.icon-feed:before{content:"\ea9b"}[class*=" icon-"],[class^=icon-]{vertical-align:-8%}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6}@media (max-width:768px){html{font-size:18px}}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}body{margin:0;color:#584b4f;color:var(--color-base);background-color:#fff}a{color:#4f5b93;color:var(--color-key)}a:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:underline}blockquote{padding:16px 16px 16px 24px;border-left:4px solid #4f5b93;border-left:4px solid var(--color-key);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.875rem}blockquote:before{content:"i";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#4f5b93;background:var(--color-key);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:24px;border-radius:50%}blockquote :last-child{margin-bottom:0}blockquote,fieldset,form,h1,h2,h3,h4,h5,h6,hr,ol,p,ul{margin:0 0 16px}ul ul{margin-bottom:0}hr{clear:both;height:0;border:0;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);padding:0}h1,h2,h3,h4,h5,h6{line-height:1;-webkit-font-smoothing:antialiased;color:#584b4f;color:var(--color-base);font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-weight:700}h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{text-decoration:none}h1{font-size:2.5rem;margin-bottom:32px;letter-spacing:-1px}h1,h1 a,h1 a:hover{color:#4f5b93;color:var(--color-key)}h1:not(:first-child){margin-top:32px}h2{font-size:2rem;margin-bottom:32px}h2,h2 a,h2 a:hover{color:#4f5b93;color:var(--color-key)}h2:not(:first-child){margin-top:32px}h3{font-size:1.5rem;margin-bottom:24px}h3,h3 a,h3 a:hover{color:#584b4f;color:var(--color-base)}h3:not(:first-child){margin-top:24px}h4{font-size:1.25rem}h4,h4 a,h4 a:hover{color:#4f5b93;color:var(--color-key)}h4:not(:first-child){margin-top:24px}@media (max-width:768px){h1{font-size:2rem}h2{font-size:1.75rem;margin-bottom:32px}}.container{padding:32px}@media (max-width:768px){.container{padding:16px}}.wrapper{max-width:1600px;margin:auto}.wrapper--medium{max-width:1280px}.wrapper--small{max-width:960px;margin:auto}.wrapper--narrow{max-width:640px}.main{width:calc(98% - 400px)}.main,.sidebar{margin-bottom:32px}.sidebar{width:calc(400px - 2%)}@media (max-width:1024px){.main,.sidebar{width:auto;margin-top:16px}}.visually-hidden{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}.grid{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center;width:102%;margin-left:-2%}.grid>*{margin-left:2%;max-width:100%}.grid--4cols>*{-ms-flex-preferred-size:23%;flex-basis:23%}.grid--3cols>*{-ms-flex-preferred-size:31.33%;flex-basis:31.33%}.grid--2cols>*{-ms-flex-preferred-size:48%;flex-basis:48%}@media (max-width:768px){.grid{-ms-flex-direction:column;flex-direction:column}.grid,.grid>*{width:100%;margin-left:0}.grid>*{-ms-flex:0 0 auto;flex:0 0 auto}}.center{text-align:center}.center h1,.center h2,.center h3,.center h4,.center h5,.center h6,.hamburger{display:inline-block}.hamburger{padding:14px 12px;height:48px;cursor:pointer;font:inherit;color:inherit;text-transform:none;background-color:transparent;border:0;margin:0;overflow:visible;outline:none}.hamburger__box{width:24px;height:16px;display:inline-block;position:relative}.hamburger__inner{display:block;top:50%;margin-top:-2px}.hamburger__inner,.hamburger__inner:after,.hamburger__inner:before{width:24px;height:3px;background-color:#584b4f;background-color:var(--color-base);border-radius:2px;position:absolute;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.15s;-o-transition-duration:.15s;transition-duration:.15s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.hamburger__inner:after,.hamburger__inner:before{content:"";display:block}.hamburger__inner:before{top:-6px}.hamburger__inner:after{bottom:-6px}.header{width:100%;background:#fefefe;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);padding:0 32px}@media (max-width:768px){.header{padding:0 16px}}.header__container{width:100%;position:relative;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.header__logo{display:block;line-height:1;padding:16px 0}.header__logo svg{display:block;width:120px;height:18px}.header__search{margin:0;position:absolute;right:48px;top:7px;z-index:799}.header__search input{width:400px}@media (max-width:768px){.header__search input{width:calc(100vw - 94px)}}.header__menu{position:absolute;right:-12px;top:0;z-index:800}.footer{background:#584b4f;background:var(--color-base);padding:32px;text-align:center;text-shadow:1px 1px 0 rgba(0,0,0,.125)}.footer .links a{color:#eae8e3;color:var(--color-background-light);text-decoration:none}.footer .links a:hover{color:#9ad8bb;color:var(--color-green-light);text-decoration:none}.iframe{position:relative;padding-bottom:56.25%;height:0;overflow:hidden;width:100%}.iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}.links{margin:0;padding:0}.links li{display:inline-block;margin:0 8px;text-decoration:none}.links li:first-child{margin-left:0}.links li:last-child{margin-right:0}.links a{display:block}.box,.links a,.links a:hover{text-decoration:none}.box{background:#f4f3f1;background:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;text-align:left;vertical-align:top;padding:24px;margin-top:0;margin-bottom:24px;color:inherit;overflow:auto;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.box:hover{background:#eae8e3;background:var(--color-background-light);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);text-decoration:none}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6,.box hr,.box ol,.box p,.box ul{margin-bottom:8px}.box h1,.box h2,.box h3,.box h4,.box h5,.box h6{color:#584b4f;color:var(--color-base)}.box :first-child{margin-top:0}.box :last-child{margin-bottom:0}.box__content{-ms-flex-positive:1;flex-grow:1;color:#584b4f;color:var(--color-base);text-decoration:none}.box__content p{font-size:.875rem}.box__content:hover{color:#584b4f;color:var(--color-base);text-decoration:none}.box__content:not(:last-child){margin-bottom:16px}.box__link{display:block;font-size:.75rem;text-decoration:none}.box__link,.box__link [class*=icon]{color:#4f5b93;color:var(--color-key)}.box__link:hover{color:#a2aacd;color:var(--color-key-light);text-decoration:none}code,pre,tt{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}code,tt{font-size:.75rem;padding:.3rem .45rem;margin:0;background-color:rgba(0,0,0,.05);border-radius:4px}code br,tt br{display:none}del code{text-decoration:inherit}pre{word-wrap:normal;text-align:left;font-size:.875rem;line-height:1.45}@media (max-width:768px){pre{font-size:.75rem}}pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.highlight{margin-bottom:16px}.highlight pre{margin-bottom:0;word-break:normal}.highlight pre,pre{padding:16px 16px 14px;overflow:auto;background-color:#f9f9f8;background-color:var(--color-background-lightest);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.08);box-shadow:0 1px 0 0 rgba(0,0,0,.08);-webkit-box-shadow:var(--box-shadow-lightest);box-shadow:var(--box-shadow-lightest);color:#584b4f;color:var(--color-base);text-shadow:none!important;border-radius:4px}pre code,pre tt{display:inline;max-width:none;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}pre code:after,pre code:before,pre tt:after,pre tt:before{content:normal}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#444}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-smw,.pl-v{color:#ed6a43}.pl-bu{color:#b52a1d}.pl-c2,.pl-ii{color:#f8f8f8;background-color:#b52a1d}.pl-c2:before{content:"^M"}.pl-sr .pl-cce{font-weight:700;color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#1d3e81}.pl-mq{color:teal}.pl-mi{font-style:italic;color:#333}.pl-mb{font-weight:700;color:#333}.pl-md{color:#bd2c00;background-color:#ffecec}.pl-mi1{color:#55a532;background-color:#eaffea}.pl-mc{color:#ef9700;background-color:#ffe3b4}.pl-mi2{color:#d8d8d8;background-color:grey}.pl-mdr{font-weight:700;color:#795da3}.pl-mo{color:#1d3e81}.pl-ba{color:#595e62}.pl-sg{color:silver}.pl-corl{text-decoration:underline;color:#183691}.anchor{display:block;float:left;position:absolute;padding-right:2px;-webkit-transform:translateX(-100%);transform:translateX(-100%);text-decoration:none!important}.anchor:focus{outline:none}.anchor>*{visibility:hidden}:hover>.anchor>*{visibility:visible}.anchor>:before{content:"#";font-weight:400!important;color:#a2aacd;color:var(--color-key-light)}.anchor--disable .anchor>*,.anchor.anchor--disable>*{visibility:hidden!important}.searchbox{width:100%}.searchbox,.searchbox:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:6px 8px 6px 32px;font-size:.875rem;line-height:24px;color:#584b4f;color:var(--color-base);border:0;background:#eae8e3 url(../assets/search.72dc4739.svg) no-repeat 10px;background:var(--color-background-light) url(../assets/search.72dc4739.svg) no-repeat 10px;background-size:16px 16px;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.15);box-shadow:0 1px 0 0 rgba(0,0,0,.15);-webkit-box-shadow:var(--box-shadow-light);box-shadow:var(--box-shadow-light);border-radius:4px;outline:none;-webkit-transition:width .35s cubic-bezier(.23,1,.32,1);-o-transition:width .35s cubic-bezier(.23,1,.32,1);transition:width .35s cubic-bezier(.23,1,.32,1)}.searchbox::-webkit-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:-moz-placeholder,.searchbox::-moz-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox::-moz-placeholder{opacity:1}.searchbox:-ms-input-placeholder{color:#afa1a5;color:var(--color-base-light)}.searchbox:focus{background-color:#f4f3f1!important;background-color:var(--color-background-lighter)!important;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.searchbox--collapsed:not(:focus){background-color:transparent;border:0;width:32px!important;margin-right:-12px;cursor:pointer;-webkit-box-shadow:none;box-shadow:none}.searchbox--collapsed:not(:focus)::-webkit-search-cancel-button,.searchbox--collapsed:not(:focus)::-webkit-search-decoration{display:none}.searchbox--collapsed:not(:focus)::-webkit-search-results-button,.searchbox--collapsed:not(:focus)::-webkit-search-results-decoration{display:none}.searchbox--collapsed:not(:focus)::-ms-clear{display:none}.searchbox--large,.searchbox--large:focus{padding:8px 12px 8px 40px}.alert{padding:16px 16px 16px 24px;border-left:4px solid #ba3525;border-left:4px solid var(--color-red);border-radius:4px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);position:relative;font-size:.9em}.alert:before{content:"!";position:absolute;top:12px;left:-14px;display:block;width:24px;height:24px;background:#ba3525;background:var(--color-red);font-size:12px;padding:0 4px;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;font-weight:700;color:#fff;line-height:22px;border-radius:50%}.alert a{color:#ba3525;color:var(--color-red)}.alert :last-child{margin-bottom:0}.toc{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none;margin-left:-4px}.toc li{margin:4px}.toc a{display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-weight:bolder;letter-spacing:normal;padding:.25rem 1rem .15rem;border-radius:4px}.toc a,.toc a:hover{color:#fff;text-decoration:none}@media (max-width:768px){.toc{font-size:.85rem}}.welcome__intro{padding:16px 0 136px;border-bottom:1px dashed #eae8e3;border-bottom:1px dashed var(--color-background-light);background-image:-o-radial-gradient(center,ellipse,#fff 0,#eae8e3 100%);background-image:radial-gradient(ellipse at center,#fff 0,#eae8e3 100%);background-image:-o-radial-gradient(center,ellipse,#fff 0,var(--color-background-light) 100%);background-image:radial-gradient(ellipse at center,#fff 0,var(--color-background-light) 100%);background-size:auto 100%;background-position:50% 0}.welcome__intro h1{font-size:2rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__logo{display:block;margin:0 auto;max-width:320px}.welcome__logo svg{display:block;height:240px}.welcome__content{padding-top:16px;display:block;max-width:calc(98% - 320px)}.welcome__example{display:block;max-width:850px;margin:-160px auto auto}.welcome__example .highlight pre{padding:32px;background:#fff;-webkit-box-shadow:0 0 16px #d6d1c8;box-shadow:0 0 16px #d6d1c8;-webkit-box-shadow:0 0 16px var(--color-background);box-shadow:0 0 16px var(--color-background)}.welcome__intro .links a{color:#584b4f;color:var(--color-base);text-decoration:none}.welcome__intro .links a:hover{color:#4f5b93;color:var(--color-key);text-decoration:none}.welcome__team img{border-radius:50%;max-width:190px;display:inline-block}.welcome__team h3{display:block;margin:.2em 0}.welcome__team div.grid>*{margin-bottom:1em}@media (max-width:768px){.welcome__content{padding:32px 16px 16px;max-width:100%}.welcome__logo svg{height:160px}.welcome__intro h1{text-align:center;font-size:1.75rem;margin-bottom:16px;color:#4f5b93;color:var(--color-key)}.welcome__intro .links{text-align:center}}.off-canvas-menu{position:fixed;top:0;right:0;pointer-events:none}.off-canvas-menu__content{-webkit-transform:translate3d(105%,0,0);transform:translate3d(105%,0,0)}.component-info{position:-webkit-sticky;position:sticky;top:16px;bottom:16px;padding:24px;background-color:#f4f3f1;background-color:var(--color-background-lighter);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);border-radius:4px;font-size:.875rem}.component-info,.component-info a,.component-info a [class*=icon]{color:#584b4f;color:var(--color-base)}.component-info a:hover{color:#afa1a5;color:var(--color-base-light);text-decoration:none}.component-info pre{line-height:1;font-size:.75rem}.component-info__title{display:-ms-flexbox;display:flex;font-size:1.5rem;line-height:1rem;margin-bottom:1rem;color:#584b4f;color:var(--color-base);-ms-flex-align:center;align-items:center}.component-info__title a{text-decoration:none}.component-info__title>:not(:last-child){margin-right:8px}.component-info__subtitle{font-size:.875rem;line-height:.875rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.875rem;color:#afa1a5;color:var(--color-base-light)}.component-info__info{padding:0;list-style:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row;flex-flow:row;-ms-flex-pack:start;justify-content:flex-start}.component-info__info li{margin-right:16px}.component-info__info li:last-child{margin-right:0}.component-info__info a{font-size:.75rem;text-decoration:none;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.component-info__contributors{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;list-style:none}.component-info__contributors li{padding:0 4px 4px 0;margin:0}.component-info__contributors img{display:block;width:40px;height:auto;border-radius:2px}.component-info__contributors img,.component-info__participation{-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter)}.component-info__participation{background-color:#f9f9f8;background-color:var(--color-background-lightest);padding:8px;border-radius:4px;text-align:center}.component-info__participation svg{display:block;margin:auto;max-width:100%;height:auto!important}:root{--color-key:#4f5b93;--color-key-light:#a2aacd;--color-base:#584b4f;--color-base-light:#afa1a5;--color-green:#40a977;--color-green-light:#9ad8bb;--color-red:#ba3525;--color-red-light:#e79187;--color-background:#d6d1c8;--color-background-light:#eae8e3;--color-background-lighter:#f4f3f1;--color-background-lightest:#f9f9f8;--box-shadow-light:0 1px 0 0 rgba(0,0,0,0.15);--box-shadow-lighter:0 1px 0 0 rgba(0,0,0,0.1);--box-shadow-lightest:0 1px 0 0 rgba(0,0,0,0.08)}.version-selector{position:relative;font-size:.875rem;color:#fff}.version-selector :last-child{margin-bottom:0}.version-selector__button,.version-selector__version{-webkit-appearance:none;border:0;margin:0;text-shadow:none;-webkit-box-shadow:none;box-shadow:none;text-decoration:none;text-transform:none;overflow:visible;cursor:pointer;outline:none;display:-ms-flexbox;display:flex;background-color:#584b4f;background-color:var(--color-base);-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.1);box-shadow:0 1px 0 0 rgba(0,0,0,.1);-webkit-box-shadow:var(--box-shadow-lighter);box-shadow:var(--box-shadow-lighter);color:#fff;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:.75rem;font-weight:bolder;letter-spacing:normal;padding:.25rem .4rem .2rem;border-radius:4px}.version-selector__button{position:relative}.version-selector__button [class=icon-chevron-down]{display:inline-block;margin-left:4px}.version-selector__button [class=icon-chevron-up]{display:none;margin-left:4px}.version-selector__version{background-color:hsla(0,0%,100%,.33);border:1px solid transparent;text-decoration:none;color:#fff!important}.version-selector__version:hover{background-color:hsla(0,0%,100%,.11);border:1px solid hsla(0,0%,100%,.22)}.version-selector__button--dev,.version-selector__version--dev,.version-selector__version--dev:hover{background-color:#ba3525;background-color:var(--color-red)}.version-selector__button--latest,.version-selector__version--latest,.version-selector__version--latest:hover{background-color:#40a977;background-color:var(--color-green)}.version-selector__panel{position:fixed;top:-20000em;visibility:hidden}</style>
+        <script async src="../assets/main.d691d407.js"></script>
+            </head>
+
+    <body>
+            <header class="header">
+            <div class="wrapper">
+                <div class="header__container">
+                    <a class="header__logo" href="../">
+                        <svg xmlns="http://www.w3.org/2000/svg" width="320" height="47.29" viewBox="0 428.964 320 47.29"><path fill="#584B4F" d="M30.86 452.385c1.637-2.287 2.455-5 2.455-8.134 0-4.313-1.367-7.87-4.088-10.68-2.723-2.812-6.39-4.216-11.004-4.216h-7.71c-3.79 0-6.49.798-8.1 2.388C.806 433.332 0 435.872 0 439.355v36.512h9.08v-17.245h6.53l9.08 17.245h10.52L24.82 457.12c2.395-.87 4.41-2.447 6.04-4.735zm-8.488-3.334c-1.24 1.33-2.82 1.99-4.734 1.99H9.08v-9.47c0-2.74 1.35-4.112 4.05-4.112h4.508c2 0 3.603.61 4.8 1.83 1.196 1.22 1.797 2.82 1.797 4.802 0 1.982-.623 3.64-1.864 4.964v-.003zm20.348 14.536c0 4.572 1.055 7.766 3.167 9.57 2.114 1.81 5.782 2.71 11.008 2.71h16.46v-8.1H57.548c-2.18 0-3.68-.35-4.51-1.045-.83-.695-1.24-1.96-1.24-3.788v-6.467h14.434l.656-8.1h-15.09v-10.912h21.56v-8.098H42.72v34.23zm57.97-33.442c-.718-.523-1.665-.787-2.84-.787-1.177 0-2.168.285-2.972.85-.807.567-1.537 1.592-2.19 3.073l-14.89 42.585h9.47l2.55-8.03h15.613l2.613 8.03h9.47l-14.893-42.588c-.567-1.572-1.21-2.613-1.93-3.135v.002zM92.1 460.19l5.75-18.42 5.487 18.418H92.1v.002zm53.074 5.455c-1.155 1.678-3.245 2.512-6.27 2.512-3.03 0-5.258-.914-6.697-2.74-1.394-1.83-2.093-5.25-2.093-10.256v-4.052c0-1.783.045-3.2.13-4.243.178-3.27.785-5.576 1.833-6.928 1.48-1.914 3.745-2.873 6.794-2.873 2.613 0 4.532.653 5.75 1.96 1.218 1.308 2.07 3.245 2.547 5.813h8.49c0-5.14-1.557-9.07-4.67-11.79-3.114-2.723-7.153-4.084-12.116-4.084-3.398 0-6.293.564-8.687 1.7-6.097 2.783-9.146 9.686-9.146 20.704v3.918c0 13.982 5.945 20.968 17.833 20.968 5.4 0 9.58-1.59 12.54-4.77 2.964-3.176 4.44-7.73 4.44-13.653h-8.426c-.346 3.53-1.1 6.134-2.25 7.81v.005zm14.667-36.29v8.1h12.412v38.41h9.08v-38.41h12.47v-8.1"/><path fill="#4F5B93" d="M218.89 429.356h-18.03v46.51h9.086v-14.897h8.944c4.876 0 8.647-1.337 11.328-4.016 2.683-2.68 4.02-6.608 4.02-11.788s-1.337-9.112-4.02-11.788c-2.68-2.68-6.454-4.02-11.328-4.02v-.002zm4.538 21.686c-1.15 1.177-2.815 1.768-5 1.768h-8.485v-15.354h8.484c4.483 0 6.73 2.572 6.73 7.71 0 2.744-.578 4.703-1.73 5.88v-.004zm43.93-2.02H250.31v-19.666h-9.088v46.51h9.086v-18.81h17.05v18.81h9.076v-46.51h-9.078m48.63 4.02c-2.683-2.68-6.46-4.02-11.335-4.02h-18.027v46.507h9.085V460.97h8.943c4.877 0 8.654-1.336 11.337-4.014 2.68-2.678 4.013-6.608 4.013-11.788s-1.332-9.112-4.013-11.79v-.003zm-6.795 17.666c-1.154 1.177-2.822 1.768-5 1.768h-8.484v-15.354h8.485c4.483 0 6.734 2.572 6.734 7.71 0 2.744-.583 4.703-1.735 5.88v-.004z"/></svg>
+                    </a>
+                    <form class="header__search">
+                        <input type="search" class="searchbox searchbox--collapsed" data-docsearch placeholder="Search documentation...">
+                    </form>
+                    <div class="header__menu">
+    <button class="hamburger" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+        <div class="hamburger__box">
+            <div class="hamburger__inner">
+                <span class="visually-hidden">Menu</span>
+            </div>
+        </div>
+    </button>
+</div>
+<nav id="off-canvas-menu" class="off-canvas-menu" aria-hidden="true" tabindex="0">
+    <div class="off-canvas-menu__content">
+        <button aria-label="Close menu" class="off-canvas-menu__close" data-ctrly="off-canvas-menu" data-off-canvas-menu-control>
+            <i class="icon-x" aria-hidden="true"></i>
+        </button>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../">Home</a>
+        </section>
+
+        <section class="off-canvas-menu__section">
+            <a class="off-canvas-menu__section-top" href="../changelog.html">Changelog</a>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Core Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../event-loop/">
+                        EventLoop
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../stream/">
+                        Stream
+
+                        <span class="off-canvas-menu__version">
+                            v1.1.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise/">
+                        Promise
+
+                        <span class="off-canvas-menu__version">
+                            v2.8.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Network Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../socket/">
+                        Socket
+
+                        <span class="off-canvas-menu__version">
+                            v1.4.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../datagram/">
+                        Datagram
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Protocol Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http/">
+                        HTTP
+
+                        <span class="off-canvas-menu__version">
+                            v0.8.6
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../http-client/">
+                        HTTPClient
+
+                        <span class="off-canvas-menu__version">
+                            v0.5.10
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../dns/">
+                        DNS
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+            <section class="off-canvas-menu__section">
+            <h3 class="off-canvas-menu__section-header">Utility Components</h3>
+            <ul class="off-canvas-menu__list">
+                            <li>
+                    <a class="off-canvas-menu__link" href="../cache/">
+                        Cache
+
+                        <span class="off-canvas-menu__version">
+                            v1.0.0
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../child-process/">
+                        ChildProcess
+
+                        <span class="off-canvas-menu__version">
+                            v0.6.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-timer/">
+                        PromiseTimer
+
+                        <span class="off-canvas-menu__version">
+                            v1.5.1
+                        </span>
+                    </a>
+                </li>
+                            <li>
+                    <a class="off-canvas-menu__link" href="../promise-stream/">
+                        PromiseStream
+
+                        <span class="off-canvas-menu__version">
+                            v1.2.0
+                        </span>
+                    </a>
+                </li>
+                        </ul>
+        </section>
+        </div>
+</nav>
+                </div>
+            </div>
+        </header>
+    
+        <div class="container">
+        <div class="wrapper">
+            <div class="grid grid--wrap grid--gutter">
+                <main class="main">
+                    <h1>Stream License</h1>
+
+    <p>Copyright (c) 2012 Igor Wiedler, Chris Boden</p>
+<p>Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:</p>
+<p>The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.</p>
+<p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.</p>
+                </main>
+                <aside class="sidebar" role="complementary">
+                    <section class="component-info">
+                        <h2 class="component-info__title">
+                            <a href="../stream/">Stream</a>
+
+                            <div class="version-selector">
+                                <button class="version-selector__button version-selector__button--latest" data-ctrly="component-version-selector" data-version-selector-control>
+                                    v1.1.1
+
+                                    <i class="icon-chevron-down" aria-hidden="true"></i>
+                                    <i class="icon-chevron-up" aria-hidden="true"></i>
+                                </button>
+
+                                <div id="component-version-selector" class="version-selector__panel" aria-hidden="true">
+                                    <p>Read the documentation of development and older versions on GitHub:</p>
+
+                                    <ul class="version-selector__list">
+                                        <li>
+                                            <a href="https://github.com/reactphp/stream#readme" class="version-selector__version version-selector__version--dev">
+                                                master
+                                            </a>
+                                        </li>
+                                                                                                                                                                                                                    <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v1.1.0#readme" class="version-selector__version">
+                                                    v1.1.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v1.0.0#readme" class="version-selector__version">
+                                                    v1.0.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.7.7#readme" class="version-selector__version">
+                                                    v0.7.7
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.7.6#readme" class="version-selector__version">
+                                                    v0.7.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.7.5#readme" class="version-selector__version">
+                                                    v0.7.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.7.4#readme" class="version-selector__version">
+                                                    v0.7.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.7.3#readme" class="version-selector__version">
+                                                    v0.7.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.7.2#readme" class="version-selector__version">
+                                                    v0.7.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.7.1#readme" class="version-selector__version">
+                                                    v0.7.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.7.0#readme" class="version-selector__version">
+                                                    v0.7.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.6.0#readme" class="version-selector__version">
+                                                    v0.6.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.5.0#readme" class="version-selector__version">
+                                                    v0.5.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.4.6#readme" class="version-selector__version">
+                                                    v0.4.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.4.5#readme" class="version-selector__version">
+                                                    v0.4.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.4.4#readme" class="version-selector__version">
+                                                    v0.4.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.4.3#readme" class="version-selector__version">
+                                                    v0.4.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.4.2#readme" class="version-selector__version">
+                                                    v0.4.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.4.1#readme" class="version-selector__version">
+                                                    v0.4.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.3.4#readme" class="version-selector__version">
+                                                    v0.3.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.4.0#readme" class="version-selector__version">
+                                                    v0.4.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.3.3#readme" class="version-selector__version">
+                                                    v0.3.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.3.2#readme" class="version-selector__version">
+                                                    v0.3.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.3.1#readme" class="version-selector__version">
+                                                    v0.3.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.3.0#readme" class="version-selector__version">
+                                                    v0.3.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.2.6#readme" class="version-selector__version">
+                                                    v0.2.6
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.2.5#readme" class="version-selector__version">
+                                                    v0.2.5
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.2.4#readme" class="version-selector__version">
+                                                    v0.2.4
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.2.3#readme" class="version-selector__version">
+                                                    v0.2.3
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.2.2#readme" class="version-selector__version">
+                                                    v0.2.2
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.2.1#readme" class="version-selector__version">
+                                                    v0.2.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.2.0#readme" class="version-selector__version">
+                                                    v0.2.0
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.1.1#readme" class="version-selector__version">
+                                                    v0.1.1
+                                                </a>
+                                            </li>
+                                                                                                                                                                            <li>
+                                                <a href="https://github.com/reactphp/stream/tree/v0.1.0#readme" class="version-selector__version">
+                                                    v0.1.0
+                                                </a>
+                                            </li>
+                                                                                                                        </ul>
+                                </div>
+                            </div>
+                        </h2>
+
+                        <ul class="component-info__info">
+                            <li>
+                                <a href="https://github.com/reactphp/stream">
+                                    <i class="icon-github" aria-hidden="true"></i> Repository
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../stream/changelog.html">
+                                    <i class="icon-calendar" aria-hidden="true"></i> Changelog
+                                </a>
+                            </li>
+                            <li>
+                                <a href="../stream/license.html">
+                                    <i class="icon-law" aria-hidden="true"></i> MIT License
+                                </a>
+                            </li>
+                        </ul>
+
+                        <h3 class="component-info__subtitle">Installation</h3>
+
+                        <div class="highlight highlight-source-shell"><pre>composer require react/stream:^1.1.1</pre></div>
+
+                        <h3 class="component-info__subtitle">Contributors</h3>
+
+                        <ul class="component-info__contributors">
+                                                    <li>
+                                <a href="https://github.com/clue">
+                                    <img src="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/776829?v=4&amp;s=80 2x" alt="clue" title="clue (172 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/WyriHaximus">
+                                    <img src="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/147145?v=4&amp;s=80 2x" alt="WyriHaximus" title="WyriHaximus (52 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/igorw">
+                                    <img src="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/88061?v=4&amp;s=80 2x" alt="igorw" title="igorw (43 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/cboden">
+                                    <img src="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/617694?v=4&amp;s=80 2x" alt="cboden" title="cboden (43 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jsor">
+                                    <img src="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/55574?v=4&amp;s=80 2x" alt="jsor" title="jsor (12 contributions)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/steverhoades">
+                                    <img src="https://avatars0.githubusercontent.com/u/1146668?v=4&amp;s=40" srcset="https://avatars0.githubusercontent.com/u/1146668?v=4&amp;s=80 2x" alt="steverhoades" title="steverhoades (4 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/arnaud-lb">
+                                    <img src="https://avatars3.githubusercontent.com/u/365207?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/365207?v=4&amp;s=80 2x" alt="arnaud-lb" title="arnaud-lb (3 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/carusogabriel">
+                                    <img src="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/16328050?v=4&amp;s=80 2x" alt="carusogabriel" title="carusogabriel (3 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/lysenkobv">
+                                    <img src="https://avatars3.githubusercontent.com/u/1250142?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/1250142?v=4&amp;s=80 2x" alt="lysenkobv" title="lysenkobv (3 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/jmalloc">
+                                    <img src="https://avatars3.githubusercontent.com/u/761536?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/761536?v=4&amp;s=80 2x" alt="jmalloc" title="jmalloc (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/nawarian">
+                                    <img src="https://avatars2.githubusercontent.com/u/3905582?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/3905582?v=4&amp;s=80 2x" alt="nawarian" title="nawarian (2 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/pulyavin">
+                                    <img src="https://avatars3.githubusercontent.com/u/9364583?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/9364583?v=4&amp;s=80 2x" alt="pulyavin" title="pulyavin (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/DaveRandom">
+                                    <img src="https://avatars1.githubusercontent.com/u/2396425?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/2396425?v=4&amp;s=80 2x" alt="DaveRandom" title="DaveRandom (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/docteurklein">
+                                    <img src="https://avatars3.githubusercontent.com/u/109846?v=4&amp;s=40" srcset="https://avatars3.githubusercontent.com/u/109846?v=4&amp;s=80 2x" alt="docteurklein" title="docteurklein (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/reedy">
+                                    <img src="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=40" srcset="https://avatars2.githubusercontent.com/u/67615?v=4&amp;s=80 2x" alt="reedy" title="reedy (1 contribution)">
+                                </a>
+                            </li>
+                                                    <li>
+                                <a href="https://github.com/andig">
+                                    <img src="https://avatars1.githubusercontent.com/u/184815?v=4&amp;s=40" srcset="https://avatars1.githubusercontent.com/u/184815?v=4&amp;s=80 2x" alt="andig" title="andig (1 contribution)">
+                                </a>
+                            </li>
+                                                </ul>
+
+                        <h3 class="component-info__subtitle">Activity</h3>
+
+                        <div class="component-info__participation">
+                            <svg width="320" height="42">
+    <defs>
+        <linearGradient id="reactphp-stream-participation-gradient" x1="0" x2="0" y1="1" y2="0">
+            <stop offset="10%" stop-color="#40a977"></stop>
+            <stop offset="90%" stop-color="#ba3525"></stop>
+        </linearGradient>
+        <mask id="reactphp-stream-participation-sparkline" x="0" y="0" width="320" height="40" >
+            <polyline 
+                transform="translate(0, 40) scale(1,-1)"
+                points="0,1 6,1 12,1 18,1 24,1 30,1 36,1 42,1 48,1 54,1 60,1 66,1 72,1 78,1 84,1 90,1 96,1 102,1 108,1 114,1 120,1 126,1 132,1 138,1 144,1 150,1 156,1 162,1 168,1 174,3 180,1 186,1 192,3 198,1 204,1 210,1 216,1 222,1 228,1 234,1 240,1 246,1 252,1 258,1 264,1 270,1 276,1 282,1 288,6 294,1 300,1 306,1" 
+                fill="transparent" 
+                stroke="#40a977" 
+                stroke-width="2"
+            >
+        </mask>
+    </defs>
+
+    <g transform="translate(0, -1.5)">
+        <rect 
+            x="0" 
+            y="-2" 
+            width="320" 
+            height="42"
+            style="stroke:none;fill:url(#reactphp-stream-participation-gradient);mask:url(#reactphp-stream-participation-sparkline)"
+        ></rect>
+    </g>
+</svg>
+                        </div>
+                    </section>
+                </aside>
+            </div>
+        </div>
+    </div>
+
+            <footer class="footer">
+            <div class="wrapper">
+                <ul class="links">
+                    <li><a href="https://github.com/reactphp"><i class="icon-github" aria-hidden="true"></i> GitHub</a></li>
+                    <li><a href="https://twitter.com/reactphp"><i class="icon-twitter" aria-hidden="true"></i> Twitter</a></li>
+                    <li><a href="https://gitter.im/reactphp/reactphp"><i class="icon-hash" aria-hidden="true"></i> Gitter</a></li>
+                </ul>
+            </div>
+        </footer>
+        </body>
+</html>
